Activiti6.0(6)並列ゲートウェイの使用

目次

I.概要

2.並列ゲートウェイの使用

1.フローチャートを描く

2.プロセスインスタンスを開始します

3.プロセスの流れ


I.概要

これは、実際のシナリオで使用するゲートウェイの数も多くなります。並列ゲートウェイは、プロセスの同時実行性を示すことができます。これにより、プロセスを複数のブランチに分割したり、複数のブランチを収束したりできます。並列ゲートウェイの機能は、エントリーおよびアウトゴーイングシーケンスフロー時:

  • ブランチ:並列化後のすべての発信シーケンスフロー。シーケンスフローごとに並行ブランチが作成されます。
  • コンバージェンス:ここで待機している並列ゲートウェイに到着するすべての着信ブランチは、シーケンスフローに入るすべてのブランチが到着するまで、プロセスはコンバージェンスゲートウェイを通過します

注意すべき点がいくつかあります。

  1. 並列ゲートウェイは条件を解析しません。条件がシーケンスフローで定義されている場合でも、それらは直接無視されます。
  2. 実際の使用では、ブランチとコンバージェンスはペアで表示されることがよくあります。つまり、並列開始ゲートウェイと並列終了ゲートウェイが必要です。そうでない場合、プロセスエンジンは並列子ノードがすべて完了したかどうかを判断できません。ただし、ゲートウェイは不均衡である可能性があります。つまり、1つの並列開始と2つの並列終了が存在する可能性があり、ブランチとアグリゲーションの数も不整合になる可能性があります。

2.並列ゲートウェイの使用

並列ゲートウェイを使用するために、あるシナリオがあるとします。会社は、財務部門によって開始され、すべての部門を通じて、承認される金額を入力してから最初に渡される財務承認ビジネスを実行する必要があります。マネージャーが承認し、すべての承認が完了した後、最終的に財務部門に提出されて承認されます。

1.フローチャートを描く

アテンションポイント2を反映するために、描画されたフローチャートゲートウェイは次のように不均衡です。

2.プロセスインスタンスを開始します

最初にプロセスを開始します。コードは次のとおりです。

@Test
    public void parallelGateway2Test() {
        // 1、发布流程
        Deployment deployment = repositoryService.createDeployment().name("并行网关流程").addClasspathResource("processes/parallelGateway.bpmn20.xml").deploy();

        System.out.println("部署id:" + deployment.getId());

        // 2、启动一个流程实例
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("parallelGateway");
        System.out.println("实例id:" + processInstance.getProcessInstanceId());
        System.out.println("流程定义id:" + processInstance.getProcessDefinitionId());

        // 3、查询所有并行任务
        List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).list();

        Assert.assertEquals(3, tasks.size());
        System.out.println("任务数量:" + tasks.size());
    }

開始後、act_ru_executionテーブルを確認すると、フローチャートに一致する合計4つのレコード、1つのプロセスインスタンス、3つの実行オブジェクトが生成されます。

act_ru_taskテーブルを見ると、実行されているタスクの3つのレコードもあります。

3.プロセスの流れ

完全なタスクコード:

@Test
    public void completeTask() {
        String taskId = "47512";
        taskService.complete(taskId);
    }

最初に部門1のタスクを完了すると、プロセスインスタンスが次のタスク部門1のマネージャーに自動的に流れることがわかります。

次に、部門2のタスクを完了します。完了後、中央にコンバージェンスゲートウェイがあり、シーケンスに入るすべてのブランチまで待機する必要があるため、部門2および3のマネージャーに直接流れないことがわかります。流れが到着しました。

部門3のタスクを完了すると、自動的に転送されたことがわかります。

背後にコンバージェンスゲートウェイがあるため、ゲートウェイを出て財務部門に移動する前に、部門1のマネージャーのタスクと部門2、3のマネージャーのタスクを完了する必要があります。

おすすめ

転載: blog.csdn.net/m0_38001814/article/details/104192318