如何完成所有并行活动ViewFlow(终止端)?

时间:2018-09-13 10:30:03

标签: django-viewflow

我要释放此流程: enter image description here

我尝试仅使用一个节点End,但另一个分支保持活动状态。 如何完成一个分支的所有活动任务和整个过程?

2 个答案:

答案 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)

您需要的东西在BPMN中称为基于事件的网关,而且Viewflow不提供现成的支持,您必须实现 kmmbvnr 提供的代码。

enter image description here

此网关的作用是激活传出路径并等待任何任务完成,并且当第一个任务完成时,其他路径或任务将被取消。

当您使用返回到其中一条路径的流时,您必须考虑没有其他路径处于活动状态,只有一条路径是最先完成任务的。