IM-BIS for Accel Platform OpenRules for IM-BIS 連携ガイド 第9版 2019-04-01

6.2. OpenRules で AND/ORを含む条件を定義したルールを作成する

OpenRules で複雑な条件の1つとして、AND(条件○○と条件△△の両方を満たす場合)やOR(条件○○、または条件△△のどちらかを満たす場合)は、セルの結合などを利用して表現します。
このハンズオンでは、出張旅費精算フローをサンプルに、ANDやORを組み合わせた条件の記述方法を確認することができます。
また、 OpenRules のルール定義のファイルでは、 項目を論理名で扱うことができますが、 IM-BIS のセレクトボックスなどの画面アイテムでは、 OpenRules に受け渡す値は半角英数字にする必要があるため、セレクトボックスなどの値を扱う場合には、ルール定義ファイルで表示値・送信値のマッピングを行わなければなりません。
このハンズオンでは、そのようなアイテムの一種として、ラジオボタンの値を扱う場合のマッピング方法も同時に確認していきます。

このシナリオで作成するルールの概要

  • 作成するルールの内容

    1. 画面(フォーム)から受け渡されたラジオボタンの送信値を表示値に変換した上で、条件を評価する
    2. 出張旅費精算申請の「場所区分」「出張区分」に応じて、日当金額を設定する
      • 入力値:場所区分、出張区分
      • 出力値:日当
    条件と返却する日当の金額の組み合わせは、以下の通りです。
    • 業務命令に基づく出張に係る日当

      場所区分 出張区分 日当金額
      国内 日帰り 1,000円
      宿泊 2,000円
      国外 日帰り 2,000円
      宿泊 3,000円
      • 場所区分が「国内」かつ出張区分が「日帰り」の場合、日当は1,000円

      • 場所区分が「国内」かつ出張区分が「宿泊」の場合、
        または、場所区分が「国外」かつ出張区分が「日帰り」の場合、日当は2,000円
      • 場所区分が「国外」かつ出張区分が「宿泊」の場合、日当は3,000円

OpenRules で AND/OR条件を表現する方法

このハンズオンを開始する前に、 OpenRules で、AND/ORを利用した条件を表現する方法を確認しましょう。
AND/ORを伴う条件の記述方法には、以下の方法があります。

1つの項目に対してのOR条件(いずれかと一致する)

1つの項目のとりうる値を「OR条件」(いずれかと一致する)を表現するには、演算子の「Is One Of」を利用することができます。
以下は、都道府県から地方名を判断するために「Is One Of」を使った例です。
../../_images/ex_isoneof.png
上の表では、以下の通りに条件を評価します。
  • 国が「日本」「中国」「シンガポール」のいずれかと一致する場合、「地域」に「アジア」という値を返却します。
  • 国が「フランス」「ドイツ」「イタリア」のいずれかと一致する場合、「地域」に「ヨーロッパ」という値を返却します。

2つ以上の項目に対してのAND/OR条件(両方の条件と一致する、いずれかの条件と一致する)

2つ以上の項目を組み合わせたAND/OR条件は、 DecisionTable での行やセルの結合によって表現することができます。
  • 「AND条件」は、 DecisionTable の同じ行に異なる項目に対する条件の基準値を記述することで表現することができます。
  • 「OR条件」は、 DecisionTable の対象の複数の条件の評価(結果)のセルを結合することで表現することができます。
以下は、「製品○○の売上額」と「製品△△の売上額」に基づいて営業成績を評価する例です。
../../_images/ex_andor.png
上の表では、以下の通りに条件を評価します。
  1. AND条件
    「製品○○の売上が100万円以上」と「製品△△の売上が50万円以上」の両方を満たす場合、営業評価として「A」を返却します。
  2. OR条件
    「製品○○の売上が100万円以上」と「製品△△の売上が50万円以上」のいずれかを満たす場合、営業評価として「B」を返却します。
  3. 無条件(デフォルト条件)
    上の条件のどれにも合致しない場合、営業評価として「C」を返却します。

ルールのExcelファイルを作成する手順

今回は、 OpenRules のテンプレート の「汎用テンプレート」を変更しながらルール定義のExcelファイルを作成します。
このシナリオでは、以下の図の流れで作成していきます。

旅費精算の日当計算のハンズオンを開始するための準備

汎用テンプレートの編集を開始する

