答案 0 :(得分:0)
通过BPNM规范流程.End仅完成其中的任务令牌。并行任务仍未完成。
如果存在需要取消并行流之一的情况,则在BPMN中,此类过程由复杂的拆分网关建模,该网关等待直到后续任务完成并取消其他任务。这是一个视图流先分裂节点的草图实现。您可以根据具体情况对其进行调整。
class SplitFirst(flow.Split):
shape = {
'width': 50,
'height': 50,
'svg': """
<path class="gateway" d="M25,0L50,25L25,50L0,25L25,0"/>
<text class="gateway-marker" font-size="32px" x="25" y="35">1</text>
"""
}
def on_signal(self, sender, **signal_kwargs):
task = signal_kwargs['task']
split_first = task.previous.filter(flow_task=self).first()
if split_first:
for leading in split_first.leading.all().exclude(pk=task.pk):
activation = leading.activate()
if hasattr(activation, 'cancel') and activation.cancel.can_proceed():
activation.cancel()
def ready(self):
super(SplitFirst, self).ready()
task_finished.connect(
self.on_signal,
sender=self.flow_class,
dispatch_uid="sample.splitfirst/{}.{}.{}".format(
self.flow_class.__module__, self.flow_class.__name__, self.name
)
)
答案 1 :(得分:0)