如何按名称访问包

时间:2016-08-08 15:03:14

标签: enterprise-architect

我们有包含包和子包的模型。那么我们如何通过包名称将指针移动到特定的包。那么有没有办法遍历模型并按名称获取包

3 个答案:

答案 0 :(得分:1)

使用

Repositore.SQLQuery("SELECT package_id FROM t_package WHERE name=<theName>")

这将返回一个XML结果集,其中包含具有您要查找的名称的所有包。它可能看起来像这样:

<?xml version="1.0"?>
<EADATA version="1.0" exporter="Enterprise Architect">
    <Dataset_0><Data><Row><package_id>1</package_id></Row><Row><package_id>2</package_id></Row><Row><package_id>3</package_id></Row></Data></Dataset_0></EADATA>

因此,你可以在XML解析器中填充它或使用像

这样的正则表达式
/package_id>(\d+)/

过滤所有包ID。

反过来简单地使用

Repository.GetPackageById(<found id>)

访问找到的包。

答案 1 :(得分:0)

正如评论中所指出的,这将起作用:

 List<EA.Package> myPacks = new List<EA.Package>();

public void GOThroughAllPackages(EA.Package        dumpPackage)
    {
        foreach (EA.Package packages in      dumpPackage.Packages)
            {
                       if(packages.Name.ToLower().Equals(requiredPackName))
                   {
                       myPacks.Add(packages);
                       break;
                   }
                GOThroughAllPackages(packages);
            }
}

答案 2 :(得分:0)

不需要解析xml字符串的替代解决方案(C#):

        List<EA.Package> packages = new List<EA.Package>();
        string searchValue = "somePackageName";
        var packageElements = Repository.GetElementSet("select o.Object_ID from t_object o inner join t_package p on p.ea_guid = o.ea_guid where o.Name = '"+searchValue+"'",2);
        foreach (EA.Element packageElement in packageElements) 
        {
            packages.Add(Repository.GetPackageByGuid(packageElement.ElementGUID);)
        }

它使用带有参数Repository.GetElementSet()的{​​{1}}来告诉它接受SQL查询 请注意,此解决方案不会返回根软件包,因为它们没有2对应软件包。