首页 > 解决方案 > 通过 Enterprise Architect 中的脚本访问嵌套元素

问题描述

我是 Enterprise Architect 的初学者,我需要编写一个小程序来选择 Enterprise Architect 项目中的所有“活动”类型,以设置“别名”属性的特定值(不相同但遵循特定逻辑)。我想用脚本工具来做到这一点,但我在通过脚本访问任何活动对象时遇到了一些困难。

我找到了链接1 “企业架构师对象模型”,但我无法解决我的问题。下面附上项目树。

这里有一些我试过的javascript代码:

var elem as EA.Element;
elem = Repository.GetTreeSelectedObject();
elem.Alias = "Hi at all";

但是这段代码有两个问题:

1)它需要用鼠标指针选择活动;

2)运行代码后,活动的“别名”字段为空。

在此处输入图像描述

标签: javascriptvbscriptenterprise-architectjscriptbpmn

解决方案


1.如何处理所有活动

有不同的方法来处理这个问题。一种选择是从选定的开始并迭代每个拥有的元素;和他们拥有的元素。
那将是这样的(C#,但你明白了它的要点):

public void main()
{
    var selectedPackage = Repository.GetTreeSelectedPackage();
    processPackage(selectedPackage);
}

private void processPackage(EA.Package package)
{
    //process owned elements
    foreach (EA.Element element in package.Elements)
    {
        processElement(element);
    }
    //process SubPackages
    foreach(EA.Package subPackage in package.Packages)
    {
        processPackage(subPackage);
    }
}
private void processElement(EA.Element element)
{
    //test type and steroetype to make sure we only treat Activities
    if (element.Type == "Activity" && element.Stereotype == "Activity")
    {
        element.Alias = "newAlias";
        element.Update();
    }
    //process owned Elements
    foreach(EA.Element subElement in element.Elements)
    {
        processElement(subElement);
    }
}

这适用于有限数量的元素,但如果您想处理分散在大型模型中的大量元素,它会变得非常慢。

在这种情况下,最好使用Repository.GetElementSet(MySQLSelectQuery,2). 将此操作与 SQL 查询(需要第二个参数2)一起使用,以准确选择您需要的元素。
这将比迭代整个模型快一个数量级。

我的 github 存储库中的这种方法(以及更多)示例:

2.如何保存更新

这很简单。确保Update()在更改 API 对象的任何属性后调用。


推荐阅读