如何在Sparx EA自定义文档的对应属性下添加枚举表格
Sparx EA类模型文档生成:解决枚举属性表格展示问题
需求回顾
需要生成类模型规范文档,要求:
- 类下依次列出属性,区分简单数据类型和枚举类型
- 简单类型仅显示类型名称;枚举类型需额外展示类型备注,并用双列表格呈现枚举代码与对应备注
- 所有数据类型(含枚举)均建模为独立Class元素
问题分析
之前尝试自定义SQL模板片段时遇到的核心问题:
- 简单类型属性生成空表
- 枚举值无法正确分行分列,或每个枚举值生成独立表格并重复属性内容
- 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,需先批量修正:
- 选中所有枚举类
- 在属性面板中设置
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
相关产品推荐
相关产品推荐

