ODMのルール開発は、Rule Designerで行います。ODM for Developer用の無料のRule Designerは、Eclipseマーケットプレイスからプラグインとして取得・導入することができます。
今回は、Rule Designerで簡単なルールを開発してみたいと思います。
Eclipseのインストール
最新のRule DesignerはEclipse v4.7.3(Oxygen)をベースとしているため、同じバージョンをインストールする必要があります。Eclipseの最新版や日本語化プラグインを導入していると、Rule Designerの言語ロケールを変更できなくなる場合があるので注意してください。
-
Eclipseがない、またはバージョンが違う場合は、Eclipse Oxygenをインストールしてください。
-
Eclipseを起動し、Eclipse Marketplaceウィンドウを開きます。「odm」で検索して、IBM ODM Rule Designer for Developer V8.10.1をインストールします。
-
ライセンス確認のウィンドウで「I accept the terms…」を選択して、「Finish」ボタンをクリックします。
-
インストールが完了したら、Eclipseを再起動します。ルール・パースペクティブが追加されていることを確認してください。
ルールの開発環境の準備ができました。
以下の手順では、シンプルなルールを開発していきます。
実行モデル(XOM)の作成
顧客ランクに応じて割引率を返す、シンプルなルールを開発します。(シンプルなロジックであればルールを使用する必要はありませんが、ODMの仕組みとルールの作り方を理解するためにシナリオを単純化しています。)
ODMのルールは、日本語でルールを記述するために、実行モデル(XOM)とビジネス・オブジェクト・モデル(BOM)を対応づける辞書を定義します。ルールの開発の初めには、ルールで使用するデータ項目を設計し、JavaのクラスやXMLスキーマ等によって実行モデルを作成します。ここではJavaを使用してXOMを作成します。
-
EclipseのJavaパースペクティブを開きます。「新規(New) > Javaプロジェクト(Java Project)」をクリックしてください。
-
プロジェクトの名前に「CustomerLoyaltyXOM」と入力し、JREのバージョンが1.8になっていることを確認して「Finish」をクリックします。
-
パッケージ・エクスプローラーで作成したJavaプロジェクトを右クリックして、「新規(New) > クラス(Class)」を選択してください。
-
パッケージの名前に「my.first.rule」、クラスの名前に「Loyalty」と入力し、「Finish」をクリックします。
-
Javaエディター上で右クリックして、「ソース(Source) > GetterとSetterの生成(Generate Getter and Setter)」を選択してください。
-
再度Javaエディター上で右クリックして、「ソース(Source) > フィールドを使用してコンストラクタを生成(Generate Constructor using Fields)」を選択します。
-
再度Javaエディター上で右クリックして、「ソース(Source) > スーパークラスからコンストラクタを生成(Generate Constructor from Superclass)」を選択します。
ルール・プロジェクト作成とXOMインポート
-
画面下に、意思決定サービスマップが表示されます。これがルールの開発を進めるステップのガイドとなっています。一番左上にある、「メイン・ルール・プロジェクトの作成」をクリックしてください。
-
画面下に表示されている意思決定サービスマップから、「XOMのインポート」をクリックしてください。
-
リストから「CustomerLoyaltyXOM」をチェックして、「適用して閉じる(Apply and Close)」をクリックしてください。
ビジネス・オブジェクト・モデル(BOM)の作成
BOMはルール記述の中で使用する業務用語の辞書です。XOMのインターフェースに使用した語句だけでなく、計算や判定ロジックの中で必要となる語句を定義します。
商品名や事業所名などパターンが限定される語句を「ドメイン」として定義することで、ルールの開発や検証を効率的に行うこともできます。
-
意思決定サービスマップで「BOMの作成」をクリックしてください。
-
右にある「XOMの参照」ボタンをクリックして、先ほど作成した「CustomerLoyaltyXOM」を選択して「終了(Finish)」をクリックしてください。
-
続いてメンバーの言語化を行います。メンバー・セクションで一番上にある「discount_rate」をダブルクリックしてください。
-
アクションのテンプレートにはdiscount rateの用語が残っています。テキストを編集して「割引率」に変更してください。
-
同様の手順で、他のメンバーの言語化を行います。BOMエディターの下にある、クラス・タブを選択し、メンバーセクションから2番目の「lank」をダブルクリックしてください。
-
メンバーの言語化セクションで「語句で使用されている主語を編集する」をクリックします。
-
ラベルを「顧客ランク」に変更し、「OK」ボタンをクリックしてください。
-
アクションのテンプレートに残っている「lank」の語句を「顧客ランク」に編集します。
-
顧客ランクはいくつかの種類に限られるため、用語を特定するためのドメインを作成します。ドメイン・セクションで「ドメインを作成する」をクリックしてください。
-
右にある「追加」ボタンをクリックし、リストに追加されたnewValueを「プラチナ」に変更してください。同様に、ゴールド・シルバー・ブロンズを追加して「Finish」をクリックします。
-
BOMエディターの下にある、クラス・タブを選択し、メンバーセクションから3番目の「message」をダブルクリックしてください。
-
メンバーの言語化セクションで「語句で使用されている主語を編集する」のリンクをクリックします。
-
ラベルを「メッセージ」に変更し、「OK」ボタンをクリックしてください。
-
アクションのテンプレートに残っている「message」の語句を「メッセージ」に編集します。
-
Ctrl+Sをクリックして、変更を保存してください。
意思決定操作とルール・フローの作成
意思決定操作は、ルールが外部から呼び出される際のインターフェース定義です。前の手順で作成したXOMをパラメーターとして持つ、オペレーションにあたります。ここでは意思決定操作を定義して言語化(日本語化)し、ルール内での計算や判定の順序をルール・フローとして定義します。
-
意思決定サービス・マップから、「意思決定操作の追加」をクリックしてください。
-
意思決定サービス・マップから、「操作マップに移動する」をクリックしてください。
-
変数セットのエディター右側にある「追加」ボタンをクリックし、タイプを「Loyalty」言語化を「ロイヤルティプログラム」に変更してください。
-
Ctrl+Sをクリックして変更を保存し、変数セットのエディターを閉じてください。
-
操作マップで「変数のバインド」をクリックします。
-
Ctrl+Sをクリックして変更を保存し、意思決定操作のエディターを閉じます。
-
続いて操作マップで「ルール・パッケージの追加」をクリックします。
-
操作マップで、「ルール・フローの追加」をクリックします。
-
ルール・フロー・エディターが開きます。左側のパレットで「開始ノード」(一番上の矢印アイコン)をクリックしてから、エディター上をクリックしてください。
-
同様に、「終了ノード」(二番目にある赤丸アイコン)をクリックしてから、エディター上をクリックしてください。以下のように開始ノードと終了ノードが配置されるはずです。
-
左側のパレットで「ルール・タスク」(三番目にある歯車アイコン)をクリックしてから、エディター上の開始ノードと終了ノードの間をクリックしてください。
-
プロパティの「ルールの選択」タブで「編集」ボタンをクリックしてください。
-
ルールの選択ウィンドウで「>>」ボタンをクリックし、「判定」ルール・パッケージを選択します(右側のリストに表示されます)。
-
ルール・フロー・エディターのパレットから「遷移」(一番下にある下向き矢印)をクリックします。開始ノード、ルール・タスク、終了ノードを順にクリックして接続してください。
-
再度、操作マップを表示します。「ルール・フローのバインド」をクリックしてください。
-
意思決定操作のエディターが開きます。ルール・フローのセクションで、「ルール・フローの選択」リンクをクリックし、先ほど作成した「メインフロー」を選択してください。
-
Ctrl+Sをクリックして変更を保存し、意思決定操作エディターを閉じてください。
ルール定義
-
操作マップから、「アクション・ルールの追加」をクリックします。
-
パッケージの横にある「参照」ボタンをクリックして、「判定」パッケージを選択します。これによりアクション・ルールが「判定」パッケージに含まれ、ルール・フロー内で実行されます。
-
ルール・エディターが開きます。Ctrl+Space をクリックすると、コードアシスト機能によりルールの語句が表示されます。以下のようなルールを作成してください。(直接テキスト入力も可能です)
-
画面下のプロパティで優先度に「1」を入力してください。同じルール・パッケージに複数ルールがある場合、この設定によりルールが先に実行されます。
-
再度、操作マップに戻り、「意思決定表の追加」をクリックしてください。
-
列の編集ウィンドウのテストセクションで、コードアシストを使いながら以下のように入力してください。「’ロイヤルティプログラム’の顧客ランクは<オブジェクト>と同一である」
-
タイトルを「顧客ランク」に変更し、「OK」ボタンをクリックします。
-
意思決定表のB列、C列を右クリックして、条件列を削除してください。
-
アクションを「’ロイヤルティプログラム’の割引率を<数値>とする」に変更します。
-
条件列「顧客ランク」で右クリックして、「追加 > すべてのドメイン値」を選択してください。BOM で定義したドメインがすべて追加されます。
-
割引率の表示を%表示にすることも可能です。アクション列を右クリックして、「フォーマット」を選択してください。(一つのセルではなく、列を選択してください)
-
フォーマットのリストから、「{0, number, percent}」を選択してください。「OK」ボタンをクリックしてウィンドウを閉じます。
-
意思決定表の割引率が%表示になっていることを確認してください。
-
Ctrl+Sをクリックして変更を保存し、意思決定表エディターを閉じます。
まとめ
今回はRule Designerを使用して、簡単なルールの開発を行いました。
次回はこのルールをサーバーにデプロイして、テストしたり編集したりする方法をご紹介します。