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

如何在Sparx EA自定义文档的对应属性下添加枚举表格

Sparx EA类模型文档生成:解决枚举属性表格展示问题

需求回顾

需要生成类模型规范文档,要求:

  • 类下依次列出属性,区分简单数据类型和枚举类型
  • 简单类型仅显示类型名称;枚举类型需额外展示类型备注,并用双列表格呈现枚举代码与对应备注
  • 所有数据类型(含枚举)均建模为独立Class元素

问题分析

之前尝试自定义SQL模板片段时遇到的核心问题:

  1. 简单类型属性生成空表
  2. 枚举值无法正确分行分列,或每个枚举值生成独立表格并重复属性内容
  3. Template Selector因元素均为Class类型无法区分属性类型

可行解决方案

1. 修正自定义SQL查询,区分类型并关联枚举值

首先编写能识别枚举类型、关联枚举值的SQL查询,确保仅当属性类型为枚举时才拉取枚举值数据。假设你的枚举类已设置Stereotype为Enumeration(EA内置枚举标识),SQL示例如下:

SELECT 
  a.Name AS AttributeName,
  a.Notes AS AttributeNotes,
  t.Name AS TypeName,
  t.Notes AS TypeNotes,
  t.Stereotype AS TypeStereotype,
  e.Name AS EnumValue,
  e.Notes AS EnumValueNotes
FROM t_attribute a
INNER JOIN t_object t ON a.Classifier = t.Object_ID
-- 仅当类型为枚举时,关联其属性作为枚举值
LEFT JOIN t_attribute e ON t.Object_ID = e.Object_ID_Parent AND t.Stereotype = 'Enumeration'
WHERE a.Object_ID = #OBJECTID#
ORDER BY a.Position, e.Position

说明:#OBJECTID#是EA模板内置变量,代表当前生成文档的类ID;LEFT JOIN确保简单类型不会拉取到枚举值数据。

2. 模板片段添加条件渲染与分组控制

在「Attribute_and_DataType」模板片段中,使用EA的模板语法结合GROUP_BY和条件判断,实现:

  • 仅枚举类型属性渲染表格
  • 同一枚举类型仅生成一个表格,所有枚举值归入同一表格

模板结构示例:

$QUERY_REPLACE("Attribute_and_DataType_SQL", "", "
*<b>%AttributeName%</b>: %TypeName%
%IF TypeStereotype = 'Enumeration' THEN%
  <br/><i>类型备注:</i>%TypeNotes%
  <table border='1' cellpadding='4'>
    <tr><th>枚举代码</th><th>备注</th></tr>
    -- 按类型名分组,确保同一枚举只生成一次表格
    %GROUP_BY(TypeName)%
      <tr><td>%EnumValue%</td><td>%EnumValueNotes%</td></tr>
    %ENDGROUP%
  </table>
%ENDIF%
<br/>
")

关键逻辑:

  • %IF TypeStereotype = 'Enumeration' THEN%:仅枚举类型触发表格渲染,避免简单类型生成空表
  • %GROUP_BY(TypeName)%:按枚举类型名分组,防止每个枚举值生成独立表格,同时避免重复显示属性基本信息

3. 模型前置检查(可选)

如果你的枚举类尚未设置正确的Stereotype,需先批量修正:

  1. 选中所有枚举类
  2. 在属性面板中设置Stereotype为Enumeration(EA内置选项)
    这一步能确保SQL和模板逻辑正确识别枚举类型。

4. 替代方案:利用EA内置枚举支持

如果允许调整模型,可将枚举类转换为EA内置的Enumeration元素(而非普通Class),这样EA默认模板就能识别枚举并生成表格,再通过自定义模板调整格式即可。但如果必须保留枚举为Class类型,仍需使用上述SQL+模板条件的方案。

注意事项

  • 确保枚举类的Stereotype正确设置,否则SQL无法区分枚举与简单类型
  • 使用GROUP_BY时,需保证SQL查询结果按TypeName排序(已在SQL的ORDER BY中包含)
  • 若属性无备注,可在模板中添加%IF AttributeNotes != "" THEN%等条件,避免显示空的备注字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:54:53