You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EA 15.2自定义模板中如何按字母顺序排序源元素?

在Enterprise Architect 15.2中对连接器源元素按字母排序的解决方法

为什么默认排序不生效

你遇到的问题是因为通过connector > source > element遍历的元素是关联引用的元素,不属于当前元素/包的直接子元素集合,文档选项里的全局「Order By」筛选器只会作用于直接层级的元素(比如包内元素、元素的子元素),对这种通过连接器关联的元素不生效。

可行的解决方法

方法1:使用模板脚本区段手动收集并排序

EA的自定义模板支持插入脚本(JScript/VBScript),你可以通过脚本遍历当前元素的所有连接器,收集对应的源元素后按名称排序再输出。

修改后的模板结构如下(以JScript为例):

package >
    element >
       {Element.Name}
        script >
            // 收集当前元素所有连接器的源元素
            var connectors = element.Connectors;
            var srcElements = [];
            for (var i = 0; i < connectors.Count; i++) {
                var conn = connectors.GetAt(i);
                var srcEl = Repository.GetElementByID(conn.SourceID);
                // 避免重复添加同一元素(如果多个连接器指向同一源)
                var exists = srcElements.some(el => el.ElementID === srcEl.ElementID);
                if (!exists) {
                    srcElements.push(srcEl);
                }
            }
            // 按元素名称字母排序
            srcElements.sort(function(a, b) {
                return a.Name.localeCompare(b.Name);
            });
            // 输出排序后的元素信息
            for (var j = 0; j < srcElements.length; j++) {
                var el = srcElements[j];
                Session.Output(el.Name);
                if (el.Notes) {
                    Session.Output(el.Notes);
                }
            }
        < script
        child elements >
        < child elements
    < element
< package

注意事项:

  • 在模板编辑器中,选中脚本区段后,要在右侧设置中选择对应的脚本语言(比如JScript)
  • 脚本里的element是模板当前上下文的元素对象,可直接调用EA的API方法
  • 如果需要去重(同一源元素被多个连接器关联),可以通过ElementID判断是否已添加

方法2:尝试区段内排序参数(仅部分场景生效)

如果不想用脚本,可以尝试在source下的element区段添加排序标记,不过这个方法仅对部分关联元素集合生效,不一定能解决你的问题,可作为备选:

package >
    element >
       {Element.Name}
        connector >
            source >
              element > {=Element.Name}
                {Element.Name}
                {Element.Notes}
              < element
            < source
        < connector
        child elements >
        < child elements
    < element
< package

这里的{=Element.Name}是告诉EA按元素名称排序当前区段的元素,但因为是连接器关联的元素,可能不会触发排序逻辑,所以优先推荐脚本方法。

内容的提问来源于stack exchange,提问作者PB17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 23:16:06