第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 モデルの例
図14.2 Rail
DMN デシジョンテーブルの例
図14.3 tTrain
DMN データタイプの例
Business Central での DMN モデルの作成方法に関する詳細は、『Designing a decision service using DMN models』を参照してください。
前提条件
- 必要なすべてのデータオブジェクトと DMN モデルコンポーネントは、プロジェクトで定義済みである。
手順
-
Business Central で、Menu
Design Projects に移動して、プロジェクト名をクリックします。 - DMN サービスを呼び出すビジネスプロセスアセットを選択または作成します。
- プロセスデザイナーで、左側のツールバーを使用して通常どおりに BPMN コンポーネントをドラッグアンドドロップし、ビジネスプロセスロジック、接続、イベント、タスク、またはその他の要素全体を定義します。
ビジネスプロセスに DMN サービスを組み込むには、左側のツールバーまたは開始ノードオプションから Business Rule タスクを追加し、プロセスフローの関連する場所にタスクを挿入します。
この例では、以下の
Accept Train
ビジネスプロセスは、DMN サービスをRoute To Rail
ノードに組み込みます。図14.4 DMN サービスを使用した
Accept Train
ビジネスプロセスの例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
-
Rule Language:
Data Assignments
Assignments 配下で、Edit アイコンをクリックし、DMN の入力および出力データを追加して、DMN サービスとプロセスデータ間のマッピングを定義します。 この例の
Route To Rail
DMN サービスノードの場合、DMN モデルの入力ノードに対応するTrain
の入力割り当てを追加し、DMN モデルのデシジョンノードに対応するRail
の出力割り当てを追加します。Data Type は、DMN モデルでそのノードに設定したタイプに一致する必要があり、Source および Target の定義は、指定されたオブジェクトに関連する変数またはフィールドです。図14.5
Route To Rail
DMN サービスノードの入力および出力マッピングの例- Save をクリックして、入力および出力データを保存します。
完了した DMN サービスの処理方法に応じて、ビジネスプロセスの残りを定義します。
この例では、Diagram properties
Implementation/Execution On Exit Action の値が以下のコードに設定され、 Route To Rail
DMN サービスの完了後にレール番号を保存します。On Exit Action
のサンプルコードtrain.setRailNumber(rail);
レール番号が計算されない場合、プロセスは、以下の条件式で定義された
No Appropriate Rail
終了エラーノードに到達します。図14.6
No Appropriate Rail
終了エラーノードの条件の例レール番号が計算されると、プロセスは、以下の条件式で定義された
Accept Train
スクリプトタスクに到達します。図14.7
Accept Train
スクリプトタスクノードの条件の例Accept Train
スクリプトタスクは、Diagram propertiesImplementation/Execution Script で以下のスクリプトも使用して、列車のルートと現在のレールに関するメッセージを出力します。 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());
組み込まれた DMN サービスでビジネスプロセスを定義した後、プロセスデザイナーでプロセスを保存してプロジェクトをデプロイし、対応するプロセス定義を実行して DMN サービスを呼び出します。
この例では、 TrainStation プロジェクトをデプロイし、対応するプロセス定義を実行するときに、
Accept Train
プロセス定義のプロセスインスタンスフォームを開いてdeparture station
およびdestination station
フィールドを設定して実行をテストします。図14.8
Accept Train
プロセス定義のプロセスインスタンスフォームの例プロセスが実行されると、サーバーログに指定した列車のルートを示すメッセージが表示されます。
Accept Train
プロセスのサーバーログ出力の例Train from: Zagreb, to: Belgrade, is on rail: 1