javascript - 通过 Enterprise Architect 中的脚本访问嵌套元素
问题描述
我是 Enterprise Architect 的初学者,我需要编写一个小程序来选择 Enterprise Architect 项目中的所有“活动”类型,以设置“别名”属性的特定值(不相同但遵循特定逻辑)。我想用脚本工具来做到这一点,但我在通过脚本访问任何活动对象时遇到了一些困难。
我找到了链接1 “企业架构师对象模型”,但我无法解决我的问题。下面附上项目树。
这里有一些我试过的javascript代码:
var elem as EA.Element;
elem = Repository.GetTreeSelectedObject();
elem.Alias = "Hi at all";
但是这段代码有两个问题:
1)它需要用鼠标指针选择活动;
2)运行代码后,活动的“别名”字段为空。
解决方案
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 对象的任何属性后调用。
推荐阅读
- php - 是否有等效于 PHP_OS_FAMILY 的 PHP 常量(对于 PHP < 7.2)?
- java - 如何修复“JPasswordField 中的 getText() 已被弃用”
- python - PyQt QThread:如何在同一线程中的工作对象上运行函数?
- java - 如何使用apache spark在文件中写入日志
- python-3.x - 如何创建一个新列,其中包含带有 Pandas 的 Nan 列的名称?
- python - scipy 最小化(SLSQP)的限制结果
- apache-nifi - 我有 Json 数组,它的每个对象都具有动态属性。我必须在 nifi 中将所有对象合并到一个 Json 对象中
- wordpress - 按类别过滤 wordpress 帖子 - graphql 和 gatsby.js 的问题
- javascript - 使用 Typescript 反应钩子:期望一个赋值或函数调用,而是看到一个表达式
- spring-boot - 部署在 glassfish 中时的 FileOutputStream NPE