DMN in PCS 17.1.3

Oracle Process Cloud Service (PCS) は2017年2月のアップデート (17.1.3) で、DMN (Decision Model and Notation) で記述したDecisionの編集・実行機能がPreviewとして追加されました。PCSではDMN 1.1をサポートしており、FEEL(Friendly Enough Expression Language)を使って簡単かつ直感的にDecison Modelingできます。

Decision Model and Notation
http://www.omg.org/spec/DMN/

PCSで簡単なDecisionを作成したので、手順をまとめておきます。今回は、気温と降水確率から、外出時に必要な持ち物を判断する、という(いかにもサンプルらしい)Decision Modelを作成します。

1. DMN編集機能の有効化

まず、最初にPreview機能を有効化する必要があります。Process Workspaceに管理者としてログインし、管理>UIのカスタマイズで、「Enable DMN in Composer」にチェックを入れ、[保存]をクリックします。dmn00
この設定後、Process ComposerでDMNの作成・編集ができるようになります。

2. Decision Modelの作成

Composerでは、[作成]をクリックし、[New Decision Model]をクリックします。

dmn01

Decision Modelの名前を指定し、[作成]をクリックします。今回はSampleDMNとしました。

dmn02

Decision Model編集画面はこんな感じです。

dmn03

Decisionsの右端にある+をクリックして、Decisionを作成します。Empty Logic、Decision Table、Expression、If-Then-Else、Function、Context、Relation、Listの8種類から選択できます。Emptyを選んで後から変更することもできます。

dmn04

ひとまず、3種類のDecisionを作成しました。いずれもEmpty Logicを選択しています。なお、一番上にあるDecisionは最終結果を出すためのDecisionで、その他のDecisionは結果判定の支援をするDecisionという扱いです(赤枠の矢印がそれを意味しています)。Decisionの順序にはご注意ください。もし最終結果を出すDecisionが一番上にない場合は、ドラッグ&ドロップでDecisionを入れ替えることができます。

dmn05

2. 入力データの作成

右端のINPUT DATAを展開し、データ型を作成します。

dmn06

気温(Temperature)と降水確率(Precipitation)をまとめたデータ型を作成します。

dmn07

データ型を作成したら、先ほど作成したデータ型に基づいて入力データ(データ・オブジェクト)を作成します。

dmn08

3. Decisionの編集

Decisionの種類を変更してみます。RainというDecisionでは、数式による判断をさせたいので、Expressionを指定します。

dmn09

式をEnter Expressionとの表示があるフィールドに指定します。ここでは、Forecast.Precipitation>80としておきます。つまり、降水確率80%を超えるか否かで判断しよう、というわけです。

dmn10

TemperatureというDecisionでは、If-Then-Elseを使うことにします。条件を指定するフィールドでは、入力データの候補が表示されるので、Typoを避けることができるようになっています。ここでは、18℃を上回るか否かで[暖かい]もしくは[寒い]を判断するようにしています。

dmn11

最終結果を出すWhat to bringというDecisionでは、Decision Tableを使うことにします。Temperature、Rainの各Decisionの結果を基にして、持ち物を決定します。判定結果のための結果データを作成するため、Enter Allowed Valuesをクリックします。

dmn12

Config typeでList of Textを選択し、値として、傘、レインコート、オーバーコート、何もいらない、を追加し、[OK]をクリックします。

dmn13

Temperature、RainというDecision出力結果を条件に加えます。一つのDecisionは既にフィールドがあるので、[Enter Expression]にTemperatureを指定します。

dmn14-2

もう一つのDecisionを追加するには、右端上部にある追加のアイコンをクリックします。下図のスクリーンショットでわかるように、列を前に入れるか、後ろに入れるかを選択できます。

dmn14-1

各Decisionの結果を指定すると、What to bringというDecision Tableは以下のようになります。

dmn14

これでひとまずDecision Modelの作成は完了です。

4. テスト

作成したDecision Modelをテストできます。右上の▶をクリックすると、テストデータを指定できる画面が現れますので、ここでTemperatureに18、Precipitationに70を指定し、[Start Test]をクリックして実行してみます。

dmn15

降水確率が70%で、気温が18度の場合は、オーバーコートが必要、という結果が出ました(実際には降水確率が70%だったら傘が必要とは思いますが、RainというDecisionでこのように規定したので仕方ありません…)。

dmn16

各Decisionの結果も見ることができます。

dmn17dmn18

動作確認が完了したので、以後でBPMNから呼び出せるよう、サービスを作成します。

5. サービスの作成

左側のSERVICESを展開し、+をクリックしてサービスを作成します。

dmn19

名前を指定し、OKをクリックします。今回はWhatToBringServiceとしておきます。

dmn20

サービスを呼び出すための入力データと判断結果を出すDecisionをドラッグ&ドロップで指定します。

dmn21

入力条件と出力結果を紐付けることができたので、これでデプロイできるようになりました。[デプロイ]をクリックして、スナップショット名、バージョンを指定し、[デプロイ]をクリックしてデプロイします。

dmn22

Decision Modelのデプロイまで完了したので、BPMNプロセスから呼び出せるようにします。

6. BPMNプロセスの作成

BPMNプロセスの作成は特別変わったことをするわけではありませんが、これまでのビジネスルールのアクティビティとはアクティビティが異なることにご注意ください。今回は下図の右側のアクティビティを使います。

dmn23-1

今回は、入力フォームに気温と降水確率を指定したら、Decisionが判断し、その結果をフォームに表示する、というシンプルなアプリケーションです。

dmn24

デシジョン・アクティビティへのデプロイ済みのデシジョン・モデルの割り付けは、アクティビティの右側に現れるアイコンをクリックして[プロパティを開く]を選択し、Decision ModelとDecision Serviceを選択します。Decision Modelが見つからない場合には、+をクリックして追加します。

dmn26

Decision Serviceとのデータ・アソシエーションで注意する点は、Decisionによる判断結果が、下図のようにDecisionからはinterpretationという要素に含まれている、ということです。

DMN27.png

全てのデータ・アソシエーションが完了したら、デプロイします。デプロイはテストモードでも本番モードでもかまいません。

7. 実行

Workspaceから試してみましょう。今回は気温を12(℃)、降水確率を85(%)として[送信]をクリックします。

dmn28

[タスク]をクリックして、結果が返ってきていることを確認し、フォームを開きます。

dmn29

12℃、85%なので、レインコートが必要だ、という判断が返ってきていることがわかります。

dmn30

無事に動いたので、めでたしめでたし。

anishi1222 について

とあるキャラクターの中の人です。
カテゴリー: Cloud, Middleware タグ: , , パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中