Red Hat Training
A Red Hat training course is available for Red Hat Decision Manager
ガイド付きデシジョンテーブルを使用したデシジョンサービスの作成
Red Hat Customer Content Services
brms-docs@redhat.com
概要
前書き
ビジネス分析者またはビジネスルールの開発者は、ガイド付きデシジョンテーブルを使用して、ウィザード手動のテーブル形式でビジネスルールを定義できます。このルールは Drools Rule Language (DRL) に組み込まれ、プロジェクトのデシジョンサービスの中心となります。
前提条件
ガイド付きデシジョンテーブルのチームおよびプロジェクトが Decision Central に作成されていて、各アセットが、チームに割り当てられたプロジェクトに関連付けられています。詳細は『デシジョンサービスの使用ガイド』 を参照してください。
第1章 Red Hat Decision Manager におけるルール作成アセット
Red Hat Decision Manager は、デシジョンサービスにビジネスルールを作成するのに使用するアセットを提供します。ルール作成アセットはそれぞれ長所が異なるため、ゴールおよびニーズに適したアセットを 1 つ、または複数を組み合わせて使用できます。
デシジョンサービスでルールを作成する最適な方法を選択できるように、以下の表で、Decision Central のルール作成アセットを紹介します。
表1.1 Decision Central におけるルール作成アセット
アセット | 主な特徴 | ドキュメンテーション |
---|---|---|
ガイド付きデシジョンテーブル |
| |
アップロードしたデシジョンテーブル |
| |
ガイド付きルール |
| |
ガイド付きルールテンプレート |
| |
DRL ルール |
|
第2章 ガイド付きデシジョンテーブル
ガイド付きデシジョンテーブルは、アップロードするデシジョンテーブルのスプレッドシートに代わる方法で、ウィザードを用いて表形式でビジネスルールを定義します。ガイド付きデシジョンテーブルでは、プロジェクトで指定したデータオブジェクトをもとに、Decision Central の UI ベースのウィザードに従ってルール属性、メタデータ、条件、およびアクションを定義します。ガイド付きデシジョンテーブルを作成すると、定義したルールは、その他のすべてのルールアセットとともに Drools Rule Language (DRL) ルールにコンパイルされます。
ガイド付きデシジョンテーブルに関連するすべてのデータオブジェクトは、ガイド付きデシジョンテーブルと同じプロジェクトパッケージに置く必要があります。同じパッケージに含まれるアセットはデフォルトでインポートされます。必要なデータオブジェクトとガイド付きデシジョンテーブルを作成したら、ガイド付きデシジョンテーブルデザイナーの Data Objects タブから、必要なデータオブジェクトがすべてリストされていることを検証したり、 新規アイテム を追加してその他の既存データオブジェクトをインポートしたりできます。
第3章 データオブジェクト
データオブジェクトは、作成するルールアセットの構成要素です。データオブジェクトは、プロジェクトで指定したパッケージに Java オブジェクトとして実装されているカスタムのデータタイプです。たとえば、データフィールド Name
、Address
、および Date of Birth
を使用して Person
オブジェクトを作成し、ローン申し込みルールに詳細な個人情報を指定できます。このカスタムのデータタイプは、アセットとデシジョンサービスがどのデータに基づいているかを指定します。
3.1. データオブジェクトの作成
定義するデータオブジェクトは、プロジェクトのルールアセットの構成要素を定義し、アセットとデシジョンサービスがどのデータに基づいているかを指定します。
手順
- Menu → Design → Projects に移動して、プロジェクト名をクリックします。
- Create New Asset → Data Object をクリックします。
一意の データオブジェクト 名を入力し、パッケージ を選択します。これにより、その他のルールアセットでもデータオブジェクトを利用できるようになります。同じパッケージに、同じ名前のデータオブジェクトを複数作成することはできません。指定するパッケージは、そのデータオブジェクトを必要とするルールアセットが割り当てられている、もしくはこれから割り当てるパッケージにする必要があります。
別のパッケージからのデータオブジェクトのインポートルールアセットのパッケージに、別のパッケージから既存のデータオブジェクトをインポートすることもできます。インポートするオブジェクトを選択するには、Project Explorer から (ガイド付きデシジョンテーブル、ガイド付きルールなどの) アセットパネルを展開し、特定のアセットを選択し、アセットデザイナーで Data Objects → New item に移動します。
- データオブジェクトを永続化するには、Persistable チェックボックスを選択します。永続型データオブジェクトは、JPA 仕様に準じてデータベースに保存できます。デフォルトの JPA は Hibernate です。
- OK をクリックします。
データオブジェクトデザイナーで add field をクリックして、Id 属性、Label 属性、Type 属性を使用するオブジェクトにフィールドを追加します。必須属性にはアスタリスク (*) マークが付いています。
- Id: フィールドの一意の ID を入力します。
- Label: (任意) フィールドのラベルを入力します。
- Type: フィールドのデータ型を入力します。
List: このチェックボックスを選択すると、このフィールドで、指定したタイプのアイテムを複数保持できるようになります。
図3.1 データオブジェクトへのデータフィールドの追加
Create をクリックして、新しいフィールドを追加します。Create and continue をクリックすると、新しいフィールドが追加され、別のフィールドを引き続き作成できます。
注記フィールドを編集するには、フィールド行を選択し、画面右側の general properties を使用します。
第4章 ガイド付きデシジョンテーブルの作成
ガイド付きデシジョンテーブルを使用して、ルール属性、メタデータ、条件、およびアクションを表形式で定義し、ビジネスルールプロジェクトに追加できます。
手順
- Menu → Design → Projects に移動して、プロジェクト名をクリックします。
- Create New Asset → Guided Decision Table をクリックします。
- ガイド付きデシジョンテーブル 名を入力し、適切な パッケージ を選択します。指定するパッケージは、必要なデータオブジェクトが割り当てられている、またはこれから割り当てるパッケージにする必要があります。
- Use Wizard を選択して、ウィザードでテーブルの設定を終わらせるか、このオプションは選択せずにテーブル作成を終わりにし、ガイド付きデシジョンテーブルデザイナーで残りの設定を行います。
- テーブルのルール行が準拠するヒットポリシーを選択します。詳細は「5章ガイド付きデシジョンテーブルのヒットポリシー」を参照してください。
- テーブルの形式を、拡張エントリ と 制限エントリ から選択します。詳細は「ガイド付きデシジョンテーブルの種類」を参照してください。
OK をクリックして設定を完了します。Use Wizard をクリックすると、ガイド付きデシジョンテーブルが表示されます。Use Wizard オプションを選択しないとこのプロンプトは表示されず、テーブルデザイナーが表示されます。
図4.1 ガイド付きデシジョンテーブルの作成
ウィザードを使用する場合は、利用可能なインポート、ファクトパターン、制約、およびアクションを追加して、テーブルの列を拡張するかどうかを選択します。Finish をクリックしてウィザードを閉じ、テーブルデザイナーを表示します。
図4.2 ガイド付きデシジョンテーブルのウィザード
ガイド付きデシジョンテーブルデザイナーで、列および行を追加または編集し、最終調整を行います。
列の追加については「6章ガイド付きデシジョンテーブルへの列の追加」を参照してください。
行の追加については「9章ガイド付きデシジョンテーブルで行の追加およびルールの定義」を参照してください。
第5章 ガイド付きデシジョンテーブルのヒットポリシー
ヒットポリシーは、ガイド付きデシジョンテーブルのルール (行) を適用する順番 (上から下、優先順位を指定した順など) を指定します。
次のヒットポリシーが利用できます。
- None: (デフォルトのヒットポリシー) 複数の行を実行できます。競合している行については検証により警告されます。(ガイド付きデシジョンテーブル以外のスプレッドシート使用して) アップロードされているデシジョンテーブルには、このヒットポリシーが適用されます。
- Resolved Hit: 指定されている優先順位に従って同時に実行できる行は 1 つだけです 。リストされている順序は無視されます (たとえば、行 10 の優先順位を行 5 よりも高くできます)。したがって、視覚的な分かりやすさを基準に行の順番を決め、それとは別に優先順位を指定することができます。
- Unique Hit: 同時に実行できる行は 1 つだけです。一致する条件は重複しないようにする必要があります。複数の行が実行すると、開発時に検証により警告が生成されます。
- First Hit: 同時に実行できる行は 1 つだけです。テーブルの順番に従って、上から下に実行します。
- Rule Order: 複数の行を実行できます。行の競合は期待されるため、報告されません。
図5.1 利用可能なヒットポリシー
5.1. ヒットポリシーの例: 映画観賞券の割引価格を定めるデシジョンテーブル
以下の表は、映画観賞券の割引価格を、顧客の年齢、学生かどうか、軍隊経験があるかどうかに基づいて定めるデシジョンテーブルです。
表5.1 映画観賞券で利用可能な割引価格を定めたデシジョンテーブル
行番号 | 割引の種類 | 割引価格 |
---|---|---|
1 |
高齢者 (60 歳以上) |
10% |
2 |
学生 |
10% |
3 |
軍隊経験 |
10% |
最終的に適用される割引合計は、以下のように、テーブルに指定したヒットポリシーによって変わります。
None/Rule Order: ヒットポリシー None および Rule Order では、適用可能なルールがすべて組み込まれ、それぞれの顧客に適用される割引が積み重ねられます。
例: 現在学生で、軍隊経験がある高齢者には、3 つの割引がすべて適用され、合計 30% の割引になります。
重要な相違点: None では、複数の行が適用されると警告が作成されます。Rule Order では、この警告が作成されません。
First Hit/Resolved Hit: ヒットポリシー First Hit および Resolved Hit ポリシーでは、割引の中から 1 つだけが適用されます。
First Hit の場合は、リストの中で最初に満たされた割引が適用され、その他の割引は適用されません。
例: 現在学生で、軍隊経験がある高齢者には、テーブルに最初にリストされている高齢者割引 10% だけが適用されます。
Resolved Hit の場合は、テーブルの修正が必要になります。テーブルで優先順位の例外を割り当てた割引が、リストされた順番にかかわらず最初に適用されます。この例外を割り当てるには、割引 (行) の優先順位を指定する新しい列を追加します。
例: 軍隊経験者向けの割引の優先順位が、高齢者向けまたは学生向けの割引よりも高く設定されている場合、現在学生で、軍隊経験がある高齢者には、軍隊経験者の割引 10% が適用されます。ここでは、高齢者もしくは学生であるかどうかは関係ありません。
Resolved Hit ポリシーを適用して修正したデシジョンテーブルをご覧ください。
表5.2 Resolved Hit ポリシーを適用して修正したデシジョンテーブル
行番号 割引の種類 優先する行 割引価格 1
高齢者 (60 歳以上)
10%
2
学生
10%
3
軍隊経験
1
10%
この修正したテーブルでは、軍人経験者向けの割引が事実上の行 1 になるため、高齢者向けと学生向けの割引よりも優先され、その後でその他の割引が追加されます。優先順位は、行 1 に対する優先だけを指定する必要があり、「行 1 および行 2」の両方に指定する必要はありません。この変更により、行のヒット順は、3 → 1 → 2 となり、さらに行が増えた場合はこの後に続きます。
注記ここで変更した行の順番は、軍隊経験者向けの割引を行 1 に移動して First Hit ポリシーをテーブルに適用した場合と同じになります。ただし、ルールを特定の順番で並べ (アルファベット順)、ルールの適用順を変更したい場合は、Resolved Hit ポリシーが便利です。
重要な相違点: First Hit を使用すると、ルールの適用順はリストした順番に固定されます。Resolved Hit を使用すると、指定された優先順位の例外を除いて、リストされた順にルールが適用されます。
Unique Hit: テーブルの修正が必要になります。Unique Hit ポリシーを使用する場合は、一度に複数の行を適用できないように行を作成する必要があります。ただし、ルールを 1 つまたは複数適用するかどうかは、行ごとに指定できます。この方法では、Unique Hit ポリシーを使用した場合に重複の警告が表示されないように、デシジョンテーブルの粒度をより細かくできます。
Unique Hit ポリシーを適用して修正したデシジョンテーブルをご覧ください。
表5.3 Unique Hit ポリシーを適用して修正デシジョンテーブル
行番号 高齢者 (65 歳以上) 学生 軍隊経験 割引価格 1
はい
いいえ
いいえ
10%
2
いいえ
はい
いいえ
10%
3
いいえ
いいえ
はい
10%
4
はい
はい
いいえ
20%
5
はい
いいえ
はい
20%
6
いいえ
はい
はい
20%
7
はい
はい
はい
30%
この修正したテーブルでは、各行が一意で、重複はできず、1 つまたは複数の割引が適用されます。
5.1.1. ガイド付きデシジョンテーブルの種類
Red Hat Decision Manager では、拡張エントリーテーブルと制限エントリーテーブルの 2 種類のデシジョンテーブルに対応します。
- 拡張エントリー: 拡張エントリーのデシジョンテーブルの列定義には、パターン、フィールド、演算子を指定します。値は指定しません。値またはステート (state) は、デシジョンテーブルの本体に保持されます。
- 制限エントリー: 制限エントリーのデシジョンテーブルの列定義には、パターン、フィールド、演算子に加えて、値を指定します。デシジョンテーブルの本体には、デシジョンテーブルのステート (state) をブール値で指定します。正の値 (チェックボックスを選択した場合) はその列が適用され、負の値 (チェックボックスを選択しない場合) はその列が適用されないことを示しています。
第6章 ガイド付きデシジョンテーブルへの列の追加
ガイド付きデシジョンテーブルを作成したら、デシジョンテーブルデザイナーで、さまざまなタイプの列を定義して追加できます。
前提条件
ファクトやフィールドなど、列パラメーターに使用されるデータオブジェクトが、ガイド付きデシジョンテーブルと同じパッケージに作成されています。もしくは、ガイド付きデシジョンテーブルデバイザーの Data Objects → New item で、別のパッケージからインポートされています。
この列パラメーターの説明は「7章ガイド付きデシジョンテーブルの列の種類」の「必須の列パラメーター」を参照してください。
データオブジェクトの作成は 「データオブジェクトの作成」 を参照してください。
手順
- ガイド付きデシジョンテーブルで、Columns → Insert Column をクリックします。
Include advanced options をクリックして、列の全オプションを表示します。
図6.1 列の追加
追加する列の種類を選択して Next をクリックし、ウィザードの手順に従って、列を追加するのに必要なデータを指定します。
列の各種類と、設定に必要なパラメーターは「7章ガイド付きデシジョンテーブルの列の種類」を参照してください。
- Finish をクリックして、設定した列を追加します。
列を追加したら、関連するルール行を列に追加し、デシジョンテーブルを完了します。詳細は「9章ガイド付きデシジョンテーブルで行の追加およびルールの定義」を参照します。
図6.2 完成したガイド付きデシジョンテーブルの例
第7章 ガイド付きデシジョンテーブルの列の種類
ガイド付きデシジョンテーブルの Add a new column ウィザードは、次の列オプションを提供します (Include advanced options を選択して、すべてのオプションを表示します)。
- Add a Condition (条件の追加)
- Add a Condition BRL fragment (条件 BRL フラグメントの追加)
- Add a Metadata column (メタデータ列の追加)
- Add an Action BRL fragment (アクション BRL フラグメントの追加)
- Add an Attribute column (属性列の追加)
- Delete an existing fact (既存ファクトの削除)
- Execute a Work Item (作業アイテムの実行)
- Set the value of a field (フィールド値の設定)
- Set the value of a field with a Work Item result (作業アイテムの結果でフィールド値の設定)
Add a new column ウィザードで必要な列タイプとパラメーターは、以下のセクションで説明します。
ファクトパターン、フィールドなど、このセクションで説明するいくつかの列パラメーターは、ガイド付きデシジョンテーブルと同じパッケージにすでに定義されているデータオブジェクトだけで構成されるドロップダウンオプションを提供します。パッケージで利用可能なデータオブジェクトは、Project Explorer の Data Objects パネル、およびガイド付きデシジョンテーブルデザイナーの Data Objects タブに一覧表示されます。必要に応じてパッケージにデータオブジェクトを追加したり、ガイド付きデシジョンテーブルデザイナーの Data Objects → New item で、別のパッケージからインポートしたりできます。データオブジェクトの作成の詳細は 「データオブジェクトの作成」 を参照してください。
7.1. "Add a Condition (条件の追加)"
条件はファクトパターンを表し、ルールの左側 (「WHEN」) に定義されます。この列オプションで、特定のフィールド値を使用して、データオブジェクトが存在するかどうかを確認し、ルールのアクション (「THEN」) 部分に影響を及ぼす条件列を 1 つ以上定義します。条件テーブルでファクトにバインディングを定義したり、以前定義したものを選択できます。パターンを無効にすることもできます。
例:
when $i : IncomeSource( type == "Asset" ) //Binds the IncomeSource object to the $i variable then ... end
when not IncomeSource( type == "Asset" ) //Negates matching pattern then ... end
バインディングを指定したら、フィールド制約を定義できます。同じファクトパターンのバインディングを使用して列を 2 つ以上定義すると、フィールド制約は、同じパターンに定義された複合フィールド制約になります。1 つのモデルクラスに複数のバインディングを定義すると、それぞれのバインディングは、そのルールの条件 (「WHEN」) で異なるモデルクラスになります。
必須の列パラメーター
この列タイプを設定するには、Add a new column ウィザードに以下のパラメーターが必要です。
-
Pattern: テーブルの条件に使用しているファクトパターンのリストから選択するか、新しいファクトパターンを作成します。ファクトパターンは、パッケージで利用可能なデータオブジェクト (詳細は「必要なデータオブジェクト」の注記を参照) と、指定するモデルクラスバインディングの組み合わせとなります (例:
LoanApplication [application]
またはIncomeSource [income]
。括弧内は、指定したファクトタイプへのバインディング)。 -
Entry point: 可能な場合は、ファクトパターンのエントリーポイントを定義します。エントリーポイントは、指定するとファクトが Red Hat Decision Manager ルールエンジンに組み込まれるゲートまたはストリームです (例:
Application Stream
、Credit Check Stream
)。 Calculation type: 以下の計算タイプの中から 1 つ選択します。
- Literal value: 演算子を使用して、セルの値とフィールドを比較します。
- Formula: セルの表現を評価して、フィールドと比較します。
-
Predicate: フィールドは必要ありません。表現を
true
またはfalse
で評価します。
-
Field: 以前指定したファクトパターンからフィールドを選択します。フィールドオプションは、プロジェクトの Data Objects パネルのファクトファイルに定義されます (例:
LoanApplication
ファクトタイプのamount
フィールドまたはlengthYears
フィールド) -
Binding (任意): 必要に応じて、以前選択したフィールドにバインディングを定義します (例:
LoanApplication [application]
パターン、amount
フィールド、およびequal to
演算子に、バインディング$amount
を設定すると、終了条件はapplication : LoanAppplication($amount : amount == [value])
になります)。 - Operator: 事前に指定したファクトパターンおよびフィールドに適用する演算子を選択します。
-
Value list (任意): コンマおよび空白文字で区切った値オプションのリストを入力して、ルールの条件 (「WHEN」) 部分のテーブル入力データを制限します。この値リストを定義すると、値は、その列のテーブルセルにドロップダウンリストとして提供され、ユーザーは、そこからオプションを 1 つだけ選択できます (リスト例:
Monday、Wednesday、Friday
の 3 つだけを指定可能)。 - Default value (任意): 事前定義した値オプションのいずれかを、新しい列のセルに自動的に表示するデフォルト値として選択します。デフォルト値が指定されていないと、テーブルのセルはデフォルトでは空欄となります。また、Project Explorer の Enumeration Definitions パネルにリストした、プロジェクトに事前に設定したデータの列挙からデフォルト値を選択できます (列挙は、Menu → Design → Projects → [select project] → Create New Asset → Enumeration から作成できます)。
- Header (説明): 列にヘッダーテキストを追加します。
- Hide column: 選択すると列が非表示になり、選択を解除すると列が表示されます。
7.1.1. 条件列セルに any other
値を追加
ガイド付きデシジョンテーブルにおける単純な条件列では、以下のパラメーターを設定した場合に、列のテーブルセルに any other
値を適用できます。
-
条件列の Calculation type を
Literal value
に設定している。 -
Operator を、等価演算子
==
または非等価演算子!=
に設定している。
any other
値は、テーブルにすでに定義されているルールに明示的に定義している値以外を設定できるルールを有効にします。
例:
when IncomeSource( type not in ("Asset", "Job") ) ... then ... end
手順
-
==
演算子または!=
演算子を使用する条件列のセルを選択します。 - テーブルデザイナーの右上のツールバーで、Edit → Insert "any other" value をクリックします。
7.2. "Add a Condition BRL fragment (条件 BRL フラグメントの追加)"
BRL (Business Rule Language) フラグメントは、ガイド付きルールデザイナーを使用して作成したセクションです。条件 BRL フラグメントはルールの 「WHEN」部分で、action BRL fragment (アクション BRL フラグメント) はルールの「THEN」の部分です。この列オプションを使用して、ルールの左側 (WHEN) 部分で使用する条件 BRL フラグメントを定義できます。単純な列タイプは、BRL フラグメントでバインドされているファクトおよびファクトフィールドを参照でき、これらのファクトおよびファクトのフィールドから列タイプへの参照も可能です。
ローン申し込みの条件 BRL フラグメントの例:
図7.1 組み込みガイド付きルールデザイナーを使用する条件 BRL フラグメントの追加
条件オプションのリストから Free form DRL を選択して、組み込みガイド付きルールデザイナーを使用せずに条件 BRL フラグメントを定義します。
図7.2 Free form DRL を使用する条件 BRL フラグメントの追加
条件 BRL フラグメントにフィールドを追加すると、値オプションの 1 つが (Literal または Formula ではなく) テンプレートキー になります。テンプレートキーはプレースホルダー変数で、ガイド付きデシジョンテーブルを作成し、別の列に各テンプレートキー値を指定すると、指定した値に入れ替えられます。テンプレートキーの値は必要に応じて修正できます。
組み込みのガイド付きルールデザイナーでは、Template key フィールドオプションを選択し、エディターに $key
書式で値を入力し、テンプレートのキー値をフィールドに追加できます。たとえば、$age
は、デシジョンテーブルに $age
列を作成します。
Free form DRL では、@{key}
の書式でテンプレートのキー値をファクトに追加できます。たとえば、Person( age > @{age} )
にすると、デシジョンテーブルに $age
列が作成されます。
テンプレートキーを使用して追加した新しい列のデータ型は String です。
必須の列パラメーター
この列タイプを設定するには、Add a new column ウィザードに以下のパラメーターが必要です。
- Rule Modeller: ルールの条件 BRL フラグメント ("WHEN" 部分) を定義します。
- Header (説明): 列にヘッダーテキストを追加します。
- Hide column: 選択すると列が非表示になり、選択を解除すると列が表示されます。
7.3. "Add a Metadata column (メタデータ列の追加)"
この列オプションを使用して、デシジョンテーブルでメタデータを列として定義できます。各列には、DRL ルールの通常のメタデータアノテーションが表示されます。デフォルトでは、メタデータ列は非表示になっています。列を表示するには、デシジョンテーブルデザイナーで Edit Columns をクリックし、Hide column チェックボックスの選択を解除します。
必須の列パラメーター
この列タイプを設定する Add a new column ウィザードには、以下のパラメーターが必要です。
- Metadata: Java 変数書式のメタデータ項目の名前を入力します (つまり、空白文字または特殊文字を使用することはできません)。
7.4. "Add an Action BRL fragment (アクション BRL フラグメントの追加)"
BRL (Business Rule Language) フラグメントは、ガイド付きルールデザイナーを使用して作成したルールのセクションです。条件 BRL フラグメント はルールの「WHEN」部分で、アクション BRL フラグメントはルールの「THEN」部分です。この列オプションを使用すると、ルールの右側 (THEN) で使用するアクション BRL フラグメントを定義できます。BRL フラグメントでバインドされているファクトおよびファクトのフィールドは簡単な列タイプで参照でき、これらのファクトおよびファクトのフィールドから列タイプの参照も可能です。
ローン申し込みのアクション BRL フラグメントの例:
図7.3 組み込みガイド付きルールデザイナーを使用するアクション BRL フラグメントの追加
アクションオプションのリストから Add free form DRL を選択して、組み込みガイド付きルールデザイナーを使用しないアクション BRL フラグメントを定義します。
図7.4 Free form DRL を使用するアクション BRL フラグメントの追加
アクション BRL フラグメントにフィールドを追加すると、値オプションの 1 つが (Literal または Formula ではなく) テンプレートキー となります。テンプレートキーはプレースホルダー変数で、ガイド付きデシジョンテーブルを作成し、別の列に各テンプレートのキー値を指定すると、指定した値に入れ替えられます。デシジョンテーブルでは Literal 値および Formula 値は静的ですが、必要に応じてテンプレート値を修正できます。
組み込みのガイド付きルールデザイナーでは、Template key フィールドオプションを選択し、エディターに $key
書式で値を入力し、テンプレートのキー値をフィールドに追加できます。たとえば、$age
は、デシジョンテーブルに $age
列を作成します。
Free form DRL では、@{key}
の書式でテンプレートのキー値をファクトに追加できます。たとえば、Person( age > @{age} )
にすると、デシジョンテーブルに $age
列が作成されます。
テンプレートキーを使用して追加した新しい列のデータ型は String です。
必須の列パラメーター
この列タイプを設定するには、Add a new column ウィザードに以下のパラメーターが必要です。
- Rule Modeller: ルールのアクション BRL フラグメントの定義 (「THEN」部分)
- Header (説明): 列にヘッダーテキストを追加します。
- Hide column: 選択すると列が非表示になり、選択を解除すると列が表示されます。
7.5. "Add an Attribute column (属性列の追加)"
この列オプションを使用して、Saliance、Enabled、Date-Effective などの DRL ルール属性を表現する属性列を 1 つ以上追加できます。
例:
rule "Rule1" salience 100 // This rule has the highest priority when $i : IncomeSource( type == "Asset" ) then ... end
各属性の説明について、ウィザードのリストから属性を選択します。
デシジョンテーブルに定義したヒットポリシーに応じて、ヒットポリシーが内部的に使用されているため、一部の属性を無効にできます。たとえば、Resolved Hit ポリシーをこのテーブルに割り当てて、テーブルに指定した優先順位に従って行 (ルール) を適用すると、Salience 属性が使用されなくなります。Salience 属性は、定義した salience (優先順位) 値に従って、ルールの優先順位をエスカレーションし、値は、テーブルの Resolved Hit ポリシーによって上書きされるためです。
必須の列パラメーター
この列タイプを設定する Add a new column ウィザードには、以下のパラメーターが必要です。
- 属性: 列に適用する属性を選択します。
7.6. "Delete an existing fact (既存ファクトの削除)"
この列のオプションを使用して、ファクトパターンとしてテーブルに以前追加したファクトを削除するアクションを実装できます。この列を作成すると、ファクトタイプは、その列のテーブルセルにドロップダウンリストとして提供され、ユーザーは、そこからオプションを 1 つだけ選択できます。
必須の列パラメーター
この列タイプを設定するには、Add a new column ウィザードに以下のパラメーターが必要です。
- Header (説明): 列にヘッダーテキストを追加します。
- Hide column: 選択すると列が非表示になり、選択を解除すると列が表示されます。
7.7. "Execute a Work Item (作業アイテムの実行)"
この列オプションを使用して、Decision Central に以前作成した作業アイテム定義に基づいて、作業アイテムハンドラーを実行できます (作業アイテムは、Menu → Design → Projects → [select project] → Create New Asset → Work Item definition で作成できます)。
必須の列パラメーター
この列タイプを設定するには、Add a new column ウィザードに以下のパラメーターが必要です。
- Work Item: 事前設定した作業アイテムのリストから選択します。
- Header (説明): 列にヘッダーテキストを追加します。
- Hide column: 選択すると列が非表示になり、選択を解除すると列が表示されます。
7.8. "Set the value of a field (フィールド値の設定)"
この列オプションを使用して、ルールの「THEN」部分に事前にバインドしたファクトにフィールドの値を設定するアクションを実装できます。その他のルールを再度アクティブにするように修正した値をルールエンジンに通知するオプションがあります。
必須の列パラメーター
この列タイプを設定するには、Add a new column ウィザードに以下のパラメーターが必要です。
-
Pattern: テーブルの条件または条件 BRL フラグメントに使用しているファクトパターンのリストから選択するか、新しいファクトパターンを作成します。ファクトパターンは、パッケージで利用可能なデータオブジェクト (詳細は「必要なデータオブジェクト」の注記を参照) と、指定するモデルクラスバインディングの組み合わせとなります (例:
LoanApplication [application]
またはIncomeSource [income]
。括弧内は、指定したファクトタイプへのバインディング)。 -
Field: 以前指定したファクトパターンからフィールドを選択します。フィールドオプションは、プロジェクトの Data Objects パネルのファクトファイルに定義されます (例:
LoanApplication
ファクトタイプのamount
フィールドまたはlengthYears
フィールド) -
Value list (任意): 値オプションをコンマおよび空白文字で区切ったリストを入力して、ルールのアクション (「THEN」) 部分に対するテーブルの入力データを制限します。この値リストを定義すると、値は、その列のテーブルセルにドロップダウンリストとして提供され、ユーザーは、そこからオプションを 1 つだけ選択できます (リスト例:
Accepted, Declined, Pending
)。 - Default value (任意): 事前定義した値オプションのいずれかを、新しい列のセルに自動的に表示するデフォルト値として選択します。デフォルト値が指定されていないと、テーブルのセルはデフォルトでは空欄となります。また、Project Explorer の Enumeration Definitions パネルにリストした、プロジェクトに事前に設定したデータの列挙からデフォルト値を選択できます (列挙は、Menu → Design → Projects → [select project] → Create New Asset → Enumeration から作成できます)。
- Header (説明): 列にヘッダーテキストを追加します。
- Hide column: 選択すると列が非表示になり、選択を解除すると列が表示されます。
- Logically insert (論理的な挿入): このオプションは、選択したファクトパターンが、ガイド付きデシジョンテーブルの別の列に現在使用されていない場合に表示されます (次のフィールドの説明を参照)。ファクトパターンをデシジョンエンジンに論理的に挿入する場合はこれを選択し、定期的に挿入する場合は選択を解除します。Red Hat Decision Manager のデシジョンエンジンは、ファクトの挿入および取り消しに対して論理的な決断を行います。定期的な挿入、または指定した挿入の後に、ファクトを明示的に取り消す必要があります。論理挿入の後に、ファクトをアサートした条件が TRUE ではなくなると、ファクトは自動的に取り消されます。
- Update engine with changes (変更でエンジンをアップデート): このオプションは、選択したファクトパターンが、ガイド付きデシジョンテーブに使用されている場合に表示されます。修正したフィールド値を使用してルールエンジンをアップデートする場合はこれを選択し、ルールエンジンをアップデートしない場合は選択を解除します。
7.9. "Set the value of a field with a Work Item result (作業アイテム結果でフィールド値の設定)"
この列オプションを使用して、ルールの「THEN」部分の作業アイテムハンドラーの結果値に、事前定義したファクトフィールドの値を設定するアクションを実行できます。作業アイテムは、return パラメーターにフィールドを設定するために、バインドしたファクトのフィールドと同じデータ型の結果パラメーターを設定する必要があります (作業アイテムは Menu → Design → Projects → [select project] → Create New Asset → Work Item definition に作成できます)。
Execute a Work Item (作業アイテムの実行) 列は、この列オプションを作成するために、テーブルにすでに作られている必要があります。
必須の列パラメーター
この列タイプを設定するには、Add a new column ウィザードに以下のパラメーターが必要です。
-
Pattern: テーブルに使用しているファクトパターンのリストから選択するか、新しいファクトパターンを作成します。ファクトパターンは、パッケージで利用可能なデータオブジェクト (詳細は「必要なデータオブジェクト」の注記を参照) と、指定するモデルクラスバインディングの組み合わせとなります (例:
LoanApplication [application]
またはIncomeSource [income]
。括弧内は、指定したファクトタイプへのバインディング)。 -
Field: 以前指定したファクトパターンからフィールドを選択します。フィールドオプションは、プロジェクトの Data Objects パネルのファクトファイルに定義されます (例:
LoanApplication
ファクトタイプのamount
フィールドまたはlengthYears
フィールド) - Work Item: 事前定義した作業アイテムのリストから選択します (作業アイテムは、return パラメーターにフィールドを設定するために、バインドしたファクトにフィールドと同じデータ型の result パラメーターを設定する必要があります)。
- Header (説明): 列にヘッダーテキストを追加します。
- Hide column: 選択すると列が非表示になり、選択を解除すると列が表示されます。
- Logically insert (論理的な挿入): このオプションは、選択したファクトパターンが、ガイド付きデシジョンテーブルの別の列に現在使用されていない場合に表示されます (次のフィールドの説明を参照)。ファクトパターンをデシジョンエンジンに論理的に挿入する場合はこれを選択し、定期的に挿入する場合は選択を解除します。Red Hat Decision Manager のデシジョンエンジンは、ファクトの挿入および取り消しに対して論理的な決断を行います。定期的な挿入、または指定した挿入の後に、ファクトを明示的に取り消す必要があります。論理挿入の後に、ファクトをアサートした条件が TRUE ではなくなると、ファクトは自動的に取り消されます。
- Update engine with changes (変更でエンジンをアップデート): このオプションは、選択したファクトパターンが、ガイド付きデシジョンテーブに使用されている場合に表示されます。修正したフィールド値を使用してルールエンジンをアップデートする場合はこれを選択し、ルールエンジンをアップデートしない場合は選択を解除します。
第8章 ガイド付きデシジョンテーブルで列の編集または削除
ガイド付きデシジョンテーブルデザイナーに作成した列は、いつでも編集または削除できます。
手順
- ガイド付きデシジョンテーブルで、Columns をクリックします。
適切なセクションを展開し、列名の隣にある Edit または Delete をクリックします。
図8.1 列の編集または削除
注記既存のアクション列が、条件列と同じパターン一致パラメーターを使用している場合は、条件列を削除できません。
- 列を変更したら、ウィザードの Finish をクリックして保存します。
第9章 ガイド付きデシジョンテーブルで行の追加およびルールの定義
ガイド付きデシジョンテーブルで列を作成したら、デシジョンテーブルデザイナーに行を追加してルールを定義します。
前提条件
「6章ガイド付きデシジョンテーブルへの列の追加」の手順に従って、ガイド付きデシジョンテーブルの列が追加されています。
手順
ガイド付きデシジョンテーブルデザイナーで、Insert → Append row、またはいずれかの Insert row オプションをクリックします (もしくは、Insert column をクリックして列ウィザードを開いて、新しい列を定義することもできます)。
図9.1 行の追加
各セルをダブルクリックしてデータを入力します。入力する値が決まっている場合は、セルのドロップダウンオプションから選択します。
図9.2 各セルに入力データの入力
ガイド付きデシジョンテーブルですべてのデータ行を定義したら、ガイド付きデシジョンテーブルデザイナーの右上のツールバーで Validate をクリックして、テーブルの妥当性を確認します。テーブルの妥当性確認に失敗したら、エラーメッセージに記載された問題に対応し、テーブルの全コンポーネントを見直し、エラーが表示されなくなるまでテーブルの妥当性確認を行います。
注記ガイド付きデシジョンテーブルには、リアルタイム検証および妥当性確認がありますが、最善の結果を確実に得るために、完了したデシジョンテーブルの妥当性確認を手動で行うことができます。
- テーブルデザイナーで Save をクリックして、変更を保存します。
第10章 ガイド付きデシジョンテーブルのリアルタイム検証および妥当性確認
Decision Central は、ガイド付きデシジョンテーブルにリアルタイム検証および妥当性確認を提供し、テーブルのエラーがなくなったことを確認します。ガイド付きデシジョンテーブルは、各セルが変更するたびに妥当性が確認されます。ロジックに問題が検出されたら、エラー通知が表示され、問題を確認できます。
10.1. ガイド付きデシジョンテーブルの問題の種類
検証および妥当性確認の機能は、以下のタイプの問題を検出します。
- 冗長性 (Redundancy)
- 冗長性は、デシジョンテーブルの 2 つの行で、同じファクトセットの同じ結果を実行する際に生じます。たとえば、顧客の誕生日をチェックして誕生日割引を提供する行が 2 つあると、割引は 2 倍になる可能性があります。
- 包含 (Subsumption)
包含は冗長と似ていますが、2 つルールが同じ結果を実行し、1 つのルールがもう 1 つのルールのファクトのサブセットに対して実行する場合に生じます。たとえば、以下の 2 つのルールを見てみましょう。
- when Person age > 10 then Increase Counter
- when Person age > 20 then Increase Counter
この場合、対象者の年齢が 15 歳の場合はルールが 1 つだけ実行しますが、対象者の年齢が 20 歳を超えてる場合は 2 つのルールが実行します。これにより、実行時に冗長性の場合と同様の問題が生じます。
- 競合 (Conflict)
デシジョンテーブルの 2 つの行 (ルール) または 2 つのセルの条件が類似し、異なる結果が設定されている場合は、競合が発生する場合があります。
以下の例は、デシジョンテーブルの 2 つの行で競合が発生しているのを示しています。
- when Deposit > 20000 then Approve Loan
- when Deposit > 20000 then Refuse Loan
この場合、ローンが承認されるかどうかについて確認することはできません。
以下の例は、デシジョンテーブルの 2 つのセル間の競合を示します。
- when Age > 25
- when Age < 25
競合セルを持つ行は実行しません。
- Unique Hit ポリシーの違反 (Broken Unique Hit Policy)
Unique Hit ポリシーをデシジョンテーブルに適用する際は、同時に 1 行しか実行できず、各列は一意であり、満たした条件が重複しないようにする必要があります。複数の行が実行した場合は、検証レポートが、違反したヒットポリシーを特定します。たとえば、価格の割引資格を決定するテーブルで、以下の条件を見てみましょう。
- when Is Student = true
- when Is Military = true
顧客が学生であり、軍隊に所属している場合は、両方の条件が適用され、Unique Hit ポリシーに違反します。したがって、この種のテーブルの行は、複数の行が同時に発生しないように作成する必要があります、ヒットポリシーについては「5章ガイド付きデシジョンテーブルのヒットポリシー」を参照してください。
- 欠陥
欠陥は競合と似ていますが、デシジョンテーブルのルールのロジックが未完成の場合に生じます。たとえば、欠陥がある以下の 2 つのルールを見てみましょう。
- when Age > 20 then Approve Loan
- when Deposit < 20000 then Refuse Loan
この 2 つのルールは、20 歳を超え、預金が 20000 より少ない場合に混乱が発生する場合があります。さらに制約を追加すると、競合を避けることができます。
- 列の欠落 (Missing Column)
- 列を削除したため、不完全または不正確なロジックが発生した場合は、ルールが正しく発生しません。これを検出し、不足している列に対処したり、ロジックを調整して、意図的に削除した条件またはアクションに依存しないようにすることができます。
- 不完全な範囲 (Incomplete Ranges)
- 可能なフィールド値に対する制約がテーブルに追加されているにもかかわらず、可能な値がすべて定義されていない場合は、フィールド値の範囲が不完全です。検証レポートは、提供された不完全な範囲を特定します。たとえば、アプリケーションが承認されたかどうかをテーブルが確認した場合は、検証レポートにより、アプリケーションが承認されていない状況も処理できるようになります。
10.2. 通知の種類
検証および妥当性確認の機能では、3 種類の通知を使用します。
- Error: ガイド付きデシジョンテーブルが、実行時に設計された通りに機能しなくなるような重大な問題があることを意味します。たとえば、競合はエラーとしてレポートされます。
- Warning: おそらく、ガイド付きデシジョンテーブルが動作しなくなるような重要な問題ではありませんが、注意が必要な重要な問題があることを示します。たとえば、包含は警告として報告されます。
- Information: ガイド付きデシジョンテーブルの動作が止まることはないかもしれませんが、注意が必要です。たとえば、列が不明な場合は、情報として報告されます。
Decision Central の検証および妥当性確認により、間違った変更が保存されなくなります。これは、編集中の問題を報告するための機能であるため、間違いに対処せずに変更を保存することもできます。
10.3. ガイド付きデシジョンテーブルの検証および妥当性確認の無効化
Decision Central のデシジョンテーブルの検証および妥当性確認機能は、デフォルトで有効になっています。Red Hat JBoss EAP ディレクトリーで、org.kie.verification.disable-dtable-realtime-verification
システムプロパティー値を true
に設定すると無効にできます。
手順
端末アプリケーションで $EAP_HOME
ディレクトリーに移動し、次のコマンドを実行します。
./standalone.sh -Dorg.kie.verification.disable-dtable-realtime-verification=true
代わりに、以下を Red Hat JBoss EAP の standalone.xml
ファイルに追加します。
<property name="org.kie.verification.disable-dtable-realtime-verification" value="true"/>
第11章 次のステップ
付録A バージョン情報
Documentation last updated on: Monday, October 1, 2018.