0

我在 Enterprise Architect 的序列图中将 Actor 和序列作为生命线。

带片段的序列图.

该图也有一个片段。我试图通过 java API 获取图表对象。

我能够从 API 中获取所有 Actor、Sequence 和 Fragment 信息。但我无法区分其中哪些是生命线。

有什么方法可以通过 API 或 EA 数据库来区分生命线和其他元素?

关于如何解决这个问题的更多提示将不胜感激。

我使用的代码片段如下。.

 Diagram sequenceDiagram = rep.GetDiagramByGuid(seqdiagGuid);
 Collection<DiagramObject> diagObjs = sequenceDiagram.GetDiagramObjects();
 for (DiagramObject obj : diagObjs) {
   Element el = rep.GetElementByID(obj.GetElementID());
   // How to differenciate whether this el is a lifeline?
 }

编辑了更多信息和屏幕截图,以提供更清晰的信息

我从工具箱中删除了一个类。复制时,我选择了“生命线”选项。对于这个新添加的类,我期望 el.type 会给出“LifeLine”的值,但不幸的是它只给出“Object”。现在我的问题是如何将这个对象识别为类类型的生命线?

工具箱中的类

生命线的选择

添加为对象而不是生命线

希望这能提供更多的清晰度。

4

1 回答 1

1

如果你将一个类作为生命线放到序列图上,你将有效地得到一个 Object 类型的元素,它是你的类的一个实例。

使用ClassifierID你可以得到分类器元素

所以从你的样品开始

 Diagram sequenceDiagram = rep.GetDiagramByGuid(seqdiagGuid);
 Collection<DiagramObject> diagObjs = sequenceDiagram.GetDiagramObjects();
 for (DiagramObject obj : diagObjs) {
   Element el = rep.GetElementByID(obj.GetElementID());
   // How to differenciate whether this el is a lifeline?
   String elementType = el.GetType(); //this will be "Object" if you drop a class as a lifeline, and "Sequence" if you choose a lifeline from the toolbox
   if (el.GetClassifierID > 0) {
       Element classifier = rep.GetElementByID(el.GetClassifierID);
   }
 }
于 2021-06-22T17:32:18.027 回答