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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:02:12