1

我想释放这个流程: 在此处输入图像描述

我尝试只使用一个节点结束,但另一个分支仍然处于活动状态。完成一个分支后,如何完成所有活动任务和整个流程?

4

2 回答 2

1

您需要的是BPMN中的基于事件的网关,Viewflow 不支持开箱即用,您必须实现kmmbvnr提供的代码。

在此处输入图像描述

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

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

于 2018-11-24T00:48:16.143 回答
0

通过 BPNM 规范 flow.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
            )
        )
于 2018-09-18T08:09:05.717 回答