5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ODM for Developerをさわってみた②ルール開発

Last updated at Posted at 2019-09-30

ODMのルール開発は、Rule Designerで行います。ODM for Developer用の無料のRule Designerは、Eclipseマーケットプレイスからプラグインとして取得・導入することができます。

今回は、Rule Designerで簡単なルールを開発してみたいと思います。

Eclipseのインストール

最新のRule DesignerはEclipse v4.7.3(Oxygen)をベースとしているため、同じバージョンをインストールする必要があります。Eclipseの最新版や日本語化プラグインを導入していると、Rule Designerの言語ロケールを変更できなくなる場合があるので注意してください。

  1. Eclipseがない、またはバージョンが違う場合は、Eclipse Oxygenをインストールしてください。

  2. Eclipseを起動し、Eclipse Marketplaceウィンドウを開きます。「odm」で検索して、IBM ODM Rule Designer for Developer V8.10.1をインストールします。
    a1.png

  3. ライセンス確認のウィンドウで「I accept the terms…」を選択して、「Finish」ボタンをクリックします。

  4. インストールが完了したら、Eclipseを再起動します。ルール・パースペクティブが追加されていることを確認してください。
    a2.png

ルールの開発環境の準備ができました。
以下の手順では、シンプルなルールを開発していきます。

実行モデル(XOM)の作成

顧客ランクに応じて割引率を返す、シンプルなルールを開発します。(シンプルなロジックであればルールを使用する必要はありませんが、ODMの仕組みとルールの作り方を理解するためにシナリオを単純化しています。)

ODMのルールは、日本語でルールを記述するために、実行モデル(XOM)とビジネス・オブジェクト・モデル(BOM)を対応づける辞書を定義します。ルールの開発の初めには、ルールで使用するデータ項目を設計し、JavaのクラスやXMLスキーマ等によって実行モデルを作成します。ここではJavaを使用してXOMを作成します。

  1. EclipseのJavaパースペクティブを開きます。「新規(New) > Javaプロジェクト(Java Project)」をクリックしてください。
    b1.png

  2. プロジェクトの名前に「CustomerLoyaltyXOM」と入力し、JREのバージョンが1.8になっていることを確認して「Finish」をクリックします。
    b2.png

  3. パッケージ・エクスプローラーで作成したJavaプロジェクトを右クリックして、「新規(New) > クラス(Class)」を選択してください。
    b3.png

  4. パッケージの名前に「my.first.rule」、クラスの名前に「Loyalty」と入力し、「Finish」をクリックします。
    b4.png

  5. Javaエディターが開きます。以下のように、3つのPrivate変数を作成してください。
    b5.png

  6. Javaエディター上で右クリックして、「ソース(Source) > GetterとSetterの生成(Generate Getter and Setter)」を選択してください。

  7. 右側の「すべて選択(Select all)」をクリックしてから、「OK」ボタンをクリックしてください。
    b7.png

  8. 再度Javaエディター上で右クリックして、「ソース(Source) > フィールドを使用してコンストラクタを生成(Generate Constructor using Fields)」を選択します。

  9. デフォルトで3つのフィールドが選択されていることを確認し、「OK」をクリックしてください。
    b9.png

  10. 再度Javaエディター上で右クリックして、「ソース(Source) > スーパークラスからコンストラクタを生成(Generate Constructor from Superclass)」を選択します。

  11. デフォルトのまま「OK」をクリックしてください。
    b11.png

  12. 以下のようなコードになっているはずです。Ctrl+Sを押して保存してください。
    b12.png

ルール・プロジェクト作成とXOMインポート

  1. Eclipseの右上にあるアイコンをクリックして、ルール・パースペクティブに切り替えてください。
    c1.png

  2. 画面下に、意思決定サービスマップが表示されます。これがルールの開発を進めるステップのガイドとなっています。一番左上にある、「メイン・ルール・プロジェクトの作成」をクリックしてください。
    c2.png

  3. テンプレートに「メイン・ルール・プロジェクト」が選択されていることを確認して「Next」をクリックしてください。
    c3.png

  4. ルールプロジェクトの名前に「CustomerLoyaltyRule」と入力し、「Finish」をクリックします。
    c4.png

  5. 画面下に表示されている意思決定サービスマップから、「XOMのインポート」をクリックしてください。

  6. 「Java実行オブジェクト・モデル」が選択されていることを確認して、「OK」をクリックします。
    c6.png

  7. リストから「CustomerLoyaltyXOM」をチェックして、「適用して閉じる(Apply and Close)」をクリックしてください。
    c7.png

ビジネス・オブジェクト・モデル(BOM)の作成

