我在 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}"}
};
尝试使用完全限定的构造型来创建您的元素:
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");