如何在EA脚本中获取自定义视图 stereotype 继承属性的预定义值?
解决Enterprise Architect中获取MDG stereotype继承属性预定义值的问题
方法1:直接查询EA底层数据库表
EA会将MDG导入的 stereotype 属性定义存储在t_stereotypeprop和t_stereotype关联表中,可通过Repository.ExecuteQuery执行SQL查询直接获取预定义值:
function getStereotypePropOptions(element, propName) { const stereoGUID = element.StereotypeGUID; if (!stereoGUID) return []; // 构造SQL查询,匹配目标stereotype的属性预定义值 const sql = `SELECT PropOptions FROM t_stereotypeprop sp JOIN t_stereotype s ON sp.Stereotype = s.Stereotype_ID WHERE s.StereotypeGUID = '${stereoGUID}' AND sp.Property = '${propName}'`; const resultSet = Repository.ExecuteQuery(sql); let options = []; if (resultSet?.length > 0) { // 预定义值通常以分号分隔,拆分后过滤空值 const optionStr = resultSet[0].PropOptions; if (optionStr) { options = optionStr.split(';').filter(opt => opt.trim() !== ''); } } return options; } // 使用示例:获取选中Action元素的Color属性预定义值 const selectedElement = Repository.GetContextObject(); if (selectedElement.Type === "Action") { const colorOptions = getStereotypePropOptions(selectedElement, "Color"); Session.Output("Color预定义值:" + colorOptions.join(', ')); }
说明
- 该方法直接读取EA存储的配置数据,不受API封装限制,能稳定获取MDG stereotype继承属性的预定义选项。
- 若属性预定义值使用其他分隔符(如逗号),需根据实际配置调整拆分逻辑。
方法2:通过Repository.GetExtendedDefinition读取 stereotype 定义
利用EA API的GetExtendedDefinition方法,获取目标stereotype的完整扩展定义,从中提取属性的预定义值:
function getExtendedPropOptions(element, propName) { const stereoName = element.Stereotype; if (!stereoName) return []; // 获取stereotype的扩展定义对象 const extDef = Repository.GetExtendedDefinition(stereoName, "", ""); if (!extDef) return []; // 遍历属性定义,匹配目标属性 const propDefs = extDef.Attributes; for (let i = 0; i < propDefs.Count; i++) { const prop = propDefs.GetAt(i); if (prop.Name === propName) { // 从Constraints字段提取预定义值 return prop.Constraints?.split(';').filter(opt => opt.trim() !== '') || []; } } return []; } // 使用示例 const selectedElement = Repository.GetContextObject(); const colorOptions = getExtendedPropOptions(selectedElement, "Color"); Session.Output("Color选项:" + colorOptions.join(', '));
说明
GetExtendedDefinition返回的ExtendedDefinition对象包含了stereotype的所有属性配置,Constraints字段存储预定义选项列表。- 需确保目标MDG技术已正确导入并激活,否则无法获取到对应的stereotype扩展定义。
注意事项
- 针对EA 16.1版本测试,若使用其他版本需验证数据库表结构或API返回格式是否有差异。
- 若属性名或stereotype名称包含特殊字符,SQL查询需做转义处理,避免语法错误。
内容的提问来源于stack exchange,提问作者bhloodyy
相关产品推荐
相关产品推荐