BOMはルール記述の中で使用する業務用語の辞書です。XOMのインターフェースに使用した語句だけでなく、計算や判定ロジックの中で必要となる語句を定義します。

商品名や事業所名などパターンが限定される語句を「ドメイン」として定義することで、ルールの開発や検証を効率的に行うこともできます。

  1. 意思決定サービスマップで「BOMの作成」をクリックしてください。

  2. デフォルトのまま「Next」をクリックします。
    d2.png

  3. 右にある「XOMの参照」ボタンをクリックして、先ほど作成した「CustomerLoyaltyXOM」を選択して「終了(Finish)」をクリックしてください。
    d3.png

  4. ルール・エクスプローラで「モデル」をダブルクリックして開きます。
    d4.png

  5. パッケージを展開し、「Loyalty」クラスをダブルクリックしてください。
    d5.png

  6. クラスの言語化セクションで、「用語の編集」をクリックしてください。
    d6.png

  7. ラベルを「ロイヤルティプログラム」に変更して「OK」ボタンをクリックします。
    d7.png

  8. 続いてメンバーの言語化を行います。メンバー・セクションで一番上にある「discount_rate」をダブルクリックしてください。

  9. メンバーの言語化セクションで「語句で使用されている主語を編集する」のリンクをクリックします。
    d9.png

  10. ラベルを「割引率」に変更し、「OK」をクリックしてください。
    d10.png

  11. アクションのテンプレートにはdiscount rateの用語が残っています。テキストを編集して「割引率」に変更してください。
    d11.png

  12. 同様の手順で、他のメンバーの言語化を行います。BOMエディターの下にある、クラス・タブを選択し、メンバーセクションから2番目の「lank」をダブルクリックしてください。

  13. メンバーの言語化セクションで「語句で使用されている主語を編集する」をクリックします。

  14. ラベルを「顧客ランク」に変更し、「OK」ボタンをクリックしてください。

  15. アクションのテンプレートに残っている「lank」の語句を「顧客ランク」に編集します。

  16. 顧客ランクはいくつかの種類に限られるため、用語を特定するためのドメインを作成します。ドメイン・セクションで「ドメインを作成する」をクリックしてください。
    d16.png

  17. ドメイン型から、「リテラル」を選択し、「次へ(Next)」をクリックします。
    d17.png

  18. 右にある「追加」ボタンをクリックし、リストに追加されたnewValueを「プラチナ」に変更してください。同様に、ゴールド・シルバー・ブロンズを追加して「Finish」をクリックします。
    d18.png

  19. BOMエディターの下にある、クラス・タブを選択し、メンバーセクションから3番目の「message」をダブルクリックしてください。

  20. メンバーの言語化セクションで「語句で使用されている主語を編集する」のリンクをクリックします。

  21. ラベルを「メッセージ」に変更し、「OK」ボタンをクリックしてください。

  22. アクションのテンプレートに残っている「message」の語句を「メッセージ」に編集します。

  23. Ctrl+Sをクリックして、変更を保存してください。

意思決定操作とルール・フローの作成

