第7章 ルールの記述


7.1. ルールの作成

手順: 新規ルールの作成

  1. Project Explorer ビューで、以下を実行します。

    1. Project Explorer の Project ビューにいる場合、組織単位、リポジトリーおよびルールを作成する必要のあるプロジェクトを選択します。
    2. Project Explorer の Repository ビューにいる場合、src/main/resources/ とルールテンプレートのプロジェクトフォルダーを作成する必要のある SUBFOLDER/PACKAGE に移動します。
  2. パースペクティブメニューで、New Item Guided Rule に移動します。
  3. Create new Guided Rule ダイアログウィンドウで、パッケージの詳細を定義します。

    • Guided Rule テキストボックスで、ルールの名前を入力し、OK をクリックします。DSL を使用するには Use Domain Specific Language (DSL) にチェックを付けます。詳細は、「ドメイン固有言語エディター」 を参照してください。
  4. 新規のガイド付きルールが選択されたプロジェクトの下に作成されます。

7.2. ルールの編集

7.2.1. アセットエディターを使用したルールの編集

アセットエディターはアセットに関する情報へのアクセスを提供し、ユーザーはこのエディターを使ってアセットを編集することができます。

エディターには、EditorOverviewSource、および Data Objects タブが含まれます。

Editor タブ

Editor タブを使ってアセットを編集することができます。Edit タブで利用可能なオプションは、編集中のアセットによって異なります。

図7.1 ガイド付きデシジョンテーブル - Editor タブ

A screen shot of the asset editor - edit tab

Overview タブ

Overview 画面には、アセットの汎用データおよびバージョン履歴が表示されます。この画面から、ユーザーは他のメタデータの詳細を編集したり、選択したアセットに固有の説明およびディスカッションを追加したりできます。

図7.2 ガイド付きデシジョンテーブル - Overview タブ

A screen shot of the asset editor - Overview tab

Source タブ

Source タブには、選択したアセットの DRL ソースが表示されます。

図7.3 ガイド付きデシジョンテーブル - Source タブ

A screen shot of the asset editor - source tab

Data Objects タブ

Data Objects タブでは、プロジェクトで使用されるインポートのセットが提案されます。それぞれのアセットには独自のインポートと、ユーザーが使用する必要がある可能性のある提案されるファクトタイプ (つまりデータオブジェクト) が含まれます。データオブジェクトについての詳細は、「データオブジェクトの作成」 を参照してください。

図7.4 ガイド付きデシジョンテーブル - Data Objects タブ

A screen shot of the asset editor - config tab

7.2.2. ガイド付きルールエディターでのビジネスルール

ビジネスルールはガイド付きルールエディターで編集します。ガイド付きルールエディターは、編集中のルールのオブジェクトモデルに基づいてユーザーに入力を求めるプロンプトを出します。

別のパッケージに属するルールで使用されるアセットはルールにインポートする必要があります。同じパッケージのアセットはデフォルトでインポートされます。Data Objects タブでインポートを定義します。

例7.1 ガイド付きルールエディター

A screen shot of the guided editor

ガイド付きルールエディターは、WhenThen の部分で構成されます。Then の部分には、(show options…​) リンクがあり、ここから ruleflow-group、salience などの追加のルール属性を設定できます。ガイド付きルールエディターについての詳細は、「ガイド付きルールテンプレート」 を参照してください。

図7.5 ルール属性

Guided Editor Rule Attributes

7.2.3. Package White List (パッケージホワイトリスト) の使用によるファクトの絞り込み

ルールの作成および変更時に、package-names-white-list というファイルを使用して利用可能なファクトを絞り込むことができます。このファイルを使用すると、読み込み済みで表示されるファクトのグループを絞り込むことができます。これは、新規ルールの作成中にこれらのファクトの読み込みを加速させるのに役立ちます。

ルートディレクトリーに新規プロジェクトを作成すると、空の package-names-white-list ファイルが pom.xml および project.imports プロジェクトファイルと共に自動作成されます。既存プロジェクトについては、package-names-white-list ファイルを手動で作成します。Business Central では、Project Explorer のプロジェクトのリポジトリービューでファイルを表示できます。

デフォルト (ファイルが空の状態) で、プロジェクトの依存関係からのファクトは制限される一方で、プロジェクト自体にあるすべてのファクトは表示されます。

パッケージを定義するためのルール

package-names-white-list ファイルは、各行に単一のパッケージ名を受け入れるテキストファイルです。パッケージには、ワイルドカードなどが含まれる場合があります。

  • com.redhat.finance: com.redhat.finance パッケージからのみ ファクトを受け入れます。そのため、com.redhat.finance.Personcom.redhat.finance.Salary は許可されますが、com.redhat.finance.senior.Management は許可されません。
  • com.redhat.finance.*: com.redhat.finance パッケージ のみ のサブパッケージからのファクトを受け入れます。そのため、com.redhat.finance.senior.Managementcom.redhat.finance.junior.Management は許可されますが、com.redhat.finance.Person は許可 されません
  • com.redhat.finance.**: これは上記の 2 つのルールの組み合わせになります。com.redhat.finance.Personcom.redhat.finance.senior.Management、さらに com.redhat.finance.really.senior.Management クラスを受け入れます。

適切なエントリーを package-names-white-list ファイルに追加することで、依存関係からの特定のパッケージを組み込むことができます。詳細は、「依存関係の追加」を参照してください。

7.2.4. ルールの構成

ルールは複数の部分で構成されます。

When
ルールの when 部分には、満たす必要のある条件を入れます。たとえば、ローンとして銀行が貸付をする場合、顧客が 21 歳以上であるよう指定する場合があります。これは、顧客が 21 歳以上であることを判断するために when を使用して表現します。
Then
ルールの then 部分は、ルールの条件部分が満たされた場合に実行すべきアクションが入ります。たとえば、when 部分には「顧客が 21 歳以下の場合」、then 部分には「申請者が年齢制限に達していないためローンは却下」などが入ります。
オプション
ルールでは、Salience (優先順位) などのオプション属性を定義することができます。

