在 BPM Metastorm 中获取地图变量列表

Getting list of Variables of map in BPM Metastorm


我正在尝试自动获取某些 map OUTSIDE 程序中的变量列表。我知道我可以在 .process 文件中找到它们,具有 xml 结构。
我还发现 "x:object" 变量包含 "x:Type" 以 "MboField}" 结尾。
但不幸的是我需要进一步缩小搜索条件,因为我仍然找不到将变量与其他对象分开的主要模式。
这是我当前在 c# 中的代码:

            var xdoc = XDocument.Load(patches.ProcessFilePatch);
        var xmlns = XNamespace.Get("http://schema.metastorm.com/Metastorm.Common.Markup");

        IEnumerable<string> values = from x in xdoc.Descendants(xmlns+"Object")
                                     where x.Attribute(xmlns+"Type").Value.ToString().EndsWith("MboField}")
                                     select x.Attribute(xmlns+"Name").Value.ToString();

        VariablesInProcessFile = values.ToList();

还有其他查找变量的方法吗?

    private void getVariablesInProcessFile()
    {
        var xdoc = XDocument.Load(patches.ProcessFilePatch);
        var xmlns = XNamespace.Get("http://schema.metastorm.com/Metastorm.Common.Markup");

       var dane = xdoc.Descendants(xmlns + "Object").Where(x => CheckAttributes(x, xmlns)).ToArray();

        IEnumerable<string> valuesE = from x in dane.Descendants(xmlns + "Object")
                                       where x.Attribute(xmlns + "Type").Value.ToString().EndsWith("MboField}")
                                       select x.Attribute(xmlns + "Name").Value.ToString();

        VariablesInProcessFile = valuesE.ToList();
    }

    private bool CheckAttributes(XElement x, XNamespace xmlns)
    {
        var wynik = x.Attribute(xmlns + "Name");

        return wynik != null && (wynik.Value == patches.MapName + "Data" || wynik.Value == patches.altMapName + "Data");
    }

其中 "patches" 是我自己的 class 包含 .process 文件的补丁和变量组的可能名称,通常与地图名称相关。