このハンズオンでは、ダウンロードの章で公開しているテンプレートを変更しながら、申請画面で実行可能な OpenRules の処理を定義します。
まずは、テンプレートファイルを入手しましょう。
  1. OpenRules のテンプレート から「汎用テンプレート」をダウンロードしてください。
  2. ファイルを別名で保存した後に、ファイルの編集を開始します。

日当を計算するための DecisionTable を作成する

最初に、申請書に入力された「出張区分」と「場所区分」に基づいて日当を計算する DecisionTable を作成しましょう。
以下の図のようにExcel上にまとめていきます。
../../_images/excel_dt1.png
  1. 異なる複数の項目(列)の条件
    OpenRules において、条件が複数の項目(列)で構成される場合、「AND」(全ての項目の条件を満たす)条件として扱われます。
  2. 異なる複数のパターン(行)の条件
    OpenRules において、評価の列を縦方向に結合した場合、「OR」(いずれかの組み合わせの条件を満たす)条件として、結合セルに隣接する条件を満たした場合には同じ結果を返却します。

DecisionTable の項目を設定する

最初に場所(国内・国外)と出張区分(日帰り・宿泊)から日当を計算する DecisionTable を作成しましょう。
  1. 編集中のExcelファイルの「DecisionTable」シートを表示してください。
    ../../_images/excel_dt_1_1.png
  2. テンプレートには、説明が添付されていますので、枠で囲まれた部分を削除してください。
    ../../_images/excel_dt_1_2.png
  3. 今回作成する DecisionTable は、Condition が2項目、 Conclusion が1項目となるため、以下の手順で不要な列を削除してください。
    ../../_images/excel_dt_1_3.png
    1. 不要な Conclusion の列(図中ではH列とI列)をドラッグして選択状態にし、右クリックしてください。
    2. メニューから「削除」をクリックしてください。
  4. DecisionTable のテーブル名と項目名を以下の通りに入力してください。
    ../../_images/excel_dt_1_4.png
    1. テーブル名
      キーワード DecisionTable から半角スペースを空けて「setDailyAllowance」と入力してください。
    2. 条件の項目の論理名(1)
      「場所」と入力してください。
    3. 条件の項目の論理名(2)
      「出張区分」と入力してください。
    4. 結果の項目の論理名
      「日当」と入力してください。
  5. これで、 DecisionTable の項目が設定できましたので、各行に条件と評価を入力していきましょう。

DecisionTable の条件・評価を設定する

先の手順で設定した DecisionTable に条件と評価(結果)を設定していきましょう。
  1. まずは、場所が「国内」、出張区分が「日帰り」の条件と日当「1,000円」を設定します。
    以下の通り、1行目の条件・評価を入力してください。
    ../../_images/excel_dt_1_5.png
    1. 場所
      • 左のセルに演算子として「=」を入力してください。
      • 右のセルに比較する値として「国内」を入力してください。
    2. 出張区分
      • 左のセルに演算子として「=」を入力してください。
      • 右のセルに比較する値として「日帰り」を入力してください。
    3. 日当
      • 左のセルに演算子として「=」を入力してください。
      • 右のセルに条件に合致したときに返却する値として「1000」を入力してください。
  2. 続いて、場所区分が「国内」、出張区分が「宿泊」の条件と日当「2,000円」を設定します。
    以下の通り、2行目の条件・評価を入力してください。
    ../../_images/excel_dt_1_6.png
    1. 場所
      • 左のセルに演算子として「=」を入力してください。
      • 右のセルに比較する値として「国内」を入力してください。
    2. 出張区分
      • 左のセルに演算子として「=」を入力してください。
      • 右のセルに比較する値として「宿泊」を入力してください。
    3. 日当
      • 左のセルに演算子として「=」を入力してください。
      • 右のセルに条件に合致したときに返却する値として「2000」を入力してください。
  3. 場所区分が「国外」、出張区分が「日帰り」の条件と日当「2,000円」を設定します。
    以下の通り、3行目の条件・評価を入力してください。
    ../../_images/excel_dt_1_7.png
    1. 場所
      • 左のセルに演算子として「=」を入力してください。
      • 右のセルに比較する値として「国外」を入力してください。
    2. 出張区分
      • 左のセルに演算子として「=」を入力してください。
      • 右のセルに比較する値として「日帰り」を入力してください。
    3. 日当
      • 左のセルに演算子として「=」を入力してください。
      • 右のセルに条件に合致したときに返却する値として「2000」を入力してください。
  4. 場所区分が「国外」、出張区分が「宿泊」の条件と日当「3,000円」を設定します。
    以下の通り、4行目の条件・評価を入力してください。
    ../../_images/excel_dt_1_8.png
    1. 場所
      • 左のセルに演算子として「=」を入力してください。
      • 右のセルに比較する値として「国外」を入力してください。
    2. 出張区分
      • 左のセルに演算子として「=」を入力してください。
      • 右のセルに比較する値として「宿泊」を入力してください。
    3. 日当
      • 左のセルに演算子として「=」を入力してください。
      • 右のセルに条件に合致したときに返却する値として「3000」を入力してください。
  5. 5行目については、不要な行のため、対象の行の上(図中では10行目)で右クリックし、削除をクリックしてください。
    ../../_images/excel_dt_1_9.png
  6. 作成した DecisionTable を確認すると、結果に「日当」の「2,000円」が2回登場しており、対応する条件2つのどちらかを満たす、つまりOR条件で設定する必要があります。
    OpenRules では、OR条件を設定するには、セルを結合する必要があるため、この日当の演算子・値のセルを結合してください。
    ../../_images/excel_dt_1_10.png
  7. これで、日当を計算する DecisionTable が完成しましたので、一度ファイルを保存しましょう。

OpenRules でアイテムの送信値・表示値のマッピングを設定する

先の手順で DecisionTable では、申請画面で入力された「場所」や「出張区分」の値に基づいて、日当を計算するように作成しました。
後の手順で IM-BIS と連携する場合の画面(フォーム)では、これらの項目は「ラジオボタン」とで設定しており、 OpenRules には半角英数字のコードの「送信値」が受け渡されます。
../../_images/app_form.png
  1. 場所(ラジオボタン)とアイテムのプロパティ設定
  2. 出張区分(ラジオボタン)とアイテムのプロパティ設定
このまま OpenRules と IM-BIS を連携すると、 DecisionTable は表示値で条件が記載されていることに対し、画面からは送信値が受け渡されるため 、 OpenRules で正しく評価することができません。
そのため、 OpenRules の定義内で表示値・送信値のマッピングを行う DecisionTable を設定し、事前に送信値を表示値に変換する処理を行うための DecisionTable を作成します。
以下の図のように項目単位で表示値・送信値をマッピングする DecisionTable をまとめていきます。
  • 「場所」は、 DecisionTable 「convertArea」を利用して、 OpenRules 内で送信値と表示値の変換を行います。
    左側が IM-BIS のラジオボタンの値の設定、右側が OpenRules の変換 DecisionTable です。
    ../../_images/excel_dt_mapping_area.png
  • 「出張区分」は、 DecisionTable 「convertTripClass」を利用して、 OpenRules 内で送信値と表示値の変換を行います。
    左側が IM-BIS のラジオボタンの値の設定、右側が OpenRules の変換 DecisionTable です。
    ../../_images/excel_dt_mapping_tripclass.png

場所のマッピング DecisionTable を作成する

マッピングが必要な項目「場所」に対応するマッピングの DecisionTable を作成しましょう。
  1. 編集したExcelファイルを開きます。
  2. 「DecisionTable」シートを表示します。
  3. 以下の手順で作成済みの DecisionTable をコピーして新しい DecisionTable を作成してください。
    ../../_images/excel_dt_2_1.png
    1. 作成したテーブルの範囲を選択してください。
    2. 右クリック後、「コピー」をクリックしてください。
    3. コピーしたテーブルから1セル以上行・列を空けたセルで右クリックし、「貼り付け」を選択してください。
  4. コピーで作成した DecisionTable に対し、以下の手順で不要な列を削除してください。
    ../../_images/excel_dt_2_2.png
    1. 不要な列(図中ではL列とM列)をドラッグして選択状態にし、右クリックしてください。
    2. メニューから「削除」をクリックしてください。
  5. コピーした DecisionTable は、ラジオボタンの値の個数にあわせて、明細が2行になるように不要な行を削除してください。
    ../../_images/excel_dt_2_3.png
  6. DecisionTable のテーブル名と項目名を以下の通りに入力してください。
    ../../_images/excel_dt_2_4.png
    1. テーブル名
      キーワード DecisionTable から半角スペースを空けて「convertArea」と入力してください。
    2. 条件の項目の論理名
      「場所コード」と入力してください。
    3. 結果の項目の論理名
      「場所」と入力してください。
  7. DecisionTable の明細には、以下の通りに「場所」のラジオボタンの表示値・送信値を入力してください。
    ../../_images/excel_dt_2_5.png
    場所コード 場所
    domestic 国内
    overseas 国外
  8. これで場所のマッピング DecisionTable が作成できましたので、引き続き出張区分を作成していきましょう。

