【发布时间】:2018-09-13 10:30:03
【问题描述】:
【问题讨论】:
标签: django-viewflow
【问题讨论】:
标签: django-viewflow
按照 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
)
)
【讨论】: