2

我想用我的 java 代码生成一个活动图。它的工作原理是创建一个动作元素:

//Add the actionElement to the package
Element actionElement = elements.AddNew("MyFirstAction", "Action");
elements.Refresh();

//Add the element to the activity diagram
DiagramObject dob = dobs.AddNew("", "");       
dobs.Refresh();

//reference the DiagramObject to the before created element
dob.SetElementID(element.GetElementID());
dob.Update();
dobs.Refresh();

所以我认为它会以同样的方式适用于初始(或入口点):

Element initElement = elements.AddNew("Start...","EntryPoint");

但出现以下异常:

java.lang.Exception: Invalid parent for EntryPoint (Package)

有人可以帮助我吗?我的另一个问题是,集合的 ElementTypes 是否有任何枚举?因为我只找到了集合类的以下信息..

AddNew (string Name, string Type)

但是类型的信息只告诉“类型:字符串(最多 30 个字符)”。

这是 Collection 类的链接: http ://www.sparxsystems.com/enterprise_architect_user_guide/9.2/automation/collection.html

问候

编辑

在 Uffe 的帮助下,我得到了一些活动图组件的子类型和类型的信息。当您想要添加“新元素或连接器”时,“原始名称”是您在 Enterprise Architect 的 GUI 中看到的名称:

  • 原名:《行动》;类型:“行动”;亚型:0;
  • 原名:“活动”;类型:“活动”;亚型:0;
  • 原名:“结构化活动”(Other->Simple Composite);类型:“活动”;亚型:8;
  • 原名:“首字母”;类型:“状态节点”;亚型:100;
  • 原名:“终”;类型:“状态节点”;亚型:101;
  • 原名:《Flow Final》;类型:“状态节点”;亚型:102;
  • 原名:《决定》;类型:“决定”;亚型:0;
  • 原名:“合并”;类型:“合并节点”;亚型:0;
  • 原名:《决定》;类型:“决定”;亚型:0;
  • 原名:“Fork/Join”(横向);类型:“同步”;亚型:0;
  • 原名:“Fork/Join”(垂直);类型:“同步”;亚型:1;
  • 原名:《图例》;类型:“文本”;亚型:76;
  • 原名:“同步”;类型:“状态节点”;亚型:6;

乌夫已经在他的回答中解释了这一点。首先使用类型参数创建元素,然后设置特定的子类型。在此之后不要忘记 update() 。

Element element = elements.AddNew("StartHere", "StateNode");
element.Subtype = 100;
element.Update();
elements.Refresh();

再次感谢 Uffe 提供的这个例子:)

4

1 回答 1

3

没有元素类型枚举,元素被简单地指定为字符串。有效的字符串列在帮助文件中,特别是Type在类的属性中Element(自动化和脚本——Enterprise Architect 对象模型——参考——元素包——元素类)。

EA 支持的每种元素类型都没有唯一的元素类型字符串。相反,许多元素都有一个子类型。此子类型表示为整数 ( Element.Subtype),其中大多数没有记录 - 但活动图的初始活动恰好是少数几个之一。

因此,为了创建一个 ActivityInitial 元素(在 GUI 中已知),您只需创建指定类型的元素,然后设置其子类型并更新它。

Element element = elements.AddNew("StartHere", "StateNode");
element.Subtype = 100;
element.Update();
elements.Refresh();

为了找出其他元素的正确类型/子类型组合,最简单的方法是在 GUI 中创建相应类型的元素,然后在数据库中查找:

select Object_Type, NType from t_object where Name = 'MyTestElement'
于 2014-05-19T14:19:58.670 回答