出張区分のマッピング DecisionTable を作成する

同じようにしてマッピングが必要な項目「出張区分」に対応するマッピングの DecisionTable を作成しましょう。
  1. 以下の手順で作成済みの DecisionTable 「convertArea」をコピーして新しい DecisionTable を作成してください。
    ../../_images/excel_dt_2_6.png
    1. 作成したテーブル「convertArea」の範囲を選択してください。
    2. 右クリック後、「コピー」をクリックしてください。
    3. コピーしたテーブルから1セル以上行・列を空けたセルで右クリックし、「貼り付け」を選択してください。
  2. DecisionTable のテーブル名と項目名を以下の通りに入力してください。
    ../../_images/excel_dt_2_7.png
    1. テーブル名
      キーワード DecisionTable から半角スペースを空けて「convertTripClass」と入力してください。
    2. 条件の項目の論理名
      「出張区分コード」と入力してください。
    3. 結果の項目の論理名
      「出張区分」と入力してください。
  3. DecisionTable の明細には、以下の通りに「出張区分」のラジオボタンの表示値・送信値を入力してください。
    ../../_images/excel_dt_2_8.png
    出張区分コード 出張区分
    lodgment 宿泊
    single-day 日帰り
  4. これで、表示値と送信値を OpenRules でマッピングする表ができました。

OpenRules で実行する DecisionTable の順序をコントロールする

ここまでの手順で、場所区分・出張区分のマッピング、日当の計算で3つの DecisionTable を作成しました。
次の手順では、マッピングの DecisionTable 、日当の計算の DecisionTable の順に実行されるようにコントロールするための Decision を設定します。
以下の図のように Decision をまとめていきます。
../../_images/decision1.png
  1. 1つの Decision で実行対象の DecisionTable を複数記述できます。
    Decision では上から順に記述された DecisionTable の評価や処理を実行します。
  2. 今回のハンズオンでは扱いませんが、 DecisionCondition を記載した場合には条件に合致したときだけ特定の DecisionTable の評価を実行することが設定できます。

Decision を作成する

ルールのコントロールを行う Decision を作成しましょう。
  1. 編集したExcelファイルを開きます。
  2. 「Main」タブをクリックして「Main」シートを表示してください。
    ../../_images/excel_decision_13.png
  3. Decision を表示してください。
    DecisionTable を作成した時と同様に、シート上のコメントは不要であれば削除してください。)
    ../../_images/excel_decision_21.png
  4. キーワード Decision から半角スペースを空けて「sampleDailyAllowance」と入力してください。
    ../../_images/excel_decision_31.png
  5. 今回のハンズオンでは、1つの Decision で3つの DecisionTable を実行します。
    3つ分の DecisionTable を記述できるように間に2行追加してください。
    ../../_images/excel_decision_41.png
  6. 最初に場所の DecisionTable を実行するための設定を行います。
    1行目の内容を以下の通りに変更してください。
    ../../_images/excel_decision_51.png
    ActionPrint ActionExecute
    場所の変換 convertArea
  7. 次に出張区分の DecisionTable を実行するための設定を行います。
    以下の通り2行目に入力してください。
    ../../_images/excel_decision_61.png
    ActionPrint ActionExecute
    出張区分の変換 convertTripClass
  8. 最後に日当計算の DecisionTable を実行するための設定を行います。
    以下の通り3行目に入力してください。
    ../../_images/excel_decision_71.png
    ActionPrint ActionExecute
    日当の計算 setDailyAllowance
  9. ここまでで、 DecisionTable の実行順を Decision で設定することができました。
    Excelファイルを保存し、次の手順に進みましょう。

実行に必要な定義を設定する

ルールの中心となる DecisionDecisionTable が完成しましたので、実行に必要なその他の定義を設定していきましょう。

Glossary に利用する項目を定義する

