第14章 ビジネスプロセスで Decision Model and Notation (DMN) サービスを呼び出す

Decision Model and Notation (DMN) を使用して、Business Central の意思決定要件ダイアグラム (DRD) でデシジョンサービスを描画を使ってモデル化し、Business Central のビジネスプロセスの一環としてそのDMN サービスを呼び出すことができます。ビジネスプロセスは、DMN サービスを識別し、DMN 入力とビジネスプロセスプロパティー間でビジネスデータをマッピングすることにより、DMN サービスと対話します。

例として、この手順では、列車の経路ロジックを定義する TrainStation プロジェクトの例を使用します。このサンプルプロジェクトには、経路決定ロジック用に Business Central で設計された以下のデータオブジェクトと DMN コンポーネントが含まれています。

Train オブジェクトの例

public class Train {

     private String departureStation;

     private String destinationStation;

     private BigDecimal railNumber;

     // Getters and setters
}

図14.1 Compute Rail DMN モデルの例

dmn execution graph

図14.2 Rail DMN デシジョンテーブルの例

dmn execution expression

図14.3 tTrain DMN データタイプの例

dmn execution data type

Business Central での DMN モデルの作成方法に関する詳細は、『Designing a decision service using DMN models』を参照してください。

前提条件

  • 必要なすべてのデータオブジェクトと DMN モデルコンポーネントは、プロジェクトで定義済みである。

手順

  1. Business Central で、MenuDesignProjects に移動して、プロジェクト名をクリックします。
  2. DMN サービスを呼び出すビジネスプロセスアセットを選択または作成します。
  3. プロセスデザイナーで、左側のツールバーを使用して通常どおりに BPMN コンポーネントをドラッグアンドドロップし、ビジネスプロセスロジック、接続、イベント、タスク、またはその他の要素全体を定義します。
  4. ビジネスプロセスに DMN サービスを組み込むには、左側のツールバーまたは開始ノードオプションから Business Rule タスクを追加し、プロセスフローの関連する場所にタスクを挿入します。

    この例では、以下の Accept Train ビジネスプロセスは、DMN サービスを Route To Rail ノードに組み込みます。

    図14.4 DMN サービスを使用した Accept Train ビジネスプロセスの例

    dmn execution business process
  5. DMN サービスに使用するビジネスルールタスクノードを選択し、プロセスデザイナーの右上隅にある Diagram properties をクリックしてから、Implementation/Execution で、以下のフィールドを定義します。

    • Rule Language: DMN を選択します。
    • 名前空間: DMN モデルファイルから一意の名前空間を入力します。例: https://www.drools.org/kie-dmn
    • Decision Name: 選択したプロセスノードで呼び出す DMN デシジョンノードの名前を入力します。例: Rail
    • DMN Model Name: DMN モデル名を入力します。例: Compute Rail
  6. Data AssignmentsAssignments 配下で、Edit アイコンをクリックし、DMN の入力および出力データを追加して、DMN サービスとプロセスデータ間のマッピングを定義します。

    この例の Route To Rail DMN サービスノードの場合、DMN モデルの入力ノードに対応する Train の入力割り当てを追加し、DMN モデルのデシジョンノードに対応する Rail の出力割り当てを追加します。Data Type は、DMN モデルでそのノードに設定したタイプに一致する必要があり、Source および Target の定義は、指定されたオブジェクトに関連する変数またはフィールドです。

    図14.5 Route To Rail DMN サービスノードの入力および出力マッピングの例

    dmn execution io mapping
  7. Save をクリックして、入力および出力データを保存します。
  8. 完了した DMN サービスの処理方法に応じて、ビジネスプロセスの残りを定義します。

    この例では、Diagram propertiesImplementation/ExecutionOn Exit Action の値が以下のコードに設定され、Route To Rail DMN サービスの完了後にレール番号を保存します。

    On Exit Action のサンプルコード

    train.setRailNumber(rail);

    レール番号が計算されない場合、プロセスは、以下の条件式で定義された No Appropriate Rail 終了エラーノードに到達します。

    図14.6 No Appropriate Rail 終了エラーノードの条件の例

    dmn execution negative condition

    レール番号が計算されると、プロセスは、以下の条件式で定義された Accept Train スクリプトタスクに到達します。

    図14.7 Accept Train スクリプトタスクノードの条件の例

    dmn execution positive condition

    Accept Train スクリプトタスクは、Diagram propertiesImplementation/ExecutionScript で以下のスクリプトも使用して、列車のルートと現在のレールに関するメッセージを出力します。

    com.myspace.trainstation.Train t =
        (com.myspace.trainstation.Train) kcontext.getVariable("train");
    System.out.println("Train from: " + t.getDepartureStation() +
                       ", to: " + t.getDestinationStation() +
                       ",  is on rail: " + t.getRailNumber());
  9. 組み込まれた DMN サービスでビジネスプロセスを定義した後、プロセスデザイナーでプロセスを保存してプロジェクトをデプロイし、対応するプロセス定義を実行して DMN サービスを呼び出します。

    この例では、 TrainStation プロジェクトをデプロイし、対応するプロセス定義を実行するときに、Accept Train プロセス定義のプロセスインスタンスフォームを開いて departure station および destination station フィールドを設定して実行をテストします。

    図14.8 Accept Train プロセス定義のプロセスインスタンスフォームの例

    dmn execution process instance form

    プロセスが実行されると、サーバーログに指定した列車のルートを示すメッセージが表示されます。

    Accept Train プロセスのサーバーログ出力の例

    Train from: Zagreb, to: Belgrade,  is on rail: 1