如何在 PlantUML 中直接连接两个 Action?

How to connect two Actions directly in PlantUML?

我正在尝试在 PlantUML 中创建图表,但无法理解如何连接两个动作。

源代码如下所示:

@startuml
skinparam rectangleBorderThickness 1
|#orange|Registrar|
#lightgray:**Introduce document to the system**;
:Register Document;
if (Work on the document is required?) then (Yes)
repeat
:Work on incoming documents;
|#green|Performer|
:**Perform tasks for the document**;
repeat while (Completed?) is (No) not (Yes)
|#orange|Registrar|
else
#lightgray:**Archive document**;
end
@enduml

这是我拥有的:

该图显示了文档生命周期。 动作1是最后阶段,这就是结束,由橙色人执行。 动作 2 由绿色人执行。做不做是条件3.

我想说的是,如果条件 3 得到满足(完成),文档将进入最后阶段,即 1,它将完成循环。我可以这样做吗?

我想我可以删除条件 3 并将操作 2 变成条件,但我仍然无法 link 支持 2 和 1,这是我的主要问题。

NB 这是 OP 的前一个问题的答案,他希望从 Perform tasks...Archive document

的直接 ControlFlow

我不知道 PlantUML 是否允许这样做,但如果不允许,那就对了。如果您在绘制时创建 ControlFlow,这将导致中间 Action 产生死锁。它将有两个传入的 ControlFlow,并且只有其中一个可以传递令牌。所以它会永远等待。同样,左边的 Action 永远不会启动。

基本上你可以做到。 Decision 是一个 ActivityNode 并且可以行为。通常,决策的行为具有有限的性质。所以在你的情况下,我猜它会是“文件闻起来很臭;很好”或“闻起来很糟糕;再做一次”。但是,这不会使图表更清晰或更易于阅读。我会保持原样。

编辑 根据您的评论,我想出了这张图:

我简化了一点,但基本上它应该是这样的。合并是强制性的,否则模型将无效。另请注意,守卫放在方括号中,这是使它们成为守卫所必需的,而不是一些(无意义的)标签。

请注意,PlantUML 正在创建错误的决策节点,因为它们只能根据 UML 规范呈菱形。他们将它们呈现为六边形,以便为内部标签腾出位置。虽然不是正确的 UML,但任何人都可以理解它。