DecisionTable で使っている項目を確認しながら、 Glossary を定義していきましょう。
  1. 編集中のExcelファイルの「Definition」タブをクリックして「Definition」シートを表示してください。
    ../../_images/excel_glossary_1.png
  2. このシートの Glossary を表示してください。
    DecisionTable を作成した時と同様に、シート上のコメントは不要であれば削除してください。)
    ../../_images/excel_glossary_2.png
  3. Glossary を定義するためには、 DecisionTable で利用している項目を確認する必要があります。
    今回のハンズオンの DecisionTable で扱っている項目には、以下の5つがあります。
    • 場所コード
    • 出張区分コード
    • 場所
    • 出張区分
    • 日当
    このうち、画面(フォーム)から OpenRules に受け渡される項目(場所コード、出張区分コード)を「RequestObject」の項目として定義してください。
    Variable BusinessConcept Attribute
    場所コード RequestObject areaClassCode
    出張区分コード tripClassCode
    ../../_images/excel_glossary_3.png
  4. 続いて、 OpenRules から画面(フォーム)に返却する項目を「ResponseObject」として定義してください。
    ResponseObjectに含まれる項目は数値型の「日当(dailyAllowance)」のみですが、このまま定義すると OpenRules の制約( Datatype の「技術的な制約事項」参照 )で正しく実行できません。
    そのため、ダミー項目を定義した後に、日当を定義してください。

    Glossary には、以下のように定義します。
    Variable BusinessConcept Attribute
    ダミー ResponseObject dummy
    日当 dailyAllowance
    ../../_images/excel_glossary_4.png

    コラム

    ダミー項目はExcelファイル内での定義が必須ですが、 IM-BIS のデータソース定義への設定は不要です。
  5. DecisionTable で扱っている項目のうち、RequestObjectとResponseObjectのどちらにも属さない項目は内部項目のオブジェクト(Internal)として定義します。
    この時点で定義していない「場所区分」「出張区分」について、以下のように定義してください。
    Variable BusinessConcept Attribute
    場所区分 Internal area
    出張区分 tripClass
    ../../_images/excel_glossary_5.png

Glossary に基づいて DatatypeData/Variable を定義する

Glossary を利用して DatatypeData/Variable を定義していきましょう。
  1. Glossary が定義できましたので、これに基づいて DatatypeData/Variable を定義していきます。
    同じ「Definition」シートのRequestObjectの DatatypeData/Variable を以下のように定義してください。
    • Datatype

      Datatype RequestObject  
      String areaClassCode
      String tripClassCode
    • Data/Variable

      Data RequestObject requestObj  
      areaClassCode tripClassCode
      場所コード 出張区分コード
      テスト場所 テスト出張区分
    ../../_images/excel_data_15.png
  2. ResponseObjectの DatatypeData/Variable を以下のように定義してください。
    • Datatype

      Datatype ResponseObject  
      String dummy
      int dailyAllowance
    • Data/Variable

      Data ResponseObject responseObj  
      dummy dailyAllowance
      ダミー 日当
      ダミー内容 0
    ../../_images/excel_data_21.png
  3. 同様にInternalの DatatypeData/Variable を定義するために、先に作成したRequestObjectの定義を以下の手順でコピーしてください。
    ../../_images/excel_data_31.png
    1. RequestObjectの DatatypeData/Variable の範囲を選択してください。
    2. 右クリック後、「コピー」をクリックしてください。
    3. コピーしたテーブルから1セル以上行・列を空けたセルで右クリックし、「貼り付け」を選択してください。
  4. コピーした定義を以下のように変更してください。
    • Datatype

      Datatype Internal  
      String area
      String tripClass
    • Data/Variable

      Data Internal internal  
      area tripClass
      場所 出張区分
      テスト場所 テスト出張区分
    ../../_images/excel_data_41.png
  5. これで DatatypeData/Variable が定義できましたので、一度保存します。

DecisionObject を定義してルールを完成させる

最後に DecisionObject を定義して、Excelのルール定義ファイルを完成させましょう。
  1. 「Main」タブをクリックして「Main」シートを表示してください。
    ../../_images/excel_do_11.png
  2. 「Main」シートで DecisionObject を設定していきます。
    RequestObject、ResponseObjectのオブジェクトについては、テンプレートと同じ設定となっているため、設定は不要です。
    RequestObject、ResponseObjectの下にInternalの設定用に1行追加してください。
    ../../_images/excel_do_21.png
  3. 追加した行には、以下のように設定してください。
    DecisionObject decisionObjects  
    Business Concept Business Object
    Internal := internal[0]
    ../../_images/excel_do_31.png

    コラム

    このハンズオンのように、処理用のオブジェクト等を定義した場合には、 DecisionObject でインスタンス化の処理を設定することができます。

  4. これで、 OpenRules で日当を計算するExcelのルール定義ファイルの設定が完了しましたので、ファイルを保存します。
    IM-BIS の画面(フォーム)と連携するための設定を行っていきましょう。