ガイド付きルールエディターを使うと、ルールの When (条件) 部分に条件を追加し、Then (アクション) 部分にアクションを追加することができます。たとえば、ローン申請の際に 21歳未満の申請者に保証人がいる場合、銀行がそのローン申請を承認するか決定することができます。

7.2.5. Salience (優先順位)

ルールごとに Salience の値をもたせることができます。Salience には整数の値が入り、デフォルトは 0 となっています。Salience の値は、ルールの優先順位を表しており、値が高いと優先順位が高くなります。Salience 値は、正負どちらでも利用できます。

7.2.6. ルールへの条件やアクションの追加

手順: 条件またはアクションのルールへの追加

  1. ガイド付きルールエディターの When 部分の + アイコンをクリックして条件を追加するか、ガイド付きルールエディターの Then 部分の + アイコンをクリックしてアクションを追加してください。
  2. メニューから条件やアクションを選択して、Ok をクリックします。ルールが属するパッケージに DSL (ドメイン固有言語) の文を含めるように設定した場合、DSL 文をメニューから選択することができます。
  3. 条件またはアクションに入力 (日付、True または False、整数、その他の入力タイプ) が必要な場合、必要となる値を入力します。

7.2.7. ファクトタイプへのフィールドの追加

ガイド付きルールエディターを使うと、ルールの When (条件) 部分に条件を追加し、Then (アクション) 部分にアクションを追加することができます。例えば、ローン申請の際に 21歳未満の申請者に保証人がいる場合、銀行がそのローン申請を承認するか決定することができます。

保証人を条件に追加するには、まず guarantor フィールドを、担保モデルの申請ファクトタイプ (Business Central のデータオブジェクト) に追加します。フィールドをファクトタイプに追加する方法については、「データモデラー」 を参照してください。

保証人フィールドに申請者のファクトタイプが追加されたため、ルールを変更し、保証人を条件として含めることができます。

7.2.8. テクニカルルール (DRL)

テクニカルルール (DRL) はテキストとして保存され、これらのルールは JBoss Enterprise BRMS ユーザーインターフェースで管理されます。DRL ファイルには、1 つ以上のルールが含めることができます。ルールの条件とアクション部分は、それぞれ「when」と「then」になります。

Red Hat JBoss Developer Studio には、DRL ファイルの作成、編集、デバッグのツールが含まれており、これらはそれぞれの目的に合わせて使用できます。ただし、DRL ルールは Red Hat JBoss Enterprise BRMS ユーザーインターフェースで管理することができます。DRL エディターは Java、DRL および XML の構文強調表示を行います。

テクニカルルール (DRL) の例

rule "approval"
  salience 100 // This can short-circuit any processing.
  when
    a : Approve()
    p : Policy()
  then
    p.setApproved(true);
    System.out.println("APPROVED:" + a.getReason());
end

7.3. デシジョンテーブル

7.3.1. スプレッドシートのデシジョンテーブル

ルールは、スプレッドシートのデシジョンテーブルに保存できます。スプレッドシートの各行はルールで、各列は条件、アクション、オプションのいずれかになります。『Red Hat JBoss BPM Suite Development Guide』では、デシジョンテーブルの使用方法の詳細が説明されています。

7.3.2. スプレッドシートのデシジョンテーブルのアップロード

手順: スプレッドシートのデシジョンテーブルのアップロード

  1. 既存のスプレッドシートをアップロードするには、New Item Decision Table (Spreadsheet) を選択します。
  2. スプレッドシートの名前を入力し、Choose file…​ をクリックし、スプレッドシートを選択します。.xls または .xlsx ファイルを選択できます。終了したら、Ok をクリックします。

アップロードされたスプレッドシートをガイド付きデシジョンテーブルに変換するには、以下を実行します。

  1. アップロードされたスプレッドシートは、プロジェクト画面のメニューバーにある Validate ボタンをクリックして検証します。
  2. Convert をクリックします。

7.3.3. スプレッドシートのデシジョンテーブルサンプル

ここでは、注文されたアイテムの配送料金を記載するオンラインショッピングサイトの簡単な例について見てみましょう。このサイトでは、以下の条件に基づいて配送料を無料とすることに同意しています。

  • 注文されたアイテムの数が 4 点以上であり、合計金額が $300 以上である。
  • 購入日から標準配送日とされている 4 ないしは 5 営業日後に配送される。

記載される配送料金は以下のようになります。

表7.1 注文金額が $300 未満の場合
アイテム数配送日配送料金、N = アイテム数

3 点以下

翌日

2 日後

標準

$35

$15

$10

4 点以上

翌日

2 日後

標準

N*7.50

N*3.50

N*2.50

表7.2 注文金額が $300 を超える場合
アイテム数配送日配送料金、N = アイテム数

3 点以下

翌日

2 日後

標準

$25

$10

N*1.50

4 点以上

翌日

2 日後

標準

N*5

N*2

無料

上記の条件はスプレッドシートでは以下のように表されます。

2485

7.4. Web ベースのガイド付きデシジョンテーブル

7.4.1. Web ベースのガイド付きデシジョンテーブル

(web ベースの) ガイド付きデシジョンテーブル機能は、どのファクトやフィールドを利用すればデシジョンテーブル作成に役立つかを確認する点で、ガイド付きエディターのように機能します。

ルール属性、メタデータ、条件、アクションは、表形式で定義可能で、関連ルールの多くをすばやく入力できるようにします。Web ベースのデシジョンテーブルのルールは他のルールアセットと同様に、DRL にコンパイルされます。

新規デシジョンテーブルを作成するには、New Item Guided Decision Table をクリックします。表の名前を入力し、拡張エントリーまたは制限エントリー表のどちらかを選択します (「デシジョンテーブルのタイプ」)。オプションで、ガイド付きデシジョンテーブルウィザードを使用するよう選択します。