意思決定操作は、ルールが外部から呼び出される際のインターフェース定義です。前の手順で作成したXOMをパラメーターとして持つ、オペレーションにあたります。ここでは意思決定操作を定義して言語化(日本語化)し、ルール内での計算や判定の順序をルール・フローとして定義します。

  1. 意思決定サービス・マップから、「意思決定操作の追加」をクリックしてください。

  2. 操作の名前に「getDiscount」と入力し、「Finish」ボタンをクリックします。
    e2.png

  3. 意思決定サービス・マップから、「操作マップに移動する」をクリックしてください。

  4. 意思決定操作の選択ウィンドウで、「getDiscount」を選択し「OK」ボタンをクリックします。
    e4.png

  5. 操作マップが開きます。「変数セットの追加」をクリックしてください。
    e5.png

  6. 変数セットの名前に「param」と入力し、「Finish」をクリックしてください。
    e6.png

  7. 変数セットのエディター右側にある「追加」ボタンをクリックし、タイプを「Loyalty」言語化を「ロイヤルティプログラム」に変更してください。
    e7.png

  8. Ctrl+Sをクリックして変更を保存し、変数セットのエディターを閉じてください。

  9. 操作マップで「変数のバインド」をクリックします。

  10. 先ほど追加した変数(myVar)を入出力パラメーターのセクションにドラッグ&ドロップしてください。
    e10.png

  11. Ctrl+Sをクリックして変更を保存し、意思決定操作のエディターを閉じます。

  12. 続いて操作マップで「ルール・パッケージの追加」をクリックします。

  13. パッケージの名前に「判定」と入力して、「Finish」ボタンをクリックしてください。
    e13.png

  14. 操作マップで、「ルール・フローの追加」をクリックします。

  15. ルール・フローの名前に「メインフロー」と入力し、「Finish」ボタンをクリックしてください。
    e15.png

  16. ルール・フロー・エディターが開きます。左側のパレットで「開始ノード」(一番上の矢印アイコン)をクリックしてから、エディター上をクリックしてください。

  17. 同様に、「終了ノード」(二番目にある赤丸アイコン)をクリックしてから、エディター上をクリックしてください。以下のように開始ノードと終了ノードが配置されるはずです。
    e18.png

  18. 左側のパレットで「ルール・タスク」(三番目にある歯車アイコン)をクリックしてから、エディター上の開始ノードと終了ノードの間をクリックしてください。

  19. エディターの下にあるプロパティで、ルール・タスクのラベルを「判定」に変更してください。
    e20.png

  20. プロパティの「ルールの選択」タブで「編集」ボタンをクリックしてください。

  21. ルールの選択ウィンドウで「>>」ボタンをクリックし、「判定」ルール・パッケージを選択します(右側のリストに表示されます)。
    e22.png

  22. ルール・フロー・エディターのパレットから「遷移」(一番下にある下向き矢印)をクリックします。開始ノード、ルール・タスク、終了ノードを順にクリックして接続してください。

  23. エディター上を右クリックして、「すべてのノードのレイアウト」を選択してください。以下のようなフローになります。
    e24.png

  24. 再度、操作マップを表示します。「ルール・フローのバインド」をクリックしてください。

  25. 意思決定操作のエディターが開きます。ルール・フローのセクションで、「ルール・フローの選択」リンクをクリックし、先ほど作成した「メインフロー」を選択してください。
    e26.png

  26. Ctrl+Sをクリックして変更を保存し、意思決定操作エディターを閉じてください。

ルール定義

  1. 操作マップから、「アクション・ルールの追加」をクリックします。

  2. パッケージの横にある「参照」ボタンをクリックして、「判定」パッケージを選択します。これによりアクション・ルールが「判定」パッケージに含まれ、ルール・フロー内で実行されます。

  3. 名前に「空のランクチェック」と入力し、「Finish」をクリックしてください。
    f3.png

  4. ルール・エディターが開きます。Ctrl+Space をクリックすると、コードアシスト機能によりルールの語句が表示されます。以下のようなルールを作成してください。(直接テキスト入力も可能です)
    f4.png

  5. 画面下のプロパティで優先度に「1」を入力してください。同じルール・パッケージに複数ルールがある場合、この設定によりルールが先に実行されます。

  6. 再度、操作マップに戻り、「意思決定表の追加」をクリックしてください。

  7. パッケージに「判定」を選択し、名前に「割引判定」と入力します。「Finish」ボタンをクリックしてください。
    f7.png

  8. 空の意思決定表が作成されます。A列を右クリックして、「条件列の編集」を選択してください。
    f8.png

  9. 列の編集ウィンドウのテストセクションで、コードアシストを使いながら以下のように入力してください。「’ロイヤルティプログラム’の顧客ランクは<オブジェクト>と同一である」
    f9.png

  10. タイトルを「顧客ランク」に変更し、「OK」ボタンをクリックします。

  11. 意思決定表のB列、C列を右クリックして、条件列を削除してください。

  12. 意思決定表のアクション列(グレーがかった列)を右クリックし、「アクション列の編集」を選択します。
    f12.png

  13. アクションを「’ロイヤルティプログラム’の割引率を<数値>とする」に変更します。

  14. タイトルに「割引率」と入力して、「OK」ボタンをクリックしてください。
    f14.png

  15. 条件列「顧客ランク」で右クリックして、「追加 > すべてのドメイン値」を選択してください。BOM で定義したドメインがすべて追加されます。
    f15.png

  16. アクション列「割引率」に適当な数値(0.01から0.99までの小数)を入力してください。
    f16.png

  17. 割引率の表示を%表示にすることも可能です。アクション列を右クリックして、「フォーマット」を選択してください。(一つのセルではなく、列を選択してください)

  18. フォーマットのリストから、「{0, number, percent}」を選択してください。「OK」ボタンをクリックしてウィンドウを閉じます。
    f18.png

  19. 意思決定表の割引率が%表示になっていることを確認してください。

  20. Ctrl+Sをクリックして変更を保存し、意思決定表エディターを閉じます。

まとめ

今回はRule Designerを使用して、簡単なルールの開発を行いました。
次回はこのルールをサーバーにデプロイして、テストしたり編集したりする方法をご紹介します。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?