EA 插件使用 Stereotype SysML 1.5::FlowProperty 创建 FlowProperty

问题描述 投票:0回答:1

我在 C# 中创建了一个 EA 插件,我想将一个流属性添加到一个 Class,如果我从 EA 手动执行它,我会得到不同的结果。 Signal4是手动添加的项,Signal5是API添加的。 Signal5 中缺少 FlowPropery(来自 SyML1.5),这也是一个零件属性(下面添加了图片)

var flowPropertyProprieties = new Dictionary<string, string>
{{"Name", client.Name}, {"Type", "FlowProperty"}, {"Stereotype", "FlowProperty"},
                {"ClassfierID", $"{client.ClassfierID}"}
};

public Element AddFlowPropertyToElement(Element element, Dictionary<string, string> elementProprieties)
{
    var newFlowProperty = element.Elements.AddNew(elementProprieties["Name"], elementProprieties["Type"]);
    newFlowProperty.Stereotype = elementProprieties["Stereotype"];
    newFlowProperty.ClassfierID = Convert.ToInt32(elementProprieties["ClassfierID"]);
    newFlowProperty.Update();

    return element;
}

以下是使用带有调试选项(附加过程)的 Visual Studio 的一些属性,我没有看到任何差异。

2。 我还尝试了相同的 API 类型 Part 和 Stereotype FlowProperty,但结果不是像在 EA 中手动添加的 Signal4 那样的预期结果。

var flowPropertyProprieties = new Dictionary<string, string>
{{"Name", client.Name}, {"Type", "Part"}, {"Stereotype", "FlowProperty"},
                {"ClassfierID", $"{client.ClassfierID}"}
};

add-in enterprise-architect
1个回答
1
投票

尝试使用完全限定的构造型来创建您的元素:

element.Elements.AddNew(elementProprieties["Name"], "SysML1.4::FlowProperty");

element.EmbeddedElements.AddNew(elementProprieties["Name"], "SysML1.4::FlowProperty");

然后不要设置类型,或者刻板印象。
无论如何,您应该 never 设置

Element.Stereotype
字段,因为这要求 EA 在所有 MDG 中搜索原型。如果你幸运的话,EA 会找到正确的,但它也可能从另一个 MDG 中选择一个恰好具有相同名称的原型。
相反,总是使用
Element.StereotypeEx
并使用完全限定的构造型。

SysML 1.5 和 SysML 1.4 配置文件有些奇怪,因此您可能需要使用

element.Elements.AddNew(elementProprieties["Name"], "SysML1.5::FlowProperty");
© www.soinside.com 2019 - 2024. All rights reserved.