6.2. OpenRules で AND/ORを含む条件を定義したルールを作成する¶
OpenRules で複雑な条件の1つとして、AND(条件○○と条件△△の両方を満たす場合)やOR(条件○○、または条件△△のどちらかを満たす場合)は、セルの結合などを利用して表現します。このハンズオンでは、出張旅費精算フローをサンプルに、ANDやORを組み合わせた条件の記述方法を確認することができます。また、 OpenRules のルール定義のファイルでは、 項目を論理名で扱うことができますが、 IM-BIS のセレクトボックスなどの画面アイテムでは、 OpenRules に受け渡す値は半角英数字にする必要があるため、セレクトボックスなどの値を扱う場合には、ルール定義ファイルで表示値・送信値のマッピングを行わなければなりません。このハンズオンでは、そのようなアイテムの一種として、ラジオボタンの値を扱う場合のマッピング方法も同時に確認していきます。
ルールを定義するExcelファイルを作成する手順
このシナリオで作成するルールの概要¶
作成するルールの内容
- 画面(フォーム)から受け渡されたラジオボタンの送信値を表示値に変換した上で、条件を評価する
- 出張旅費精算申請の「場所区分」「出張区分」に応じて、日当金額を設定する
- 入力値:場所区分、出張区分
- 出力値:日当
条件と返却する日当の金額の組み合わせは、以下の通りです。業務命令に基づく出張に係る日当
場所区分 出張区分 日当金額 国内 日帰り 1,000円 宿泊 2,000円 国外 日帰り 2,000円 宿泊 3,000円 場所区分が「国内」かつ出張区分が「日帰り」の場合、日当は1,000円
- 場所区分が「国内」かつ出張区分が「宿泊」の場合、または、場所区分が「国外」かつ出張区分が「日帰り」の場合、日当は2,000円
場所区分が「国外」かつ出張区分が「宿泊」の場合、日当は3,000円
OpenRules で AND/OR条件を表現する方法¶
このハンズオンを開始する前に、 OpenRules で、AND/ORを利用した条件を表現する方法を確認しましょう。AND/ORを伴う条件の記述方法には、以下の方法があります。
1つの項目に対してのOR条件(いずれかと一致する)¶
2つ以上の項目に対してのAND/OR条件(両方の条件と一致する、いずれかの条件と一致する)¶
2つ以上の項目を組み合わせたAND/OR条件は、 DecisionTable での行やセルの結合によって表現することができます。
- 「AND条件」は、 DecisionTable の同じ行に異なる項目に対する条件の基準値を記述することで表現することができます。
- 「OR条件」は、 DecisionTable の対象の複数の条件の評価(結果)のセルを結合することで表現することができます。
以下は、「製品○○の売上額」と「製品△△の売上額」に基づいて営業成績を評価する例です。上の表では、以下の通りに条件を評価します。
AND条件「製品○○の売上が100万円以上」と「製品△△の売上が50万円以上」の両方を満たす場合、営業評価として「A」を返却します。 OR条件「製品○○の売上が100万円以上」と「製品△△の売上が50万円以上」のいずれかを満たす場合、営業評価として「B」を返却します。 無条件(デフォルト条件)上の条件のどれにも合致しない場合、営業評価として「C」を返却します。
ルールのExcelファイルを作成する手順¶
今回は、 OpenRules のテンプレート の「汎用テンプレート」を変更しながらルール定義のExcelファイルを作成します。このシナリオでは、以下の図の流れで作成していきます。
旅費精算の日当を計算するルールの作成の手順
旅費精算の日当計算のハンズオンを開始するための準備¶
汎用テンプレートの編集を開始する¶
このハンズオンでは、ダウンロードの章で公開しているテンプレートを変更しながら、申請画面で実行可能な OpenRules の処理を定義します。まずは、テンプレートファイルを入手しましょう。
OpenRules のテンプレート から「汎用テンプレート」をダウンロードしてください。 ファイルを別名で保存した後に、ファイルの編集を開始します。
日当を計算するための DecisionTable を作成する¶
DecisionTable の項目を設定する¶
最初に場所(国内・国外)と出張区分(日帰り・宿泊)から日当を計算する DecisionTable を作成しましょう。
編集中のExcelファイルの「DecisionTable」シートを表示してください。 テンプレートには、説明が添付されていますので、枠で囲まれた部分を削除してください。
- 不要な Conclusion の列(図中ではH列とI列)をドラッグして選択状態にし、右クリックしてください。
- メニューから「削除」をクリックしてください。
DecisionTable のテーブル名と項目名を以下の通りに入力してください。
テーブル名キーワード DecisionTable から半角スペースを空けて「setDailyAllowance」と入力してください。 条件の項目の論理名(1)「場所」と入力してください。 条件の項目の論理名(2)「出張区分」と入力してください。 結果の項目の論理名「日当」と入力してください。 これで、 DecisionTable の項目が設定できましたので、各行に条件と評価を入力していきましょう。
DecisionTable の条件・評価を設定する¶
先の手順で設定した DecisionTable に条件と評価(結果)を設定していきましょう。
まずは、場所が「国内」、出張区分が「日帰り」の条件と日当「1,000円」を設定します。以下の通り、1行目の条件・評価を入力してください。 続いて、場所区分が「国内」、出張区分が「宿泊」の条件と日当「2,000円」を設定します。以下の通り、2行目の条件・評価を入力してください。 場所区分が「国外」、出張区分が「日帰り」の条件と日当「2,000円」を設定します。以下の通り、3行目の条件・評価を入力してください。 場所区分が「国外」、出張区分が「宿泊」の条件と日当「3,000円」を設定します。以下の通り、4行目の条件・評価を入力してください。 5行目については、不要な行のため、対象の行の上(図中では10行目)で右クリックし、削除をクリックしてください。 作成した DecisionTable を確認すると、結果に「日当」の「2,000円」が2回登場しており、対応する条件2つのどちらかを満たす、つまりOR条件で設定する必要があります。OpenRules では、OR条件を設定するには、セルを結合する必要があるため、この日当の演算子・値のセルを結合してください。 これで、日当を計算する DecisionTable が完成しましたので、一度ファイルを保存しましょう。
OpenRules でアイテムの送信値・表示値のマッピングを設定する¶
先の手順で DecisionTable では、申請画面で入力された「場所」や「出張区分」の値に基づいて、日当を計算するように作成しました。後の手順で IM-BIS と連携する場合の画面(フォーム)では、これらの項目は「ラジオボタン」とで設定しており、 OpenRules には半角英数字のコードの「送信値」が受け渡されます。このまま OpenRules と IM-BIS を連携すると、 DecisionTable は表示値で条件が記載されていることに対し、画面からは送信値が受け渡されるため 、 OpenRules で正しく評価することができません。そのため、 OpenRules の定義内で表示値・送信値のマッピングを行う DecisionTable を設定し、事前に送信値を表示値に変換する処理を行うための DecisionTable を作成します。以下の図のように項目単位で表示値・送信値をマッピングする DecisionTable をまとめていきます。
「場所」は、 DecisionTable 「convertArea」を利用して、 OpenRules 内で送信値と表示値の変換を行います。左側が IM-BIS のラジオボタンの値の設定、右側が OpenRules の変換 DecisionTable です。 「出張区分」は、 DecisionTable 「convertTripClass」を利用して、 OpenRules 内で送信値と表示値の変換を行います。左側が IM-BIS のラジオボタンの値の設定、右側が OpenRules の変換 DecisionTable です。
場所のマッピング DecisionTable を作成する¶
マッピングが必要な項目「場所」に対応するマッピングの DecisionTable を作成しましょう。
編集したExcelファイルを開きます。 「DecisionTable」シートを表示します。 以下の手順で作成済みの DecisionTable をコピーして新しい DecisionTable を作成してください。 コピーで作成した DecisionTable に対し、以下の手順で不要な列を削除してください。 コピーした DecisionTable は、ラジオボタンの値の個数にあわせて、明細が2行になるように不要な行を削除してください。 DecisionTable のテーブル名と項目名を以下の通りに入力してください。
テーブル名キーワード DecisionTable から半角スペースを空けて「convertArea」と入力してください。 条件の項目の論理名「場所コード」と入力してください。 結果の項目の論理名「場所」と入力してください。 DecisionTable の明細には、以下の通りに「場所」のラジオボタンの表示値・送信値を入力してください。 これで場所のマッピング DecisionTable が作成できましたので、引き続き出張区分を作成していきましょう。
出張区分のマッピング DecisionTable を作成する¶
同じようにしてマッピングが必要な項目「出張区分」に対応するマッピングの DecisionTable を作成しましょう。
以下の手順で作成済みの DecisionTable 「convertArea」をコピーして新しい DecisionTable を作成してください。 DecisionTable のテーブル名と項目名を以下の通りに入力してください。
テーブル名キーワード DecisionTable から半角スペースを空けて「convertTripClass」と入力してください。 条件の項目の論理名「出張区分コード」と入力してください。 結果の項目の論理名「出張区分」と入力してください。 DecisionTable の明細には、以下の通りに「出張区分」のラジオボタンの表示値・送信値を入力してください。 これで、表示値と送信値を OpenRules でマッピングする表ができました。
OpenRules で実行する DecisionTable の順序をコントロールする¶
ここまでの手順で、場所区分・出張区分のマッピング、日当の計算で3つの DecisionTable を作成しました。以下の図のように Decision をまとめていきます。
1つの Decision で実行対象の DecisionTable を複数記述できます。Decision では上から順に記述された DecisionTable の評価や処理を実行します。
Decision を作成する¶
ルールのコントロールを行う Decision を作成しましょう。
編集したExcelファイルを開きます。 「Main」タブをクリックして「Main」シートを表示してください。 Decision を表示してください。( DecisionTable を作成した時と同様に、シート上のコメントは不要であれば削除してください。) キーワード Decision から半角スペースを空けて「sampleDailyAllowance」と入力してください。 今回のハンズオンでは、1つの Decision で3つの DecisionTable を実行します。3つ分の DecisionTable を記述できるように間に2行追加してください。 最初に場所の DecisionTable を実行するための設定を行います。1行目の内容を以下の通りに変更してください。 次に出張区分の DecisionTable を実行するための設定を行います。以下の通り2行目に入力してください。 最後に日当計算の DecisionTable を実行するための設定を行います。以下の通り3行目に入力してください。 ここまでで、 DecisionTable の実行順を Decision で設定することができました。Excelファイルを保存し、次の手順に進みましょう。
実行に必要な定義を設定する¶
ルールの中心となる Decision 、 DecisionTable が完成しましたので、実行に必要なその他の定義を設定していきましょう。
Glossary に利用する項目を定義する¶
DecisionTable で使っている項目を確認しながら、 Glossary を定義していきましょう。
編集中のExcelファイルの「Definition」タブをクリックして「Definition」シートを表示してください。 このシートの Glossary を表示してください。( DecisionTable を作成した時と同様に、シート上のコメントは不要であれば削除してください。) Glossary を定義するためには、 DecisionTable で利用している項目を確認する必要があります。今回のハンズオンの DecisionTable で扱っている項目には、以下の5つがあります。
- 場所コード
- 出張区分コード
- 場所
- 出張区分
- 日当
このうち、画面(フォーム)から OpenRules に受け渡される項目(場所コード、出張区分コード)を「RequestObject」の項目として定義してください。 続いて、 OpenRules から画面(フォーム)に返却する項目を「ResponseObject」として定義してください。ResponseObjectに含まれる項目は数値型の「日当(dailyAllowance)」のみですが、このまま定義すると OpenRules の制約( Datatype の「技術的な制約事項」参照 )で正しく実行できません。そのため、ダミー項目を定義した後に、日当を定義してください。Glossary には、以下のように定義します。 DecisionTable で扱っている項目のうち、RequestObjectとResponseObjectのどちらにも属さない項目は内部項目のオブジェクト(Internal)として定義します。この時点で定義していない「場所区分」「出張区分」について、以下のように定義してください。
Glossary に基づいて Datatype と Data/Variable を定義する¶
同じ「Definition」シートのRequestObjectの Datatype と Data/Variable を以下のように定義してください。
Datatype RequestObject String areaClassCode String tripClassCode
Data RequestObject requestObj areaClassCode tripClassCode 場所コード 出張区分コード テスト場所 テスト出張区分 ResponseObjectの Datatype と Data/Variable を以下のように定義してください。
Datatype ResponseObject String dummy int dailyAllowance
Data ResponseObject responseObj dummy dailyAllowance ダミー 日当 ダミー内容 0 同様にInternalの Datatype と Data/Variable を定義するために、先に作成したRequestObjectの定義を以下の手順でコピーしてください。
- RequestObjectの Datatype と Data/Variable の範囲を選択してください。
- 右クリック後、「コピー」をクリックしてください。
- コピーしたテーブルから1セル以上行・列を空けたセルで右クリックし、「貼り付け」を選択してください。
コピーした定義を以下のように変更してください。
Datatype Internal String area String tripClass
Data Internal internal area tripClass 場所 出張区分 テスト場所 テスト出張区分 これで Datatype と Data/Variable が定義できましたので、一度保存します。
DecisionObject を定義してルールを完成させる¶
最後に DecisionObject を定義して、Excelのルール定義ファイルを完成させましょう。
「Main」タブをクリックして「Main」シートを表示してください。 「Main」シートで DecisionObject を設定していきます。RequestObject、ResponseObjectのオブジェクトについては、テンプレートと同じ設定となっているため、設定は不要です。RequestObject、ResponseObjectの下にInternalの設定用に1行追加してください。 追加した行には、以下のように設定してください。
DecisionObject decisionObjects Business Concept Business Object Internal := internal[0] コラム
このハンズオンのように、処理用のオブジェクト等を定義した場合には、 DecisionObject でインスタンス化の処理を設定することができます。
これで、 OpenRules で日当を計算するExcelのルール定義ファイルの設定が完了しましたので、ファイルを保存します。IM-BIS の画面(フォーム)と連携するための設定を行っていきましょう。