2017年2月のアップデート (17.1.3) で、Oracle Process Cloud Service (PCS) にDMN (Decision Model and Notation) を使ったDecision Modelの作成・実行機能がPreview Modeとして追加されました。PCSではDMN 1.1をサポートしており、FEEL(Friendly Enough Expression Language)を使って簡単かつ直感的にDecison Modelingできます。
この設定後、Process ComposerでDMNの作成・編集ができるようになります。
Decision Modelの名前を指定し、[作成]をクリックします。今回はSampleDMNとしました。
Decision Model編集画面はこんな感じです。
Decisionsの右端にある+をクリックして、Decisionを作成します。Empty Logic、Decision Table、Expression、If-Then-Else、Function、Context、Relation、Listの8種類から選択できます。Emptyを選んで後から変更することもできます。
ひとまず、3種類のDecisionを作成しました。いずれもEmpty Logicを選択しています。なお、一番上にあるDecisionは最終結果を出すためのDecisionで、その他のDecisionは結果判定の支援をするDecisionという扱いです(赤枠の矢印がそれを意味しています)。Decisionの順序にはご注意ください。もし最終結果を出すDecisionが一番上にない場合は、ドラッグ&ドロップでDecisionを入れ替えることができます。
気温(Temperature)と降水確率(Precipitation)をまとめたデータ型を作成します。
データ型を作成したら、先ほど作成したデータ型に基づいて入力データ(データ・オブジェクト)を作成します。
Decisionの種類を変更してみます。RainというDecisionでは、数式による判断をさせたいので、Expressionを指定します。
式をEnter Expressionとの表示があるフィールドに指定します。ここでは、Forecast.Precipitation>80としておきます。つまり、降水確率80%を超えるか否かで判断しよう、というわけです。
TemperatureというDecisionでは、If-Then-Elseを使うことにします。条件を指定するフィールドでは、入力データの候補が表示されるので、Typoを避けることができるようになっています。ここでは、18℃を上回るか否かで[暖かい]もしくは[寒い]を判断するようにしています。
最終結果を出すWhat to bringというDecisionでは、Decision Tableを使うことにします。Temperature、Rainの各Decisionの結果を基にして、持ち物を決定します。判定結果のための結果データを作成するため、Enter Allowed Valuesをクリックします。
Config typeでList of Textを選択し、値として、傘、レインコート、オーバーコート、何もいらない、を追加し、[OK]をクリックします。
Temperature、RainというDecision出力結果を条件に加えます。一つのDecisionは既にフィールドがあるので、[Enter Expression]にTemperatureを指定します。
もう一つのDecisionを追加するには、右端上部にある追加のアイコンをクリックします。下図のスクリーンショットでわかるように、列を前に入れるか、後ろに入れるかを選択できます。
各Decisionの結果を指定すると、What to bringというDecision Tableは以下のようになります。
これでひとまずDecision Modelの作成は完了です。
降水確率が70%で、気温が18度の場合は、オーバーコートが必要、という結果が出ました(実際には降水確率が70%だったら傘は必須だとは思いますが、RainというDecisionでこのように設定したので仕方ありません…)。
各Decisionの結果も見ることができます。
動作確認が完了したので、以後でBPMNから呼び出せるよう、サービスを作成します。
名前を指定し、OKをクリックします。今回はWhatToBringServiceとしておきます。
サービスを呼び出すための入力データと判断結果を出すDecisionをドラッグ&ドロップで指定します。
入力条件と出力結果を紐付けることができたので、これでデプロイできるようになりました。[デプロイ]をクリックして、スナップショット名、バージョンを指定し、[デプロイ]をクリックしてデプロイします。
Decision Modelのデプロイまで完了したので、BPMNプロセスから呼び出せるようにします。
今回は、入力フォームに気温と降水確率を指定したら、Decisionが判断し、その結果をフォームに表示する、というシンプルなアプリケーションです。
デシジョン・アクティビティへのデプロイ済みのデシジョン・モデルの割り付けは、アクティビティの右側に現れるアイコンをクリックして[プロパティを開く]を選択し、Decision ModelとDecision Serviceを選択します。Decision Modelが見つからない場合には、+をクリックして追加します。
Decision Serviceとのデータ・アソシエーションで注意する点は、Decisionによる判断結果が、下図のようにDecisionからはinterpretationという要素に含まれている、ということです。
全てのデータ・アソシエーションが完了したら、デプロイします。デプロイはテストモードでも本番モードでもかまいません。
[タスク]をクリックして、結果が返ってきていることを確認し、フォームを開きます。
12℃、85%なので、レインコートが必要だ、という判断が返ってきていることがわかります。
Decision Model And NotationPCSで簡単なDecision Modelを作成する流れを以下にまとめておきます。今回は、気温と降水確率から、外出時に必要な持ち物を判断する、という(いかにもサンプルらしい)Decision Modelを作成します。
http://www.omg.org/spec/DMN/
1. DMN編集機能の有効化
まず、最初にPreview機能を有効化する必要があります。Process Workspaceに管理者としてログインし、管理>UIのカスタマイズで、「Enable DMN in Composer」にチェックを入れ、[保存]をクリックします。この設定後、Process ComposerでDMNの作成・編集ができるようになります。
2. Decision Modelの作成
Composerでは、[作成]をクリックし、[New Decision Model]をクリックします。Decision Modelの名前を指定し、[作成]をクリックします。今回はSampleDMNとしました。
Decision Model編集画面はこんな感じです。
Decisionsの右端にある+をクリックして、Decisionを作成します。Empty Logic、Decision Table、Expression、If-Then-Else、Function、Context、Relation、Listの8種類から選択できます。Emptyを選んで後から変更することもできます。
ひとまず、3種類のDecisionを作成しました。いずれもEmpty Logicを選択しています。なお、一番上にあるDecisionは最終結果を出すためのDecisionで、その他のDecisionは結果判定の支援をするDecisionという扱いです(赤枠の矢印がそれを意味しています)。Decisionの順序にはご注意ください。もし最終結果を出すDecisionが一番上にない場合は、ドラッグ&ドロップでDecisionを入れ替えることができます。
2. 入力データの作成
右端のINPUT DATAを展開し、データ型を作成します。気温(Temperature)と降水確率(Precipitation)をまとめたデータ型を作成します。
データ型を作成したら、先ほど作成したデータ型に基づいて入力データ(データ・オブジェクト)を作成します。
Decisionの種類を変更してみます。RainというDecisionでは、数式による判断をさせたいので、Expressionを指定します。
式をEnter Expressionとの表示があるフィールドに指定します。ここでは、Forecast.Precipitation>80としておきます。つまり、降水確率80%を超えるか否かで判断しよう、というわけです。
TemperatureというDecisionでは、If-Then-Elseを使うことにします。条件を指定するフィールドでは、入力データの候補が表示されるので、Typoを避けることができるようになっています。ここでは、18℃を上回るか否かで[暖かい]もしくは[寒い]を判断するようにしています。
最終結果を出すWhat to bringというDecisionでは、Decision Tableを使うことにします。Temperature、Rainの各Decisionの結果を基にして、持ち物を決定します。判定結果のための結果データを作成するため、Enter Allowed Valuesをクリックします。
Config typeでList of Textを選択し、値として、傘、レインコート、オーバーコート、何もいらない、を追加し、[OK]をクリックします。
Temperature、RainというDecision出力結果を条件に加えます。一つのDecisionは既にフィールドがあるので、[Enter Expression]にTemperatureを指定します。
もう一つのDecisionを追加するには、右端上部にある追加のアイコンをクリックします。下図のスクリーンショットでわかるように、列を前に入れるか、後ろに入れるかを選択できます。
各Decisionの結果を指定すると、What to bringというDecision Tableは以下のようになります。
これでひとまずDecision Modelの作成は完了です。
3. テスト
作成したDecision Modelをテストできます。右上の▶をクリックすると、テストデータを指定できる画面が現れますので、ここでTemperatureに18、Precipitationに70を指定し、[Start Test]をクリックして実行してみます。降水確率が70%で、気温が18度の場合は、オーバーコートが必要、という結果が出ました(実際には降水確率が70%だったら傘は必須だとは思いますが、RainというDecisionでこのように設定したので仕方ありません…)。
各Decisionの結果も見ることができます。
動作確認が完了したので、以後でBPMNから呼び出せるよう、サービスを作成します。
4. サービスの作成
左側のSERVICESを展開し、+をクリックしてサービスを作成します。名前を指定し、OKをクリックします。今回はWhatToBringServiceとしておきます。
サービスを呼び出すための入力データと判断結果を出すDecisionをドラッグ&ドロップで指定します。
入力条件と出力結果を紐付けることができたので、これでデプロイできるようになりました。[デプロイ]をクリックして、スナップショット名、バージョンを指定し、[デプロイ]をクリックしてデプロイします。
Decision Modelのデプロイまで完了したので、BPMNプロセスから呼び出せるようにします。
5. BPMNプロセスの作成
BPMNプロセスの作成は特別変わったことをするわけではありませんが、これまでのビジネスルールのアクティビティとはアクティビティが異なることにご注意ください。今回は下図の右側のアクティビティを使います。今回は、入力フォームに気温と降水確率を指定したら、Decisionが判断し、その結果をフォームに表示する、というシンプルなアプリケーションです。
デシジョン・アクティビティへのデプロイ済みのデシジョン・モデルの割り付けは、アクティビティの右側に現れるアイコンをクリックして[プロパティを開く]を選択し、Decision ModelとDecision Serviceを選択します。Decision Modelが見つからない場合には、+をクリックして追加します。
Decision Serviceとのデータ・アソシエーションで注意する点は、Decisionによる判断結果が、下図のようにDecisionからはinterpretationという要素に含まれている、ということです。
全てのデータ・アソシエーションが完了したら、デプロイします。デプロイはテストモードでも本番モードでもかまいません。
6. 実行
Workspaceから試してみましょう。今回は気温を12(℃)、降水確率を85(%)として[送信]をクリックします。[タスク]をクリックして、結果が返ってきていることを確認し、フォームを開きます。
12℃、85%なので、レインコートが必要だ、という判断が返ってきていることがわかります。