6326

終了したら、OK をクリックします。ウィザードを選択しない場合は、ガイド付きデシジョンテーブルのエディターが表示されます。ウィザードを選択した場合、ウィザードの最初の画面が表示されます。

6328

ウィザードでは、インポート、ファクト、パターンおよび列を定義することができますが、行は定義できません。行はガイド付きデシジョンテーブルエディターに追加され、これはウィザードの終わり (またはウィザードを使用しない場合は直接) 表示されます。

6327

ガイド付きデシジョンテーブルで構成される独自のアプリケーションをビルドする場合、クラスパスに必要な依存関係が追加されていることを確認してください。ガイド付きデシジョンテーブルの依存関係についての詳細は、『Red Hat JBoss BPM Suite Development Guide』の「Dependency Management for Guided Decision Tables, Scorecards, and Rule Templates」セクションを参照してください。

7.4.2. デシジョンテーブルのタイプ

大別すると、以下の 2 つのタイプのデシジョンテーブルがサポートされています。

  • 拡張エントリー
  • 制限エントリー

拡張エントリー

拡張エントリーのデシジョンテーブルは、列定義で値以外のパターン、フィールド、演算子を指定するタイプです。値またはステート (state) はデシジョンテーブルの本体に保持されます。エントリーをリストの値に制限して使用される値の範囲を制限することが通例となっていますが、必須ではありません。Business Central は Java 列挙またはデシジョンテーブルの「optional value lists (オプションの値リスト」を使用して値エントリーを制限する方法をサポートしています。

制限エントリー

制限エントリーのデシジョンテーブルは、列定義でパターン、フィールドおよび演算子に加えて値を指定します。デシジョンテーブルの本体に保持されるデシジョンテーブルのステート (state) は、正の値 (チェックボックスにチェックが付けられる) の場合は列が適用されることを意味するブール値です。負の値 (チェックボックスにチェックが付けられない) は列が適用されないことを意味します。

7.4.3. 列の設定

列の制限についての説明は、「条件列」 を参照してください。

デフォルト値を設定することはできますが、通常セルに値が入っていない場合は、その制約は適用されません。

図7.6 列の設定

Within the Options section under the Decision table, the user has the ability to set a default value.

7.4.4. 列の追加

ガイド付きデシジョンテーブルエディター内に列を追加するには、 New Column アイコンをクリックします。

以下の列タイプの選択ダイアログが表示されます。

図7.7 詳細の列オプション

Add column pop-up for Guided Decision Tables in BRMS User Guide 6.0.2

デフォルトで、列タイプのダイアログに以下のタイプが表示されます。

  • Add a new Metadata\Attribute column (新規メタデータ/属性列の追加)
  • Add a simple Condition (単純な条件の追加)
  • Set the value of a field (列の値の設定)
  • Set the value of a field on a new fact (新規ファクトでのフィールドの値の設定)
  • Delete an existing fact (既存ファクトの削除)

「Include advanced options (詳細オプションの組み込み)」をクリックすると、以下のオプションが追加されます。

  • Add a Condition BRL fragment (条件 BRLフラグメントの追加)
  • Execute a Work Item (作業アイテムの実行)
  • Set the value of a field with a Work Item parameter (作業アイテムパラメーターでのフィールドの値の設定)
  • Set the value of a field on a new Fact with a Work Item parameter (作業アイテムパラメーターでの新規ファクトのフィールド値の設定)
  • Add an action BRL fragment (アクション BRL フラグメントの追加)

7.4.5. 列タイプ

7.4.5.1. 属性列

複数の DRL ルール属性を表現する属性列を追加することができます。また、この列はなくても構いません。以下は例になります。

rule "Rule1"
salience 100 // This rule has the highest priority
when
  $c : Cheese( name == "Cheddar" )
then
  ...
end

属性の一覧については、『Red Hat JBoss BPM Suite Development Guide』の「Rule Set Entries」の章を参照してください。

7.4.5.2. メタデータ列

メタデータ列を定義でき (定義しなくてもよい)、それぞれは DRL ルールに付く通常のメタデータアノテーションを指します。メタデータを追加するには、以下を実行します。

  1. New column をクリックしてから、Add a new Metadata\Attribute column を選択します。
  2. Metadata フィールドに入力してから、+ボタン ( 5686 ) をクリックしてメタデータを追加します。

図7.8 属性およびメタデータオプション

Attribute and Meta Data option for the Guided Decision Table in the BRMS User Guide 6.0.2

7.4.5.3. 条件列

条件は、右側で定義したファクトのパターン、またはルールの「When」の部分を示します。条件列を定義するには、モデルクラスへのバインドを定義するか、定義済みのものを選択する必要があります。パターンを無効にするように選択することもできます。

when
  $c : Cheese( name == "Cheddar" ) //Binds the Cheese object to the $c variable
then
  ...
end
when
  not Cheese( name == "Cheddar" ) //Negates matching pattern
then
  ...
end

この作業を完了すると、フィールドの制約を定義することができます。同じファクトパターンのバインドを使って 2 つ以上の列を定義した場合、フィールド制約は、同じパターンに対する複合フィールド制約となります。1つのモデルクラスに対して複数のバインドを定義した場合、各バインドはルールの左側で別のモデルクラスになります。

新規列の編集または作成時に、制限タイプのオプションが表示されます。

  • Literal: 演算子を使ってセルの値がフィールドと比較されます。
  • Formula: セルの式が評価され、フィールドと比較されます。
  • Predicate: フィールドは不要であり、式が true または false に評価されます。

図7.9 単純な条件列

Condition Column for Guided Decision Table Editor in the BRMS User Guide 6.0.2

7.4.5.4. フィールド値の列

この列では、事前にバインドされたファクトのフィールドの値を設定するためのアクションを作成します。ルールエンジンに対して、他のルールを再度アクティブにする可能性のある変更された値について通知するオプションがあります。

図7.10 Set the value of a field (列の値の設定)

Field Value column for the Guided Decision Table Editor in BRMS User Guide 6.0.2

7.4.5.5. 新規のファクトフィールド値の列

この列では、新規ファクト (オブジェクト) をルールエンジンの作業メモリーに挿入するアクションを有効にします。新規ファクトは 論理的に挿入 することが可能です。ファクトを論理的に挿入すると、挿入されたファクトは、そのファクトを挿入したルールの条件が true ではなくなるとすぐに取り消されます。true 状態の維持および論理的な挿入についての詳細は、『Red Hat JBoss Development Guide』を参照してください。

図7.11 新規ファクトのフィールド値の設定

New Fact Field value column for the Guided Decision Table Editor in BRMS User Guide 6.0.2

7.4.5.6. 既存ファクトの削除

バインドされたファクトを削除するアクションを実行します。

図7.12 Delete an existing fact (既存ファクトの削除)

Delete Existing Fact column for the Guided Decision Table Editor in BRMS User Guide 6.0.2

7.4.6. 詳細の列タイプ

7.4.6.1. 条件付き BRL フラグメント列

BRL フラグメントがルールに左側で使用されることを許可するコンストラクトです。BRL フラグメントは、ガイド付きルールエディターを使用して作成されるため、このエディターで選択可能なすべての機能を使用して、「from」、「collect」、および「accumulate」などのデシジョンテーブル列を定義することができます。埋め込みガイド付きルールエディターを使用する場合、「Template Keys」として定義されるフィールド値はデシジョンテーブルの列を構成します。BRL フラグメントでバインドされたファクトおよびファクトのフィールドはより単純な列タイプで参照でき、これらのファクトおよびファクトのフィールドから列タイプの参照も可能です。

以下の例は、ショッピング層の BRL 条件を表示しています。

図7.13 Add a Condition BRL fragment (条件 BRLフラグメントの追加)

Condition BRL Fragment column for Guided Decision Table Editor in BRMS User Guide 6.0.2

7.4.6.2. 作業アイテムの実行列

ここでは、Red Hat JBoss Business Process Management Suite の作業アイテムハンドラーの起動を実行します。入力パラメーターをバインドされたファクト/ファクトのフィールドに値に設定します。これは、すべての作業アイテムの定義について同様に機能します。

図7.14 Execute a Work Item (作業アイテムの実行)

Execute Work Item Columns for Guided Decision Table Editor in BRMS User Guide 6.0.2

図7.15 WS 作業アイテム

WS Work Item Name for the Guided Decision Table in BRMS User Guide 6.0.2

図7.16 REST 作業アイテム

REST Work Item for Guided Decision Table Editor in BRMS User Guide 6.0.2

図7.17 ログ作業アイテム

Log Work Item for Guided Decision Table Editor in BRMS User Guide 6.0.2

図7.18 メール作業アイテム

Email Work Item for Guided Decision Table Editor in BRMS User Guide 6.0.2

7.4.6.3. フィールド値と作業アイテムパラメーター列

ここでは、ファクトフィールドの値を Red Hat JBoss BPM Suite の作業アイテムハンドラーの result パラメーターの値に設定するアクションを実行します。作業アイテムでは、バインドされたファクトのフィールドと同じデータタイプの result パラメーターを定義する必要があります。これにより、フィールドを return パラメーターに設定できます。

図7.19 作業アイテムパラメーターでのフィールド値の設定

Field Value with Work Item Parameter in Guided Decision Table Editor in BRMS User Guide 6.0.2
注記

Bind field to Work Item オプションを設定するには、まず作業アイテムを実行するアクションを設定する必要があります。これにより、作業アイテムの結果に基づいて既存ファクトのフィールドを設定できます。

7.4.6.4. 新規フィールド値と作業アイテムパラメーター列

ここでは、ファクトフィールドの値を Red Hat JBoss BPM Suite 作業アイテムハンドラーの result パラメーターの値に設定するアクションを実行します。作業アイテムでは、バインドされたファクトのフィールドと同じデータタイプの result パラメーターを定義する必要があります。この場合、フィールドを return パラメーターに設定できます。

図7.20 作業アイテムパラメーターの新規ファクトのフィールド値の設定

New Fact Field Value with Work Item Parameter column for Guided Decision Table Editor in BRMS User Guide 6.0.2
注記

Bind field to Work Item オプションを設定するには、まず作業アイテムを実行するアクションを設定する必要があります。これにより、作業アイテムの結果のフィールド値を持つ新規ファクトを挿入できます。

7.4.6.5. アクション BRL フラグメント列

BRL フラグメントがルールの右側で使用されることを許可するコンストラクトです。BRL フラグメントは、ガイド付きルールエディターを使用して作成されるため、このエディターで選択可能なすべての機能を使用して、デシジョンテーブル列を定義することができます。埋め込みガイド付きルールエディターを使用する場合、「Template Keys」として定義されるフィールドの値はデシジョンテーブルの列を構成します。BRL フラグメントでバインドされたファクトはより単純な列タイプで参照でき、これらのファクトから列タイプの参照も可能です。

図7.21 アクション BRL フラグメントを追加するための単純なレイアウト

A Simple Action BRL Fragment in the Guided Decision Table Editor for BRMS User Guide 6.0.2

7.4.7. ルール定義

ルールは、定義済みの列を使用してデシジョンテーブルの本体に作成されます。

ルールの行は + のマークをクリックして追加するか、または - のマークをクリックして削除できます。

図7.22 ルール定義

A screen shot of a decision table.

7.4.8. セルの統合

デシジョンテーブルの左上にあるアイコンでセルの統合をオンまたはオフにすることができます。セルの統合時に、同じ列に同じ値を持つセルがある場合は 1 つのセルに統合されます。これにより、元の値が同じであった複数のセルの値を簡単に変更できるようになります。セルを統合するとセルの左上にアイコンが現れ、複数のセルにわたる列をグループ化することができます。

図7.23 セルの統合

A table demonstrating the merging of cells.

7.4.9. セルのグループ化

統合したセルをさらに1つの行に折りたたむことが可能です。統合したセルの左上にある [+\-] アイコンをクリックすることで、該当の列を1つのエントリーに折りたたみます。他の列にあるセルで、折りたたまれた列にまたがり、同じ値を持つ場合は表示の変更はありません。しかし、他の列にあるセルで、折りたたまれた行にまたがり、別の値を持つ場合は、ハイライトされ、最初の値が表示されます。

図7.24 セルのグループ化

This table shows how cells can be grouped using the +\- options.

グループ化されたセルの値が変更された場合、折りたたまれたセルの値もすべて更新されます。

7.4.10. Otherwise の操作

等価演算子 == あるいは、非等価演算子 != を使うリテラル値で定義した条件列は、デシジョンテーブルの特別なセル値である otherwise を活用できます。この特別な値により、表で定義されている他のルールには明示的に定義されていない値すべてにマッチするようにルールを定義することができます。以下の例が最もわかりやすいでしょう。

when
  Cheese( name not in ("Cheddar", "Edam", "Brie") )
  ...
then
  ...
end
when
  Cheese( name in ("Cheddar", "Edam", "Brie") )
  ...
then
  ...
end

otherwise キーワードを使用するには、以下を実行します。

  1. == or != 演算子を使用する条件列のセルを選択します。
  2. Otherwise をクリックします。

7.5. ルールのテンプレート

7.5.1. ガイド付きルールテンプレート

ルールテンプレートを使用すると、ルール構造を定義することができます。値やデータのプレースホルダーがあり、テンプレートにデータを設定して数多くのルールが生成されます。ユーザーから見ると、ガイド付きルールテンプレートは、パラメーター値を提供するデータ表を含む、パラメーター化されたガイド付きルールです。テンプレートにより、より柔軟性のあるデシジョンテーブルを作成でき、既存データベースのルールに柔軟性を増し加えることができます。ルールテンプレートの依存関係の管理についての詳細は、『Red Hat JBoss BPM Suite Development Guide』の「Dependency Management for Guided Decision Tables, Scorecards, and Rule Templates」セクションを参照してください。

手順: ガイド付きルールテンプレートの新規作成

  1. Project Explorer ビューで、以下のいずれかを実行します。

    1. Project ビューを使用している場合は、組織単位、リポジトリー、およびテンプレートを作成するプロジェクトを選択します。
    2. Repository ビューを使用している場合は、src/main/resources/ およびルールテンプレートのプロジェクトフォルダーを作成する SUBFOLDER/PACKAGE に移動します。
  2. パースペクティブメニューで、New Item Guided Rule Template に移動します。
  3. Create new Guided Rule Template ダイアログウィンドウで、ルールのテンプレート名を指定します。

    1. Guided Rule Template テキストボックスで、アセットの名前を入力し、Package セレクターからパッケージを選択してから OK をクリックします。
  4. 新規のガイド付きルールテンプレートが作成され、選択されたプロジェクトから表示されます。

図7.25 ガイド付きテンプレートエディター

Red Hat JBoss BRMS Guided Template Editor screenshot example for BRMS USer Guide 6.0.2.
注記

単純なルールテンプレートを使用し、ルールとスプレッドシートを Business Central から直接操作することはサポートされていません。Red Hat は Business Central を使用してガイド付きルールテンプレートを作成し、使用することを推奨しています。

7.5.2. ガイド付きルールテンプレートの WHEN 条件

Business Central のガイド付きルールテンプレートでは、データとルールを切り離した状態でルールテンプレートを設定できます。

「データオブジェクトの作成」 で説明されているようにプロジェクトのデータモデルがすでに設定されていることを確認します。

手順: 制限および複数フィールドの制約のある単純な条件の作成

  1. ガイド付きルールテンプレートエディターで、WHEN セクションの右側にある + アイコン ( 5686 ) をクリックします。

    利用可能な条件テンプレートを示す Add a condition to the rule…​ ダイアログウィンドウが開きます。

    図7.26 条件のルールダイアログウィンドウへの追加

    5687
  2. 条件 (例: LoanApplication …​) を選択して Ok をクリックします。

    新規の条件がガイド付きルールテンプレートエディターに表示されます。

  3. 条件をクリックします。

    Modify constraints for LoanApplication ダイアログウィンドウが開きます。ここから、フィールドの制限を追加し、複数フィールドの制約を適用し、新規の数式表現を追加し、式エディターを適用するか、または変数名を設定することができます。

  4. 必要に合わせて条件を変更します。たとえば、条件の定義、または制限の追加に役立つ変数名を設定します。

    制限を選択すると、ダイアログウィンドウは自動的に閉じます。

    図7.27 条件の変更

    5689
  5. 追加した制限の横にあるドロップダウンメニューから制限の演算子 (例: greater than) を選択します。
  6. Edit ( 6191 ) をクリックしてフィールドの値を定義します。フィールドの値には、リテラル値、テンプレートキー、数式、または式エディターを使用できます。
  7. 複数フィールドの制約を適用するには、条件をクリックし、Modify constraints for LoanApplication ダイアログウィンドウで、Multiple field constraint ドロップダウンメニューから All of(And) または Any of(Or) を選択します。

    図7.28 複数フィールドの制約の追加

    5688

    制約はガイド付きルールテンプレートエディターに表示されます。

  8. 制約をクリックします。

    Add fields to this constraint ダイアログウィンドウが開きます。

  9. フィールドとそれらの値を指定します。たとえば、New Formula をクリックすると、true または false に評価される数式表現を新規に追加できます。

    図7.29 数式表現の複数フィールドの制約

    loanapp

7.5.3. ガイド付きルールテンプレートの THEN アクション

ルールの THEN セクションは、WHEN セクションに一致する際に実行されるアクションを保持します。

手順: THEN アクションについてのガイド付きテンプレートエディターの使用

  1. ガイド付きテンプレートエディターの THEN セクションの右側にある + アイコン 5686 を選択して THEN アクションを入力します。
  2. ダイアログウィンドウが、選択可能なアクションテンプレートと共に開きます。以下の例では、一覧から Modify a…​ アクションを選択します。

    図7.30 Nurse Roster THEN ダイアログウィンドウ

    5695
  3. OK をクリックすると、ガイド付きテンプレートエディターに THEN アクションが表示されます。
  4. 新規に追加された THEN アクションをクリックします。Add a field ダイアログが表示されます。以下は、「Modify value of LoanApplication [a]6191 アクションの例になります。

    図7.31 フィールドの追加ダイアログ

    An Add a field dialog for the Guided Template Editor in BRMS User Guide 6.0.2
  5. このダイアログ内で、Add field ドロップダウンメニューからフィールドを選択できます。
  6. 選択が行われると、ダイアログウィンドウが自動的に閉じます。
  7. このアイテムフィールド内で Edit アイコン ( 6191 ) を選択し、フィールドの値をリテラル値、テンプレートキー、または数式で定義します。

7.5.4. ガイド付きルールテンプレートのデータ表

データ表は、定義するガイド付きルールテンプレートの変数を提供します。設定に基づいて数多くのルールが生成されます。Data タブをクリックすることで、データ表はガイド付きテンプレートエディター内で変更できます。以下の例を考慮してみましょう。

電話サービス、インターネットサービスおよび TV サービスを提供する会社があるとします。毎月の金額は顧客が使用するアクティブなサービスによって異なります。この場合、テンプレートは以下のようになります。

datatablestemplate

ルールを設定するには、以下を実行します。

手順: データ表についてのガイド付きテンプレートエディターの使用

  1. Data タブをクリックして新規に作成されたデータ表にアクセスします。表は、最初はテンプレートで定義された変数を含むヘッダーのみの空の状態です。

    emptytable
  2. Add row…​ をクリックします。新規の列にはそれぞれ 1 つの新規ルールが設定されます。
  3. 追加のデータを表示に入力します。以下は例になります。

    図7.32 ガイド付きテンプレートエディターのデータ表

    populatedguidedtuletable
  4. DRL コードを表示するには、Source タブをクリックします。

    rule "PaymentRules_6"
    	dialect "mvel"
    	when
    		Customer( hasInternetService == false , hasPhoneService == false , hasTVService == true )
    	then
    		RecurringPayment fact0 = new RecurringPayment();
    		fact0.setAmount( 5.0B );
    		insertLogical( fact0 );
    end
    
    rule "PaymentRules_5"
    	dialect "mvel"
    	when
    		Customer( hasInternetService == false , hasPhoneService == true , hasTVService == false )
    	then
    		RecurringPayment fact0 = new RecurringPayment();
    		fact0.setAmount( 5.0B );
    		insertLogical( fact0 );
    end
    //Other rules omitted for brevity.
  5. ガイド付きテンプレートエディターでの作業が終了したら、Save をクリックしてテンプレートを保存します。

7.6. ドメイン固有言語エディター

ドメイン固有言語機能により、問題ドメインに固有の言語を定義することができます。ユーザーまたはビジネスアナリストのユーザーは、その後に事前定義された言語のみを使用してルールを作成することができます。これにより、ルールやルール言語の深い知識がないユーザーのルール作成プロセスが単純化されます。ドメイン固有言語 (または DSL 文) から構築された文は、DSL Editor で編集可能です。ドメイン固有言語の詳細については、『Red Hat JBoss BPM Suite Development Guide』を参照してください。DSL 構文を拡張してヒントを提供し、DSL 変数がどのようにレンダリングされるかを制御します。以下のヒントに対応しています。

  • {<varName>:<regular expression>}

    これは、DSL 文をガイド付きエディターで使用する場合に、DSL 変数の場所でテキストフィールドをレンダリングします。テキストフィールドの内容は、正規表現をベースに検証されます。

  • {<varName>:ENUM:<factType.fieldName>}

    これは、DSL 文をガイド付きエディターで使用する場合に、DSL 変数の場所で列挙をレンダリングします。<factType.fieldName> は、列挙とモデルファクトおよびフィールド列挙定義をバインドします。これは、ナレッジベース列挙または Java 列挙 (モデル POJO JAR ファイルで定義) のいずれかです。

  • {<varName>:DATE:<dateFormat>}

    これは、DSL 文をガイド付きエディターで使用する場合、DSL 変数の場所に Date selector をレンダリングします。

  • {<varName>:BOOLEAN:<[checked | unchecked]>}

    これは、DSL 文をガイド付きエディターで使用する場合、DSL 変数の場所に Dropdown selector をレンダリングします。

図7.33 DSL Editor

A screenshot of the DSL editor

7.7. データ列挙

7.7.1. データ列挙のドロップダウンリスト設定

データ列挙はオプションのアセットタイプですが、ガイド付きデシジョンテーブルエディターにドロップダウンリストを付けるために設定できます。セルの条件が列挙と同じファクトおよびフィールドに基づく場合は、セルをダブルクリックして列挙のドロップダウンリストを表示します。

user guide enumeration gdst

これらは、他のアセットと同様に保存、編集され、これらが作成されたパッケージに対してのみ適用されます。

列挙設定の内容は、fact.field を値の一覧にマッピングします。これらの値は、ドロップダウンメニューを設定するために使用されます。この一覧は、Literal あるいは Utility クラス (クラスパスに追加する必要あり) を用いて文字列を読み込みます。この文字列には、ドロップダウンメニューに表示する値か、コード値からのマッピング (ルールで利用されるもの) と表示値 (例: M=Mini) のいずれかが含まれています。

例7.2 列挙の設定例

'Board.type' : [ 'Short', 'Long', 'M=Mini', 'Boogie']
'Person.age' : [ '20', '25', '30', '35' ]

これは、以下のように Business Central で設定することもできます。

user guide data enumeration

7.7.2. 列挙の詳細コンセプト

ドロップダウンのリストはフィールドの値により変化します。列挙があると、他のフィールドの値を基に複数のオプションを定義することができます。

たとえば、保険契約のファクトモデルには、policyTypecoverage のフィールドで構成される保険と呼ばれるクラスが含まれます。policyType の選択肢として、Home または Car などが考えられます。また、保険契約の種類により、利用可能な補償タイプなどが決まります。住宅保険契約には property または liability が、車両保険契約には collision または fullCoverage など入る可能性があります。

policyType のフィールド値は、補償にはどのオプションを表示するかを決定しますが、以下のように表現されます。

 'Insurance.policyType' : ['Home', 'Car']
 'Insurance.coverage[policyType=Home]' : ['property', 'liability']
 'Insurance.coverage[policyType=Car]' : ['collision', 'fullCoverage']

7.7.3. 外部ソースからのデータ一覧の取得

外部ソースから文字列の一覧を取得して、列挙メニューで使用することができます。これは、(文字列の) java.util.List を返すクラスパスにコードを追加することで可能になります。ユーザーインターフェースで値の一覧を指定する代わりに、コードは文字列一覧を返します (通常、ルールの値と異なる表示値を使用したい場合は文字列の内側に "=" 記号を使用できます)。たとえば、以下を使用することができます。

'Person.age' : ['20','25', '30', '35']

上記の行を以下のように変更します。

'Person.age' : (new com.yourco.DataHelper()).getListOfAges()

これは、DataHelper と呼ばれるクラスを持ち、このクラスには、getListOfAges() というメソッドがあり、このメソッドで文字列一覧を返すことが想定されます。データ列挙は、セッションで初めてガイド付きエディターを使用する際に読み込まれます。列挙が読み込まれたかどうかを確認するには、パッケージ設定画面に移動します。パッケージの「保存と検証」を行うことができ、これによりパッケージのチェックを行い、エラーなどのフィードバックが提供されます。

7.8. スコアカード

7.8.1. スコアカード

スコアカードはリスク管理ツールであり、スコア全体を計算するために使用される数式のグラフィック表示です。ほとんど場合、これは金融機関や銀行によって、商品を市場で販売することに関するリスクを計算するために使用されます。そのため、特定の結果が生じる可能性または確率を予想するために使用できます。Red Hat JBoss BRMS は、個別のルール条件に割り当てられる部分的なスコアを加算してスコア全体を計算する付加的なスコアカードをサポートしています。

さらに、Drools スコアカードでは理由コードの設定が可能であり、これによりスコア全体に影響を与えた特定ルール (バケット) を特定できます。Drools スコアカードは PMML 4.1 標準に基づいています。

通常、スコアカードは以下のように作成できます。

  1. 統計分析は、通常は既存の顧客データベースから収集される履歴データで実行されます。
  2. 予測特性 (属性または情報の一部) がこの分析に基づいて特定されます。
  3. それぞれの特性は、使用される可能性のある値の範囲に分類され、それらにスコアが付されます。

この詳細の説明として、以下の例を見てみましょう。

図7.34 スコアカードサンプル

2657

7.8.2. スコアカードの作成

手順: 新規スコアカードの作成 (スプレッドシート)

  1. Project Authoring パースペクティブを開きます。メインメニューで、Authoring Project Authoring をクリックします。
  2. Project Explorer ビューで、以下を実行します。

    1. Project Explorer の Project ビューを使用している場合、組織単位、リポジトリー、およびスコアカードを作成するプロジェクトを選択します。
    2. Project Explorer の Repository ビューを使用している場合、スコアカードを作成するプロジェクトのルートに移動します。
  3. パースペクティブメニューで、New Item Score Card (Spreadsheet) に移動します。
  4. Create new Score Card (Spreadsheet) ダイアログウィンドウで、パッケージの詳細を定義します。

    1. Resource Name テキストボックスで、スコアカード名を入力します。
    2. Choose File をクリックし、場所を参照して、スコアカードが最初に作成されるスプレッドシートを選択します。
  5. OK をクリックします。
  6. 新規スコアカードスプレッドシートが選択されたプロジェクトの下に作成されます。

ガイド付きスコアカードで構成される独自のアプリケーションをビルドする場合、クラスパスに必要な依存関係が追加されていることを確認してください。ガイド付きデシジョンテーブルの依存関係についての詳細は、『Red Hat JBoss BPM Suite Development Guide』の「Dependency Management for Guided Decision Tables, Scorecards, and Rule Templates」セクションを参照してください。

注記

スコアカード機能はテクノロジープレビューとして提供しているため、現時点で Red Hat JBoss BRMS ではサポート されていません

7.9. ガイド付きデシジョンツリー

デシジョンツリーは、意思決定モデルのツリー形式によるグラフィック表示です。フラットなデータオブジェクトモデルを使用して、単純なデシジョンツリーを Business Central で作成することができます。エディターはネスト化されたデータオブジェクトをサポートしません。

エディターの左側にはパレットがあり (利用可能なデータオブジェクト、フィールドおよび対応するアクションが含まれる)、右側には、デシジョンツリーを作成するためにデータオブジェクトをドラッグアンドドロップできる作業エリアがあります。エディターでプロンプト表示されるコネクターや子オブジェクトを使用してツリーを完成することができます。各ノードは、DeleteEdit、および Collapse アイコンを使用して操作できます。

デシジョンツリーの作成時に、以下の点に留意してください。

  • データオブジェクトはツリーのルートになければならない。
  • ツリーには 1 つのルートしか設定できない。
  • データオブジェクトには、子として他のデータオブジェクトや、フィールドの制約、またはアクションを持たせることができる。
  • フィールドの制約は、親ノードと同じデータオブジェクトのフィールドに設定される必要がある。
  • フィールドの制約には、子として他の制約またはアクションのいずれかを持たせることができる。
  • フィールドの制約は、親ノードと同じデータオブジェクトのフィールドに設定される必要がある。
  • アクションには、子として他のアクションのみを持たせることができる。
注記

ガイド付きデシジョンツリーはテクノロジープレビューとして提供しているため、現時点で Red Hat JBoss BRMS ではサポート されていません

7.10. ガイド付きデシジョンテーブルの確認および検証

Business Central では、ガイド付きデシジョンテーブルは、条件付きロジック (ルール) を詳細に表現する 1 つの方法であり、それはビジネスレベルのルールに適しています。

7.10.1. はじめに

Business Central の確認および検証機能は、ガイド付きデシジョンテーブルを完成し、エラーがない状態にするのに役立ちます。この機能は、ガイド付きデシジョンテーブルのロジックにギャップがあるかどうかをチェックし、異なるセル間の関係を検証します。Business Central の確認および検証機能で報告される問題のほとんどは、作成者のロジックのギャップについてです。確認および検証機能は、この確認および検証通知を無視することを選択した場合でも作業の保存を防ぐことはありません。

ガイド付きデシジョンテーブルを編集する場合、この確認および検証機能は操作を誤った場合に通知を送信します。たとえば、ガイド付きデシジョンテーブルの行にアクションを設定するのを忘れた場合や、重複した行がある場合には、新規パネルの Analysis がこれらの問題についての通知と共に Business Central に開かれます。Analysis パネルはガイド付きデシジョンテーブルで見つかる問題の一覧を表示し、それぞれの項目は影響を受けるガイド付きデシジョンテーブルの行をポイントします。問題の一覧から項目を選択すると、問題のさらに詳細な説明を参照することができます。

検証および確認機能は、以下の問題の解決に役立ちます。

  • 冗長性 (Redundancy)

    冗長性は、デシジョンテーブルの 2 つの行で同じファクトセットの同じ結果を実行する際に生じます。たとえば、顧客の誕生日をチェックし、誕生日割引を提供する 2 つ行があると、割引が 2 倍になる可能性があります。

  • 包摂 (Subsumption)

    包含は冗長性と似てており、2 つのルールが同じ結果を実行する場合に生じますが、1 つのルールが別のルールのファクトのサブセットに対して実行される場合に生じます。たとえば、以下の 2 つのルールを想定してください。

    • when Person age > 10 then Increase Counter
    • when Person age > 20 then Increase Counter

    この場合、対象者の年齢が 15 歳の場合は 1 つのルールのみが実行され、対象者の年齢が 20 歳の場合には、2 つのルールが実行されます。これにより、冗長性の場合と同様の問題が実行時に生じます。

  • 競合 (Conflict)

    2 つの似ている条件に 2 つの異なる結果が設定されている場合には、競合する状況が生じます。デシジョンテーブルの 2 つの行 (ルール) または 2 つのセルの間に競合が見られる場合があります。

    以下の例は、デシジョンテーブルの 2 つの行の間の競合を示しています。

    • when Deposit > 20000 then Approve Loan
    • when Deposit > 20000 then Refuse Loan

      この場合、ローンが承認されるかどうかについて確認することはできません。

      以下の例は、デシジョンテーブルの 2 つのセル間にある競合を示しています。

    • When Age > 25
    • When Age < 25

    競合するセルを持つ列が実行されることはありません。

  • 欠陥 (Deficiency)

    欠陥は競合と似ており、デシジョンテーブルのルールのロジックが未完成な状態である場合に生じます。たとえば、以下の 2 つの欠陥のあるルールを見てみましょう。

    • when Age > 20 then Approve Loan
    • when Deposit < 20000 then Refuse Loan

    これらの 2 つのルールにより、21 歳以上で預金が 20000 未満の対象者について混乱が生じる可能性があります。ルールのロジック完成を求める警告に出された後に、競合を防ぐために制約を追加できるかもしれません。

  • 列の欠落 (Missing Column)

    列を削除するとロジックが未完成または不正確になり、ルールが適切に実行されない場合があります。この問題が検出されることにより、欠落した列への対応が可能になり、削除された条件やアクションにロジックが意図的に依存しないよう調整することができます。

7.10.2. レポート

Business Central の確認および検証機能は、ガイド付きデシジョンテーブルの更新中に Analysis パネルで異なるレベルの問題をレポートします。

  • gdtValidationVerificationIconError Error: これは、ガイド付きデシジョンテーブルが実行時に設計された通りに機能しなくなるような重大な障害があることを意味します。たとえば、競合はエラーとしてレポートされます。
  • gdtValidationVerificationIconWarning Warning: これも重大な障害である可能性がありますが、これによってガイド付きデシジョンテーブルが機能しなくなることはありませんが、再確認が必要になります。包含などの場合に、この警告が出されます。
  • gdtValidationVerificationIconInfo Information: この種類の問題は、ガイド付きデシジョンテーブルの作成者の設計上の決定によるものや単純な事故である可能性があります。たとえば、条件のない行がある場合に使用されます。
注記

Business Central の確認および検証機能は、誤った変更の保存を防ぐものではありません。この機能は、編集時に問題のみをレポートするので、これらの問題を無視して変更を保存することができます。

7.10.3. ガイド付きデシジョンテーブルの確認および検証の無効化

Business Central のデシジョンテーブルの確認および検証機能はデフォルトで有効にされています。これは、org.kie.verification.disable-dtable-realtime-verification システムプロパティー値を true に設定することで無効にできます。

たとえば、JBoss EAP をアプリケーションサーバーとして使用している場合、$EAP_HOME ディレクトリーに移動して以下のコマンドを実行します。

./standalone.sh -Dorg.kie.verification.disable-dtable-realtime-verification=true

または、このプロパティーを standalone.xml ファイルで設定します。

<property name="org.kie.verification.disable-dtable-realtime-verification" value="true"/>
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.