5 デシジョン表の使用
デシジョン表を使用して、理解しやすい形式でビジネス・ルールを作成および使用します。デシジョン表は、IF/THENルール形式の代替を提供します。条件、競合、アクションなど、デシジョン表の各種コンポーネントの概要およびデシジョン表に対して実行できる様々な操作を取得します。
5.1 デシジョン表の使用の概要
企業は、自社のビジネス・プロセスを自動化するためにソフトウェアに投資しています。従来、この自動化の焦点は、データに関する意思決定を容易にするためのデータの収集、プレゼンテーションおよび操作に置かれていました。しかし、ビジネス・プロセスに関するルール詳細をソフトウェア・アーキテクチャに組み込むことで意思決定プロセスを自動化するという、ソフトウェア設計者と開発者に対する要求が大きくなってきています。また、多くの企業は、ビジネスの変化に対するソフトウェア・システムの応答性を高めようという圧力の高まりに直面しています。
場合によっては、ビジネス・ルールを記述およびテストする役割が、ソフトウェア・エンジニアではなく、研修を受けたビジネス・ユーザーに割り当てられるようになりました。また、ソフトウェアのビジネス上の動作の変更を従来のソフトウェア開発サイクルから分離し、その変更内容を製品や販売サイクルのようなビジネス主導の規範に関連付ける組織もあります。
デシジョン表は、特にコンピュータ・プログラマではなくビジネス・アナリストが記述を担当する場合に、データ処理タスクを記述するためのメカニズムを提供します。
スプレッドシートに慣れたビジネス・アナリストにとって、デシジョン表の書式は直感的なものです。デシジョン表に用意されている仮の構造により、複数の類似するルールを容易に作成、理解および変更でき、ソフトウェアでルールの完全性および整合性をチェックできます。
Oracle Business Rulesデシジョン表には、次の機能があります。
-
強力な視覚化: コンパクトで構造化されたプレゼンテーション。この視覚化は、多数の表を使用し、宣言的で単純なステップに編成されるという、現実のビジネス・ポリシーの表現方法に適合しています。
-
エラー防止: 不完全性や非整合性を回避します。デシジョン表は適切に構造化されているため、自動化されたツールで競合、冗長性および不完全性をチェックし、有効で整合性のあるビジネス・ルールを迅速に開発できます。
-
モジュール形式の情報編成: 複数のルールが単一の表にグループ化されます。スプレッドシートのように、連携して動作するルールのグループが単一の表示可能ペインに置かれます。たとえば、申込者が適格かどうかをチェックする6つのルールがある場合、個別ではあっても関連するルールとして表示するのではなく、6つのルールすべてを表示する方が便利です。
-
ルールの最適化およびパフォーマンス上のメリット: Oracle Business Rulesのデシジョン表には自動化された機能が用意されており、IF/THENルールに比べて、必要なルールの数を削減できます(これをルールの結合と呼びます)。
-
ルール検証機能: デプロイメント前にルールの論理的な整合性を確認する機能が用意されています。競合または不完全性をチェックするように自動化されたツールを使用して、有効で整合性のあるビジネス・ルールを迅速に開発できます。
デシジョン表を使用する主な理由は、検証および視覚化が容易であることです。
詳細は、ルールセットとルールの使用を参照してください。
5.1.1 デシジョン表とは
デシジョン表では、スプレッドシート形式の単一ビューに複数の関連するルールが表示されます。ルール・デザイナの場合、デシジョン表には関連するビジネス・ルールのコレクション、条件行、ルールおよびアクションがわかりやすい表形式で表示されます。ビジネス・ユーザーは、各セルおよびそれぞれの値をすばやく比較し、デシジョン表のルール分析機能(ルール・デザイナでボタンをクリックして値を選択することで使用可能)を使用し、競合するケースや欠落しているルールを識別し、訂正できます。
デシジョン表の概念を理解しやすいように、運転者に免許資格があるかどうかを判別する一連のIF/THENルールおよび、それと同等のデシジョン表を示します。運転免許の教習を受講済の運転者が受講証明を持っていることに注意してください。
このIF/THENルールは次のようになります。
if driver.age < 20 and driver.has_training then training = true if driver.age < 20 and driver.has_training = false then driver.eligible = false if driver.age >= 20 then driver.eligible = true (do not care about training for this case)
図5-1に、これらのルールをデシジョン表で表現したものを示します。この図には、デシジョン表の「条件」および「アクション」領域が含まれています。
5.1.1.1 デシジョン表の条件に関する必知事項
デシジョン表の「条件」領域には、1行以上の条件行が含まれています。各条件行には条件式が含まれ、ルールごとに条件セルがあります。条件式は、ルール・デザイナで構築する式です。条件式はファクト・プロパティまたは関数結果であることが多いのですが、値セットに関連付けられる型の式の場合もあります。テスト式は、Driver.age<16
のように、よく使用されます。これらの式は、true
およびfalse
という値を使用して、組込みのブール型の値セットと関連付けられています。指定された条件セルの値または範囲は、関連付けられたLOVまたは範囲の値セットの1つ以上の値または範囲から取得されます。値セットの詳細は、「値セットの使用」を参照してください。
たとえば、図5-1は、Driver.age
プロパティを持つDriver
ファクトの条件式を示しています。デシジョン表内の対応する行は、範囲<20
および>=20
の値を含む条件セルを示しています。セル内の値は、driver_ages
というグローバル値セットから取得されます。
図5-1には、Driver.has_training
プロパティを持つDriver
ファクトの条件行も示されています。この条件行は、値true、falseおよび-を持つ条件セルを示しています。ハイフン(-
)は、考慮されないこと(つまり、この場合はDriver.has_training
がtrue
でもfalse
でもかまわないこと)を意味します。これらの条件セルの値は、ブール型に関連付けられているデフォルト値セットから取得されます(これは、値true
およびfalse
のデフォルト値で構成されています)。
-(考慮しない)値は、新しい値が値セットに追加されるときに、デシジョン表にギャップが発生しないようにするために役立ちます。たとえば、値セットに最初に1、2、otherwiseが含まれている場合、入力が3であるとotherwiseに一致しているルールが起動されます。ただし、3が明示的に値セットに追加されると、otherwiseは3の入力値に一致しなくなります。この入力に対してどのルールにも-が含まれていない場合、入力値が3であると、どのルールも起動せず、デシジョン表にギャップがあると言われるようになります。
それ以外の値ではなく値セットのotherwise値に明示的に一致させる場合は、otherwiseを使用します。otherwiseは、デシジョン表での競合の回避に役立ちます。-はどのような値にも一致させるために使用され、多くの場合、競合が発生します。これらの競合は、「自動オーバーライド」競合ポリシーを使用して自動的に解決できます。
デシジョン表にはルールがバケット順に表示され、ルールの順序を変更するには値セット内のバケットの順序を変更する必要があります。つまり、条件行に関連付けられている値セット内のバケットの順序によって条件セルの順序が決まり、したがってルールの順序も決まります。デシジョン表でのルールの順序付けは、条件行に関連付けられているLOV値セット内のバケットの相対位置を変更することで管理できますが、範囲バケット(値)の順序は変更できません。値セット内のバケットの順序付けの詳細は、「値リスト・グローバル値セットの定義方法」を参照してください。
5.1.1.2 デシジョン表のアクションに関する必知事項
デシジョン表では、アクションはルールに関連付けられています。実行時には、条件セルについてファクトが一致すると、Rules Engineにより、そのルールに関連付けられているアクションの実行が準備されます。
表5-1に、「アクション」領域で選択できるアクションのタイプを示します。したがって、アクションでは、関数の呼出し、新規ファクトのアサート、ファクトのリトラクト、ファクトの変更などを実行できます。「アクション」領域では、ルールに対する個別アクションに対応するセルをアクション・セルと呼びます。拡張モードの詳細は、「拡張モード・オプションの選択方法」を参照してください。
表5-1 アクション・セルに値するデシジョン表のアクション
アクション | 説明 |
---|---|
|
新規ファクトをアサートします。 |
|
変数に値を割り当てます。 |
|
関数をコールします。 |
|
一致したファクトに関連付けられているデータ値を変更します。 |
|
ファクトを取り消します。 |
|
ファクトをアサートします。 |
|
ルートが指定されたファクトのツリーをアサートします。 |
|
新規の変数に値を割り当てます。 |
|
式を実行します。 |
|
returnアクションは、関数またはルールのアクション・ブロックから戻ります。ルール内のreturnアクションはルールセット・スタックをポップするため、実行は現在ルールセット・スタックの最上部にあるルールセットからのアジェンダに対するアクティブ化に進みます。 |
|
例外をスローします。例外はjava.lang.Throwableを実装するJavaオブジェクトである必要があります。スローされた例外は、tryアクション・ブロック内のcatchによって捕捉される場合があります。 |
複数のアクションを追加する場合、「アクション」領域で追加したアクションは順序付けされます。上位の行に表示されるアクションが実行されてから、下位の行のアクションが実行されます。
デシジョン表のアクション(modify
など)では、条件セル内で一致したファクトを参照できます。たとえば、デシジョン表にDriver
ファクトの条件行があり、そこにDriver.age
とDriver.has_training
の条件行が含まれている場合、アクションでプロパティDriver.eligible
を変更でき、アクション・セルごとにDriver.eligible
の値を指定できます。
「アクション」領域の一部のタイプのアクションには、「パラメータ化」チェック・ボックスが含まれています。このチェック・ボックスでは、そのアクションのプロパティとして、デシジョン表内のルールに関連付けられたアクション・セル内の値セットを設定できることが指定されます。パラメータ化されたチェック・ボックスが選択されると、アクション・セルに値が入力されていない場合に、「アクション」領域で、アクション内の式の値に入力した値がプロパティのデフォルト値になります。たとえば、図5-2を参照してみると、値false
がアクション・プロパティeligible
のデフォルト値として割り当てられています。
5.1.1.3 デシジョン表のルールに関する必知事項
ルールセットにはデシジョン表が含まれており、これによりデシジョン表をIF/THENルールと一緒にグループ化できます。ルールセットでルールとデシジョン表をグループ化すると、IF/THENルールとデシジョン表のルールがすべて、相互関係した1セットのルールとして実行されます。
デシジョン表内のルールには名前がありません。ルール・デザイナではデシジョン表内のルールがR1、R2およびR3のようなラベル付きで表示されますが、これらのルール・ラベルは個別ルールの名前ではなく、デシジョン表に含まれているルールの現行の順序付けから導出されたラベルです。したがって、ラベルR1が付いているルールを位置3に移動すると、ルール・デザイナにより、このルールのラベルがR3に変更されます。
デシジョン表内のルールは、条件セルのツリーを含む表として編成されます。1行目の条件セルは、以降の条件行のセルに続きます。行iの親セルは、行i+1の子に続きます。
図5-3は、デシジョン表内のルールを示しています。ここで各ルールは、「条件」領域の各行の1つのセルと、「アクション」領域内の同じ列の関連するアクション・セルで構成されています。図5-3では、ラベルR3が付いているルールを示していますが、このルールは、条件1 (Driver.age
< 20
値)による最初のセル、条件2 (Driver.eye_test
= fail
値)による2つめのセル、条件3 (Driver.has_training
= true
値)による3つ目のセルによって定義されています。R1からR12の他のそれぞれのルールにも、デシジョン表までの一意のパスがあります。
図5-3に示すように、1つのセルが別のセルの親になり、親のセルが下位のセルにまたがることは重要です。「条件」領域では、親の条件セルが同じである複数の条件セルは、兄弟と呼ばれます。一部の操作は兄弟である条件セルにのみ適用されます。たとえば、図5-4では2つの兄弟セルが選択されており、これらのセルが選択された状態なので、「選択済セルのマージ」操作が有効になっています。これらのセルでは、対応する値セットでDriver.eye_test
の値がfail
であるものも兄弟になります(図5-4のR3列とR4列を参照)。詳細は、「デシジョン表内の条件のマージまたは分割方法」を参照してください。
ルール・デザイナでは、行を選択して「移動」ボタンをクリックすることで、行の順序を容易に変更できます。「条件」領域で行の順序を変更すると、条件セルに対する操作を必要な粒度で実行できます。つまり、条件セルの位置や、条件セルの親、子または兄弟の位置に応じて、ツリーの特定レベルでのみ適切な特定の値を分割、マージまたは割り当てる場合に、移動操作を使用できます。
5.1.2 条件セル値の理解
デフォルトでは、条件行の作成時にデシジョン表により単一の条件セルが作成され、そのセルに「?
」値が割り当てられます。条件セルの値が?
である場合は、そのセルの値が値セットでは未定義であることを示します。たとえば、図5-5にStrategyContext
の"?
"の値を示します。条件セル内の連続した値範囲は結合されていることに注意してください。たとえば、<20
と[20..40]
を選択すると、<=40
として表示されます。
5.1.3 アクション・セル値の理解
デシジョン表の「アクション」領域では、あるアクション・セルが何も実行しないように指定できます。この場合は、そのアクション・セルをクリアします。アクション・セルのチェック・ボックスがクリアされている場合は、パターンがデシジョン表内で指定された条件値に一致しても、このアクションが実行されないことを意味します。つまり、アクション・セルごとに、関連付けられているルールでアクションをアクティブにする必要があるか、またはアクションを実行しないかを指定できます。
デシジョン表では、条件セルが値セットから削除済の値を表している場合、ルール・デザイナにより次のような検証警告が表示されます。
RUL-05831: Decision table value reference not found
このタイプの検証警告を解決するには、次のいずれかを実行できます。
-
条件セルをダブルクリックしてリストから値を1つ以上選択し、値を定義します。
-
欠落している値を値セットに追加するか、その条件を、欠落している値が含まれている別の値セットに関連付けます。
5.2 デシジョン表の作成
デシジョン表を追加するには、複数のステップを実行します。
ステップには、デシジョン表の作成、値セットの作成、デシジョン表への条件とアクションの追加、デシジョン表の操作の使用(デシジョン表の検証、訂正および変更)が含まれます。
5.2.1 デシジョン表の作成方法
デシジョン表で作業するには、まずルールセット内にデシジョン表を作成します。
デシジョン表を作成するには:
ノート:
デシジョン表を追加すると、ルール検証ログに検証警告が表示されます。デシジョン表は、条件およびアクションを追加するまでは不完全なものであり、検証すると必ず警告が表示されます。
5.2.2 デシジョン表への条件行の追加方法
デシジョン表には、デシジョン表の条件行を指定するための「条件」領域が含まれています。条件行により、Oracle Rules Engineで実行時に照合されるファクトが決定されます。デシジョン表を作成するには、デシジョン表に条件行を1行以上追加する必要があります。
デシジョン表に条件行を追加するには:
5.2.4 デシジョン表へのアクションの追加方法
デシジョン表には、デシジョン表のアクションを指定するための「アクション」領域が含まれています。これにより、デシジョン表内のルールに対するアクションが決まります。有効なデシジョン表を作成するには、デシジョン表にアクションを追加します。特定の値が適用されるアクション・セルごとに、値を設定します。アクション・セルごとに、アクションがルールに適用されない場合はそのセルの選択を解除します。デフォルトでは、デシジョン表にアクションを追加すると、すべてのルールに対するアクションの選択が解除されます
デシジョン表にアクションを追加するには:
5.2.4.2 デシジョン表のアクション・セルの選択を解除する方法
アクション・セルの選択を解除するには:
- Rules Designerで、「ルールセット」ナビゲーション・タブからルールセットを選択し、アクション・セルの選択を解除するデシジョン表を選択します。
- 「アクション」領域で、アクション・セルを選択し、アクション・セル内のチェック・ボックスの選択を解除します。アクションに対して「常に選択」が設定されている場合は、アクション・セル値の選択を解除できません。
アクションを追加するときに、アクションの順序変更が必要になる場合があります。ルール・デザイナでは、「下に移動」ボタンまたは「上に移動」ボタンを使用して、アクションの順序を変更できます。
5.2.5 デシジョン表へのルールの追加方法
デシジョン表にルールを追加できます。ルール・デザイナでは、既存のルールの左側にルールの列が追加され、各条件セルは「?
」に初期化されます。これは実際には検証エラーを意味し、セルに適切な値を入力するように求めています。
デシジョン表にルールを追加するには:
- Rules Designerで、「ルールセット」ナビゲーション・タブからルールセットを選択し、ルールを追加するデシジョン表を選択します。
- 「追加」ボタンの横にあるリストから、「ルール」を選択します。
- 条件セルの値を入力します。新しいルールはデシジョン表の最初のルールとして左側に追加され、その他のルールは、値の順序が定義どおりに保たれるように、必要に応じて移動していることに注意してください。
- アクション・セルの値を入力します。
デシジョン表の「詳細設定」にある「バケットによるルールの順序付け」チェック・ボックスは、デフォルトで選択されています。この場合、新しいルールを追加すると、デシジョン表のレイアウトが自動的に変更されます。
デシジョン表に新しいルールを追加すると、新しいルールはデシジョン表の最初のルールとして追加され、その他のルールは、値の順序が定義どおりに保たれるように、必要に応じて移動します。これは、「バケットによるルールの順序付け」が有効になっているからです。つまり、デシジョン表のルールの順序は、条件式に関連付けられている値の相対位置に応じて設定されるのです。ルールを追加するときに「バケットによるルールの順序付け」が有効でない場合、新しいルールはデシジョン表の最後のルールとして追加されます。どちらの場合も、新しいルールの列のセルには、セルに値がまだ設定されていないことを示す「?」という記号が表示されます。
ノート:
「バケットによるルールの順序付け」を選択すると、ルールが順序付けされ、重複ルール(厳密に同じ値を持つルール)は結合されます。したがって、値を持たない2つのルールをデシジョン表に追加することはできません。この場合、ルールが重複することになり、即座に結合されてしまうからです。「バケットによるルールの順序付け」をクリアすると、重複ルールが許可されます。
さらに、ルール列に関連する「移動」ボタンも使用できます。これらを使用してルールの位置を変更できます。「表の行と列を反転」ボタンを使用して、デシジョン表の表示を変更します。これにより、「移動」ボタンも影響を受けます。移動方向は、上または下、左または右になります。「マージ」、「圧縮」ぉよびスパン・オプションも有効化されます。ルールを切り取り、コピー、または貼り付けることもできます。
詳細は、「デシジョン表の操作の概要」を参照してください。
5.2.6 デシジョン表でのテストの定義方法
デシジョン表でテストを定義できます。テストでは、デシジョン表内のルールを起動する場合は、trueに評価する必要があります。テストの定義とルール条件の使用方法の詳細は、「ルールの使用」を参照してください。
「データ・エクスプローラ」タブを使用すると、データ・モデル内のファクト・タイプおよび値セットを検索できます。
デシジョン表にテストを追加するには:
テストの記述の詳細は、「ビジネス・ルールのテストと検証」を参照してください。
5.3 デシジョン表の操作の概要
デシジョン表の作成後に、デシジョン表の内容を変更し、すべてのケースに関する完全なルールセットを含むデシジョン表を生成したり、複数のケースに関して最小数のルールを提供するデシジョン表を生成できます。
デシジョン表の作成後、デシジョン表に対して次のような操作を実行できます。
-
デシジョン表のセルの圧縮または分割。
-
デシジョン表内の条件のマージまたは分割。
-
デシジョン表内のルール間の競合の検出および解決。
-
デシジョン表内のギャップ(欠落しているルール)の検出と修正。
5.3.1 デシジョン表の分割操作と圧縮操作
分割操作と圧縮操作を使用すると、デシジョン表の条件セルの内容を操作できます。
表分割操作では、条件間で値の組合せごとにルールが作成されます。たとえば、3つのブール条件を持つデシジョン表には、2 x 2 x 2 = 8のルールが作成されます。32のブール条件を持つデシジョン表では、2**32から20億のルールが作成されます。したがって、作成されるルールの数が少なく、アクション・セルに十分に収まる場合は、表分割を使用するのが適切です。
デシジョン表内で考慮されない値に一致条件を適用し、セルごとに一致ケースを作成する場合は、表分割操作を使用します。
分割は、デシジョン表全体または単一の条件行に適用できます。また、個別の条件セルに対して分割を実行することもできます。
デシジョン表で選択した内容に応じて、分割操作により条件セルを作成できます。つまり、分割操作を使用してデシジョン表内でルールを作成できます。表5-3に、選択した条件セル、条件行またはデシジョン表全体に対する分割操作のまとめを示します。
表5-3 分割操作のサマリー
演算子 | 説明 |
---|---|
条件セル |
セルが表す値ごとに、兄弟の条件セルが1つ作成されます。 条件セル値が"考慮しない"である場合、そのセルは、兄弟条件セルによって表されていない値セット内の値ごとに1つの兄弟セルに分割され、"考慮しない"は表示されなくなります。 |
条件行 |
直前の条件式内の各条件セルについて、値セット内の値ごとにセルを1つ含んだ兄弟グループを作成します。この操作には、各兄弟グループに考慮されない値を追加して、各兄弟グループ内の条件セルごとにsplitをコールするのと同じ効果があります。 |
デシジョン表 |
デシジョン表内の各条件行に対してsplitをコールするのと同じ効果があります。 |
デシジョン表で選択した内容に応じて、表圧縮またはセル・マージ操作により条件セルを削除できます。表圧縮操作は、デシジョン表全体に適用できます。また、マージ操作は、兄弟セルまたは条件行全体に対して実行できます。つまり、表圧縮またはマージを使用してデシジョン表からルールを削除できます。表5-4に、表圧縮操作およびマージ操作のまとめを示します。
表5-4 マージ操作のサマリー
演算子 | 説明 |
---|---|
条件セル |
複数の条件セルをマージすると、各セル内のすべての値が単一セルに追加され、そのセルを除くすべてのセルが削除されます。セルの1つに考慮されない値が表示されている場合、マージされたセルにも考慮されない値が表示されます。 この操作ではアクション・セルをマージでき、これにより、「 |
条件行 |
各兄弟グループ内のすべての値が、直前の条件式にある条件セルごとに結合されて単一の考慮されない値セルとなります。この操作には、各兄弟グループ内のすべてのセルに対してmergeをコールするのと同じ効果があります。 この操作ではアクション・セルをマージでき、これにより、「 |
デシジョン表 |
ルールの条件を同一アクションとマージすることでデシジョン表が圧縮されます。 |
競合するアクション・セルが操作に関連付けられていない場合、分割とマージは逆の操作になります。この場合、競合するアクション・セルがなければ、マージ操作では兄弟のすべての値を1つの兄弟に結合し、他の兄弟の条件セルは破棄されます。条件セルをマージした結果、デシジョン表にアクション・セルが含まれていれば、そのアクション・セルもマージされます。つまり、マージ操作では複数の条件セルを1つの条件セルに結合し、すべての値を1つのセルに追加するのです。
競合する値を持つアクション・セルは、マージ操作では追加の手動ステップを必要とする形式でマージされます。そのため、2つのアクション・セルのパラメータが競合する場合、マージ後のアクション・セルには競合する複数のパラメータ値が含まれることになります。これらの競合する値はアクション・セルに追加され、不要な重複パラメータを選択して削除することにより手動で解決する必要があります。例については、アクション・セル内で競合する値を示す図5-12を参照してください。
1つのプロパティについて複数の値を含むアクション・セルは無効です。このアクション・セルを選択すると、ルール・デザイナではアクション・セル用の単一値を選択できるように、チェック・ボックスを含むポップアップ・ウィンドウが表示されます。図5-12の検証ログに示すように、ルール・デザイナでは単一値を選択するまで検証警告が表示されます。
5.3.1.1 デシジョン表の移動操作
デシジョン表内で条件またはアクションを移動できます。「移動」ボタンを使用すると、「条件」領域に表示される条件行や「アクション」領域に表示されるアクションの順序を変更できます。条件を上下に移動してルールの表示順序を変更できますが、これらの操作によってロジックが変わることはありません。たとえば、if (x.a == 1
and
x.b == 1
)は論理的にはif (x.b == 1
and
x.a == 1
)と同じです。
デシジョン表で作業する場合、一部の操作は兄弟である条件セルにのみ適用されます。「移動」ボタンを使用すると、デシジョン表の操作が必要な粒度でツリーに適用されるように行の順序を変更できます。たとえば、単一ルールの条件セルに対するアクションを変更する場合は、その条件セルをデシジョン表の「条件」領域の最終行に移動する必要があります。たとえば、図5-13に示すデシジョン表を考えてみます。
この表をDriver.age
の粒度で表示するには、図5-14
に示すように、Driver.age条件を第1行から第3行に移動します。
次に、最初の2つのルール(運転者が視覚テストをパスし、運転教習がtrueの場合)でDriver.age
条件が考慮されないようにします。Driver.age
条件が最終行にあるときは、これらの特定の条件に変更を簡単に適用できます。つまり、この表では、Driver.age
が最終行にあるときは、年齢に関連するルールを非常に高い粒度で、簡単に表示および変更できるようになります。一般的に、条件セルの位置や、条件セルの親、子または兄弟の位置に応じて、ツリーの特定レベルでのみ適切な特定の値を分割、マージまたは割り当てる場合に、移動操作を使用できます。
「アクション」領域内のアクションの場合は、「上へ移動」または「下に移動」をクリックするとアクションの順序を変更できます。アクションは、複数のアクションが適用される場合に最初のアクションが実行されてから以降のアクションが実行されるように順序付けされます。そのため、アプリケーションによっては、アクションに「上へ移動」または「下に移動」操作を使用することが適切な場合があります。
5.3.1.2 デシジョン表のギャップ・チェック
ギャップとは、デシジョン表内で欠落しているルールです。デシジョン表にギャップが生じるのは、各条件からの1つの値の組合せが、既存のルールの対象でない場合です。Rules Designerには、ギャップをチェックするためのギャップ・チェックが用意されています。「ギャップ分析」ボタンをクリックすると、ルール・デザイナによりギャップが検索され、検出されたギャップを修正するためのダイアログが表示されます。
ギャップがあると検証警告が表示されるように選択できます。「詳細設定」領域で「ギャップの許可」をクリアすると、ギャップの検出時にデシジョン表で検証警告がレポートされます。詳細は、「ルールおよびデシジョン表での詳細設定の使用」を参照してください。
たとえば、Driverの例では、Driver.age
< 20でDriver.has_training
がfalse
のケースを対象とするルールを削除してギャップを作成してから、「ギャップ分析」をクリックすると、図5-15に示す「ギャップ分析」ダイアログが表示されます。チェック・ボックスを選択して「OK」をクリックすると、すべてのルールまたは選択したルールがデシジョン表に追加されます(この例では、追加対象として単一のルールが表示されているのみです)。
次のケースについては、ギャップ・チェックにより異なる新規ルールが生成されます。
-
兄弟ルール: 欠落している複数の兄弟ルールが単一の新規ルールとして追加されます。たとえば、2つの条件
Driver.age
およびDriver.hair
を持つルールを考えてみます。異なる髪色に関して2つのルールが欠落しており、それらが兄弟(つまり、共通の親を持つ)ルールの場合、ギャップ・チェックでは図5-16に示すように単一ルールが表示されます。 -
非兄弟ルール: 欠落している複数の非兄弟ルールが、個別の新規ルールとして追加されます。たとえば、同じ親を持たない2つの異なるルールが欠落している場合、ギャップ・チェックでは図5-17に示すように2つのルールが表示されます。
図5-16と図5-17に示したどちらの場合も2つの値が欠落していますが、兄弟ルールの場合は複数の値が結合されて新規の単一ルールになります。したがって、通常、ギャップ・チェックでは、多数の限定的なルールではなく少数の汎用的なルールが提案されます。
兄弟ルールの場合は、複数のルールを追加した後、必要な値を取得するように各セルを編集できます。または、ギャップの検索を使用してルールを追加してから、複数の値を含むセルを分割し、不要なルールを削除します。
5.3.1.3 デシジョン表の競合分析
デシジョン表内のルールが競合する場合があります。2つのルールが競合するのは、両者が重複し、異なるアクションが設定されている場合です。2つのルールが重複するのは、その条件セルの1つ以上に共通する値がある場合です。重複は、デシジョン表に考慮されない条件セルが含まれている場合に一般的です。競合のない重複は一般的であり、問題はありません。
Rules Designerでは競合が検出され、「競合の表示」をクリックするとデシジョン表の「競合解決」行に競合を表示できます。競合を処理して解決する方法は、指定された競合ポリシーによって異なります。競合ポリシーを選択するか、デフォルトの手動競合ポリシーを使用できます。「詳細設定」領域の「競合ポリシー」オプションを使用して競合ポリシーを設定すると、Rules Designerによってデシジョン表の競合ポリシーが設定されます。「競合ポリシー」では、デシジョン表の競合ポリシーとして、次のいずれかを指定します。
-
手動: 競合ルールごとに競合解決を手動で指定することで、競合を解決します。
-
自動オーバーライド: Oracle Business Rules自動競合解決ポリシーを使用して、可能な場合に、オーバーライド競合解決を使用して競合を自動的に解決します。
-
無視: 競合が無視されます。
詳細は、「ルールおよびデシジョン表での詳細設定の使用」を参照してください。たとえば、図5-18に示されているデシジョン表の競合ルールは、デフォルトの手動競合ポリシーで解決されています。
デシジョン表の「競合解決」領域でセルをクリックすると、次の方法でルール間の競合を解決できます。
-
オーバーライド(「Override」および「OverriddenBy」): あるルールを他のルールでオーバーライドできます。オーバーライドにより、1つのルールの起動を指定します。オーバーライドは、優先度設定と相互排他を組み合せたものです。優先度設定は一時的であり、相称的ではありません。相互排他は一時的かつ相称的です。AによりCがオーバーライドされ、BによりCがオーバーライドされる場合、実行順序は最初にAまたはB、次にCとなりますが、実行されるのはA、BまたはCのうち1つのみです。
-
前に実行(「RunBefore」および「RunAfter」): ルールを優先付けします。「前に実行」では、2つのルールを規定の順序で起動します。優先度設定は一時的ですが、相称的ではありません。つまり、AがBより前に、BがCより前に実行される場合、AはCより前に実行されますが、BはAより前には実行されません。ここでは、デシジョン表のrunBeforeリストが使用されます。このリストでは「前に実行」するルールの方がリスト内のルールよりも優先度が高くなることを指定しています。
-
無視(「NoConflict」): 競合を無視します。無視により、2つのルールが任意の順序で起動されます。たとえば、デシジョン表内で競合する次のルールを考えてみます。
rule1: everybody gets a 10% raise (as specified with a do not care value in a decision table condition cell) rule2: employee with Top Performer set to true gets a 5% raise
これらのルールでは、rule2によりrule1がオーバーライドされると、最上位成績者が5%の昇給を取得し、それ以外の全員が10%の昇給を取得します。ただし、この場合は、両方のルールを起動させます。どちらのルールを最初に起動しても問題なく、競合もないため、どちらを先に起動しても最上位成績者は15.5%の昇給を取得します。この場合は、NoConflictリストを使用して競合を解決します。競合なしとは、同一の優先度を持つIF/THENルールで取得するものであり、競合は警告されないのみで、一方のルールで他方のルールをオーバーライドするかどうかは慎重に考慮する必要があることに注意してください。
図5-19に、「競合解決」領域で競合するルールを選択したときに表示される、Rules Designerの「競合解決」ダイアログを示します。このダイアログでは、オーバーライド、「RunBefore」または「RunAfter」オプションによる優先度設定および「NoConflict」オプションを選択して、ルール間の競合を解決できます。
デシジョン表の「詳細設定」の「競合ポリシー」の「自動オーバーライド」オプションを使用すると、可能な場合は競合を自動的に解決するように指定できます。自動オーバーライド競合解決ポリシーでは、特殊ケースにより一般的なケースがオーバーライドされるように指定します。詳細は、「ルールおよびデシジョン表での詳細設定の使用」を参照してください。
つまり、デシジョン表に競合がある場合は、次の1つ以上を実行して競合を解決できます。
-
デシジョン表の「競合ポリシー」→「自動オーバーライド」 オプションを選択して、自動オーバーライド競合解決を使用します。
-
デシジョン表の「競合ポリシー」→「無視」オプションを選択して、競合を無視します。
-
デシジョン表の「競合ポリシー」→「手動」 オプションを選択することで、手動の競合解決を使用し、「競合の表示」チェック・ボックスを選択した状態で「競合解決」領域でセルを選択することで、ダイアログ内の競合するルールごとに「競合解決」を設定します。
-
デシジョン表を変更して重複を削除します。
-
アクションを結合して競合を削除します。
5.3.2 デシジョン表の圧縮または分割方法
「表の圧縮」ボタンおよび「表の分割」アイコンを使用して、デシジョン表を圧縮または分割します。詳細は、「デシジョン表の分割操作と圧縮操作」を参照してください。
デシジョン表のセルを圧縮または分割するには:
- ルール・デザイナで、「ルールセット」ナビゲーション・タブからルールセットを選択します。「概要」タブでデシジョン表を選択し、「編集」をクリックします。
- 「表の圧縮」ボタンをクリックして圧縮するか、「表の分割」ボタンをクリックしてセルを分割します。
5.3.3 デシジョン表内の条件のマージまたは分割方法
条件マージ操作および条件分割操作を使用して、デシジョン表内の条件をマージまたは分割します。詳細は、「デシジョン表の分割操作と圧縮操作」を参照してください。
デシジョン表内の条件をマージまたは分割するには:
- ルール・デザイナで、「ルールセット」ナビゲーション・タブからルールセットを選択します。「概要」タブで、条件をマージまたは分割するデシジョン表を選択し、「編集」をクリックします。
- 「条件」領域で、マージまたは分割する条件を選択します。
- 右クリックしてリストから「条件のマージ」または「分割条件」を選択します。
5.3.4 条件セル操作を使用する方法
条件セル操作を使用して、条件セルの分割、兄弟条件セルのマージまたはデシジョン表内の条件セルについて考慮されない値を指定します。詳細は、「デシジョン表の分割操作と圧縮操作」を参照してください。
5.3.4.1 デシジョン表内の条件の兄弟セルをマージする方法
- ルール・デザイナで、「ルールセット」ナビゲーション・タブからルールセットを選択します。「概要」タブで、条件セルをマージするデシジョン表を選択し、「編集」をクリックします。
- マージする兄弟条件セルを選択します。
- 右クリックしてリストから「選択済セルのマージ」を選択します。
5.3.4.2 デシジョン表内の条件のセルを分割する方法
- ルール・デザイナで、「ルールセット」ナビゲーション・タブからルールセットを選択します。「概要」タブで、条件セルを分割するデシジョン表を選択し、「編集」をクリックします。
- 分割するセルを選択します。
- 右クリックしてリストから「選択済セルの分割」を選択します。
5.3.4.3 デシジョン表内の条件セルについて考慮されない値を指定する方法
- Rules Designerから、「ルールセット」ナビゲーション・タブでルール・セットを選択し、考慮されない値を設定するデシジョン表を選択します。
- 該当する条件セルを選択します。
- 右クリックしてリストから「考慮しない」を選択します。
5.3.5 デシジョン表のギャップ・チェックの実行方法
ギャップとは、デシジョン表内で欠落しているルールです。デシジョン表にギャップが生じるのは、各条件からの1つの値の組合せが、既存のルールの対象でない場合です。Rules Designerには、ギャップをチェックするためのギャップ・チェックが用意されています。この操作を使用すると、ルール・デザイナにギャップを修正するためのウィンドウが表示されます。詳細は、「デシジョン表のギャップ・チェック」を参照してください。
ギャップがあると検証警告が表示されるように選択できます。「詳細設定」領域で「ギャップの許可」をクリアすると、ギャップの検出時にデシジョン表で検証警告がレポートされます。詳細は、「ルールおよびデシジョン表での詳細設定の使用」を参照してください。
デシジョン表のギャップ・チェックを実行するには:
- ルール・デザイナで、「ルールセット」ナビゲーション・タブからルールセットを選択します。「概要」タブで、ギャップのチェックを実行するデシジョン表を選択し、「編集」をクリックします。
- 「ギャップ分析」ボタンをクリックします。
5.3.6 デシジョン表の手動競合解決の実行方法
デシジョン表内のルールが競合する場合があります。2つのルールが競合するのは、両者が重複し、異なるアクションが設定されている場合です。2つのルールが重複するのは、その条件セルの1つ以上に共通する値がある場合です。詳細は、「デシジョン表の競合分析」を参照してください。
デシジョン表の競合解決を手動で実行するには:
- ルール・デザイナで、「ルールセット」ナビゲーション・タブからルールセットを選択します。「概要」タブで、競合をチェックするデシジョン表を選択し、「編集」をクリックします。
- 競合ポリシーを「手動」に設定します(デフォルトの競合ポリシーです)。詳細は、「デシジョン表の競合分析」を参照してください。
- 「条件」領域で、「競合」領域に競合が存在する場合は、競合のあるルールごとに該当する条件セルをダブルクリックして「競合解決」ダイアログを表示します。
- 「競合解決」ダイアログで、競合するルールごとに、「解決」フィールドのリストから解決を選択します。
5.3.7 デシジョン表の自動オーバーライド競合解決ポリシーの設定方法
デシジョン表で「詳細設定」オプションを選択する際に、「自動オーバーライド」競合ポリシーを使用してデシジョン表の競合が自動的に解決されるように選択できます(これは、Oracle Business Rules自動競合解決ポリシーを使用して競合を解決可能な場合にのみ適用されます)。自動オーバーライド競合解決ポリシーでは、ルールが競合する場合に特殊ケースにより一般的なケースがオーバーライドされるポリシーが使用されます。詳細は、「デシジョン表の競合分析」を参照してください。
自動オーバーライド・ポリシーを選択するには:
- 無視の競合ポリシーを使用するルールまたはデシジョン表を選択します。
- ルール名またはデシジョン表名の横にある「詳細設定の表示」ボタンをクリックします。
- 「競合ポリシー」オプションで、「自動オーバーライド」を選択します。
5.3.8 デシジョン表の競合ポリシーの無視の設定方法
デシジョン表で「詳細設定」オプションを選択する際に、「無視」の競合ポリシーを使用して、デシジョン表の競合が無視されるように設定できます。無視のポリシーにより、Oracle Business Rulesはデシジョン表での競合を無視するようになります。詳細は、「デシジョン表の競合分析」を参照してください。
無視の競合ポリシーを選択するには:
- 無視の競合ポリシーを使用するルールまたはデシジョン表を選択します。
- ルール名またはデシジョン表名の横にある「詳細設定の表示」ボタンをクリックします。
- 「競合ポリシー」オプションで、「無視」を選択します。
5.4 Oracle Business Rulesデシジョン表アプリケーションの作成と実行
注文承認アプリケーションは、SOAコンポジット・アプリケーションとOracle Business Rulesとの統合、およびデシジョン表の使用方法を示しています。
このアプリケーションでは、プロセスは次の目的でデシジョン・コンポーネントを使用するようにモデル化されています。
-
XML入力(顧客の信用スコアと年間消費額、および受注分の合計コストなど)からのルールの処理
-
注文が承認されたか、拒否されたかまたは手動処理が必要であるかを判別する出力の提供
この手順を完了するには、次の作業が必要です。
-
注文承認アプリケーションのソース・ファイルの取得
-
注文承認アプリケーションの作成
-
注文承認のビジネス・ルール・サービス・コンポーネントの作成
-
注文承認のデータ・モデル要素の表示
-
注文承認のデータ・モデルへの値セットの追加
-
値セットとOrderプロパティおよびCreditScoreプロパティの関連付け
-
注文承認用デシジョン表の追加
-
デシジョン表のセルの分割とアクションの追加
-
デシジョン表の圧縮
-
1つの一般ルールによる複数の限定的ルールの置換
-
一般ルールの追加
-
-
注文承認のディクショナリ・ビジネス・ルール検証ログのチェック
-
注文承認アプリケーションのデプロイ
-
注文承認アプリケーションのテスト
5.4.1 注文承認アプリケーションのソース・ファイルの取得方法
Oracle Business Rules固有のサンプルとSOAのサンプルのソースコードは、Oracle SOA Suiteのサンプルおよびチュートリアル・ページからオンラインで入手できます。
注文承認アプリケーションで作業するには、order.xsd
スキーマ・ファイルを取得して(オンラインで入手したサンプル・プロジェクトから取得するか、作成することもできます)、すべてのアプリケーション、プロジェクトおよびその他のファイルをOracle JDeveloperで作成する必要があります。次の例に示すスキーマ・ファイルをローカルに保存して、Oracle JDeveloperで使用可能にできます。
次の例に、order.xsd
スキーマ・ファイルを示します。
<?xml version="1.0" ?> <schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://example.com/ns/customerorder" xmlns:tns="http://example.com/ns/customerorder" xmlns="http://www.w3.org/2001/XMLSchema"> <element name="CustomerOrder"> <complexType> <sequence> <element name="name" type="string" /> <element name="creditScore" type="int" /> <element name="annualSpending" type="double" /> <element name="value" type="string" /> <element name="order" type="double" /> </sequence> </complexType> </element> <element name="OrderApproval"> <complexType> <sequence> <element name="status" type="tns:Status"/> </sequence> </complexType> </element> <simpleType name="Status"> <restriction base="string"> <enumeration value="manual"/> <enumeration value="approved"/> <enumeration value="rejected"/> </restriction> </simpleType> </schema>
5.4.2 注文承認アプリケーションの作成方法
Oracle Business Rulesで作業するには、最初にOracle JDeveloperでアプリケーションを作成します。
注文承認アプリケーションを作成するには:
-
「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。
-
「アプリケーションの名前付け」ダイアログで、新規アプリケーションの名前および場所を入力します。
-
「アプリケーション名」フィールドで、アプリケーション名を入力します。たとえば、
OrderApprovalApp
と入力します。 -
「ディレクトリ」フィールドで、ディレクトリ名を指定するか、またはデフォルトを使用します。
-
「アプリケーション・パッケージの接頭辞」フィールドに、アプリケーション・パッケージの接頭辞(
com.example
.order
など)を入力します。接頭辞に続いてピリオドが、アプリケーションの初期プロジェクト内に作成されたオブジェクトに付加されます。
-
Oracle Business RulesでのSOAコンポジットの場合は、「アプリケーション・テンプレート」領域でアプリケーション・テンプレートとして「SOAアプリケーション」を選択します。例については、図5-20を参照してください。
-
「次へ」をクリックします。
-
-
「プロジェクトの名前付け」ページで、プロジェクトの名前および場所を入力します。
-
「プロジェクト名」フィールドに名前を入力します。たとえば、
OrderApproval
と入力します。 -
ディレクトリ名を入力または参照するか、デフォルトを使用します。
-
Oracle Business Rulesプロジェクトの場合は、図5-21に示すように、「プロジェクト・テクノロジ」タブの「選択済」領域に、「SOA」、「ADFビジネス・コンポーネント」、「Java」および「XML」が表示されていることを確認します。項目が欠落している場合は、その項目を「選択可能」ペインで選択し、「追加」ボタンを使用して「選択済」ペインに追加します。
-
-
「終了」をクリックします。
5.4.3 注文承認のビジネス・ルール・サービス・コンポーネントの作成方法
Oracle JDeveloperでプロジェクトを作成した後、プロジェクト内でビジネス・ルール・サービス・コンポーネントを作成する必要があります。ビジネス・ルールを追加する際、入力変数および出力変数を作成して、サービス・コンポーネントに入力を提供し、サービス・コンポーネントから結果を取得できます。
ビジネス・ルールをOracle JDeveloperで使用する手順は、次のとおりです。
-
ビジネス・ルール・サービス・コンポーネントを追加します。
-
サービス・コンポーネントの入力変数および出力変数を作成します。
-
プロジェクト内でOracle Business Rulesディクショナリを作成します。
ビジネス・ルール・サービス・コンポーネントを作成するには:
ビジネス・ルール・サービス・コンポーネントを使用すると、SOAコンポジット・アプリケーションをビジネス・ルールと統合できます。これにより、ビジネス・ルール・ディクショナリが作成され、ビジネス・ルールを実行し、ルールに基づいてビジネス上の決定を下すことができます。
5.4.4 注文承認のデータ・モデル要素の表示方法
ルールを追加する前に、Oracle Business Rulesデータ・モデルを作成する必要があります。データ・モデルには、ビジネス・データの定義(タイプ)およびルールの作成に使用するファクトの定義が含まれています。たとえば、このサンプルのデータ・モデルには、ビジネス・ルール・アクティビティの入力および出力を定義する際に指定するorder.xsd
からのXMLスキーマ要素が含まれています。
ルール・デザイナを使用してルールまたはデシジョン表を作成する際に、データ・モデルの要素の作成や変更が必要になる場合があります。
Oracleビジネス・ルールのデータ・モデル要素を表示するには:
5.4.5 注文承認のデータ・モデルに値セットを追加する方法
デシジョン表を使用するには、デシジョン表を構成する条件の各セルについて、値の描画方法を指定する値セットを定義する必要があります。この例では、ルール・デザイナで定義する範囲のリストを使用して、値セットを定義します。
OrderAmount値セットをデータ・モデルに追加するには:
5.4.5.1 CreditScore値セットをデータ・モデルに追加する方法
CreditScore値を追加するには:
- ルール・デザイナで、「値セット」ナビゲーション・タブを選択します。
- 「値セットの作成」ボタンの横にあるドロップダウンから「範囲リスト」を選択します。
- 「名前」フィールドに、
CreditScore
と入力します。 - 「CreditScore」値セット・アイコンをダブルクリックし、「値セットの編集」ダイアログを表示します。
- 「値の追加」をクリックし、値を追加します。
- 「値の追加」を再度クリックし、別の値を追加します。
- 最上位値セットについて、「エンドポイント」フィールドに
750
と入力します。 - 中間値セットについて、「エンドポイント」フィールドに
400
と入力します。 - 各値セットの「含まれるエンドポイント」フィールドでチェック・ボックスが選択されていることを確認します。
- 各エンドポイント値の「エイリアス」フィールドを、750は「solid」に、400は「avg」に、-Infinityは「risky」に変更します。「OK」をクリックします。
5.4.6 値セットをOrderプロパティおよびCreditScoreプロパティに関連付ける方法
デシジョン表を作成する準備のため、値セットをデータ・モデル内のファクト・プロパティに関連付けることができます。これにより、デシジョン表の作成時に、デシジョン表の「条件」領域にある条件セルで値セットを使用できるようになります。
OrderApproval
ファクト・タイプがXMLスキーマからインポートされた時点で、Status
値セットにOrderApproval.status
プロパティが関連付けられていることに注意してください。スキーマ内では、Status
がString
タイプに制限されるため、列挙値セットとして表されます。ルール・デザイナにより、Status値セットが作成されます。詳細は、「XMLファクトに関する必知事項」を参照してください。
値セットをOrderおよびCreditScoreプロパティに関連付けるには:
5.4.7 注文承認用デシジョン表の追加方法
デシジョン表を作成して、入力ファクトを処理して出力ファクトを生成するか、または暫定的な結論を生成します。暫定的な結論は、Oracle Business Rulesにより他のルールを使用するか別のデシジョン表内でさらに処理できます。
ルールを操作する際に、ルール・デザイナのルール検証機能を使用できます。ディクショナリを変更すると、ルール・デザイナではディクショナリ検証が実行されます。検証ログ・ウィンドウを表示するには、「検証」ボタンをクリックするか、または「表示」→「ログ」を選択して、「ビジネス・ルール検証」タブを選択します。ルール検証ログを表示すると、警告メッセージが表示されます。これらの警告メッセージは、デシジョン表を作成すると削除されます。ルール検証の詳細は、「ルール検証」を参照してください。
このサンプル・アプリケーションでルールにデシジョン表を使用するには、特定の顧客および特定の注文に関して顧客の消費レベルおよび顧客の信用リスクを表すファクトを操作します。次に、デシジョン表を使用し、顧客の消費額、注文金額および顧客の信用リスクに基づくルールを作成します。
注文承認用のデシジョン表を追加するには:
5.4.7.2 デシジョン表のセルの分割とアクションの追加
デシジョン表の分割操作を使用して、デシジョン表の条件行に関連付けられた値セットに関するルールを作成できます。これにより、条件値セットの組合せごとにルールが1つ作成されます。3つの注文金額値セット、3つの信用スコア値セット、および年間消費額用の2つのブール値セットがあり、ルールは合計18個(3 x 3 x 2 = 18)となります。
デシジョン表のセルを分割するには:
- デシジョン表を選択します。
- デシジョン表で、「表の分割」ボタンをクリックし、リストから「表の分割」を選択します。表の分割操作により、考慮されないセルが表から消去されます。図5-34に示すように、表にはすべての範囲を対象とする18のルールが表示されています。
これらのステップでは、欠落している式があるアクション・セルに関する検証警告が生成されます。これらの警告は後のステップで修正します。
5.4.7.3 デシジョン表内のルールごとにアクションを追加する方法
デシジョン表の「アクション」領域で、各アクション・セルのOrderApprovalに関連付けられているstatusプロパティの値を指定します。可能な選択肢は、「Status.MANUAL
」、「Status.REJECTED
」または「Status.ACCEPTED
」です。このステップでは、18のルールそれぞれについて、statusの値を入力します。入力した値は、デシジョン表の各ルールを構成する条件に対応します。
デシジョン表内のルールごとにアクションを追加するには:
表5-5 デシジョン表のアクションの値
ルール | C1 creditScore | C2順序 | C3 annualSpending > 2000 | A1 OrderApprovalのステータス |
---|---|---|---|---|
R1 |
risky |
低 |
true |
|
R2 |
risky |
低 |
false |
|
R3 |
risky |
中 |
true |
|
R4 |
risky |
中 |
false |
|
R5 |
risky |
高 |
true |
|
R6 |
risky |
高 |
false |
|
R7 |
avg |
低 |
true |
|
R8 |
avg |
低 |
false |
|
R9 |
avg |
中 |
true |
|
R10 |
avg |
中 |
false |
|
R11 |
avg |
高 |
true |
|
R12 |
avg |
高 |
false |
|
R13 |
solid |
低 |
true |
|
R14 |
solid |
低 |
false |
|
R15 |
solid |
中 |
true |
|
R16 |
solid |
中 |
false |
|
R17 |
solid |
高 |
true |
|
R18 |
solid |
高 |
false |
|
5.4.7.4 デシジョン表の圧縮
このステップでは、18のルールを9つのルールにマージして圧縮します。これにより、不要なルールが自動的に消去され、デシジョン表にギャップや競合するプロパティのない状態が保持されます。
デシジョン表を圧縮するには:
- デシジョン表を選択します。
- 「すべての列を同じ幅にサイズ変更」ボタンをクリックします。
- 「表の圧縮」ボタンをクリックし、リストから「表の圧縮」を選択します。表圧縮操作により、デシジョン表からルールが消去されます。図5-36に示すように、デシジョン表には9つのルールが表示されるようになります。
5.4.7.5 1つの一般ルールによる複数の限定的ルールの置換
残る9つのルールのうち5つでは、手動注文承認ステータスになることに注意してください。ルール数は、これら5つのルールを削除することで減らすことができます。通常は、このことは行わない、つまり、複数の限定的ルールを1つの一般ルールで置き換えないことがベスト・プラクティスです。ルール数を減らす際には、少数のルールを使用するメリットおよびルール数の減少で生じる競合の管理に伴う複雑さを比較する必要があります。
複数の限定的ルールを1つの一般ルールで置き換えるには:
5.4.7.6 一般ルールの追加
これで、手動の場合を処理する単一ルールを追加できます。このルールを追加したら、競合解決に対して、「競合ポリシー」の「自動オーバーライド」オプションを使用して競合ポリシーを設定します。
一般ルールを追加するには:
5.4.8 注文承認のビジネス・ルール検証ログのチェック方法
アプリケーションをデプロイする前に、ディクショナリが警告なしで検証されることを確認する必要があります。検証警告がある場合は、それに関連する問題を解決する必要があります。ディクショナリを検証するには、「ビジネス・ルール検証」ログで、検証警告をチェックします。警告がある場合は、適切なアクションを実行して問題を修正します。
5.4.9 注文承認アプリケーションのデプロイ方法
SOAアプリケーションで作成されたビジネス・ルールは、Oracle JDeveloperでデプロイメント・プロファイルを作成するときに、SOAコンポジットの一部としてデプロイされます。SOAコンポジット・アプリケーションをOracle WebLogic Serverにデプロイします。
注文承認アプリケーションをデプロイして実行するには:
5.5 Microsoft Excelでのデシジョン表の編集
ビジネス・ユーザーの場合は、Microsoft Excelを使用するとデシジョン表の編集が容易になることがあります。新機能を使用すると、開発者とビジネス・ユーザーのどちらも、デシジョン表をエクスポートしてExcelで編集してから、ディクショナリにデシジョン表をインポートして戻すことができます。
デシジョン表は、設計時にエクスポートして、Oracle JDeveloperまたはBusiness Process Composerで編集できます。実行時には、エクスポートしてSOAコンポーザで編集できます。ルール・ディクショナリから同じExcelワークブックに1つ以上のデシジョン表をエクスポートできます。
ディクショナリにインポートして戻すときに、新しいディクショナリを作成するか、既存のディクショナリを上書きするか、差異のマージを実行することができます。差異のマージにより、ディクショナリを比較して、任意の差異を受け入れたり(マージ)、拒否することができます。
ディクショナリの比較の詳細は、「2つ以上のディクショナリを比較またはマージする方法」を参照してください。
Excelワークブックの構造は、図5-43に示すように複数のワークシートで構成されます。これらのシートは1枚のREADMEシート、1枚の値セットシートおよびエクスポートされた各デシジョン表に対応する1枚ずつのシートです。Excelで編集できるものはルールと値セットのみです。.xlsm (デフォルト)または.xlsにエクスポートできます。
Excelワークブックを開く際のデフォルトではマクロが無効化されています。マクロを有効にすると、「Oracle Business Rules」という新しいタブが表示されます。このタブで、ルールの追加または削除、セルのマージまたは分割、値セットの値の追加または削除を実行できます。また、強調表示の無効化または有効化、簡易モードまたは拡張モードの使用、READMEワークシートの非表示または表示も実行できます。
マクロを無効にした状態でも編集はできますが、次のことを実行できません。
-
制限付きセルでのドロップ・リストからの値の選択
-
フリー・フォーム・セルの編集
-
セル範囲のコピーおよび貼付けによるルールまたは値セットの追加
-
セル範囲の削除によるルールまたは値セットの削除
-
セルの分割またはマージ
-
値セットの自動作成
-
デシジョン表または値セットの構造の検証
事前定義済のマクロを使用すると、次の実行が可能になります。
-
ルールの追加と削除
-
セルの分割またはマージ
-
値セットの追加または削除
-
編集可能なセルには次が含まれます。
-
ルール、条件、アクションの説明。
-
条件およびアクション・ノード。
-
アクションの状態。
-
アクション・パラメータのパラメータ化オプション
-
-
編集不可のセルには次が含まれます。
-
条件式。
-
アクション式。
-
アクション・パラメータ。
これらのセルを編集しようとすると、図5-44に示すようにエラー・メッセージが表示されます。
-
5.5.1 エクスポートされるものの理解
SDKには、複数のデシジョン表にわたる複数の条件と関連付けることができる共有値セットがあります。ただし、Excelでは、共有値セットは存在しません。各条件に独自の値セットがあるため、Excelで変更可能な場合にエクスポート可能な値セットは1つのみになります。変更不可の値セットには、次が含まれます。
-
リンク先のディクショナリ値セット。
-
列挙。
-
ブール値セットなどの内部値セット。
ワークシートでは、変更不可の値セットと関連付けられた条件のドロップダウンから値を選択することのみが可能です。強調表示メカニズムによって、変更不可の値セットに関連付けられている条件が示されます。
5.5.2 デシジョン表をエクスポートする方法
図5-45に示すように、エクスポートおよびインポート機能は、ツールバー・ボタンを使用して起動できます。
デシジョン表をエクスポートするには:
- ルール・デザイナで、「Excelにエクスポート」をクリックします。
- 「Excelにエクスポート」ダイアログ・ボックスで、「形式」を選択し、ワークブックを保存するフォルダを参照します。
- 「追加」をクリックし、エクスポートするデシジョン表(複数可)を選択し、「OK」をクリックします。
- 「読取り専用値セット」チェック・ボックスを選択し、Excel内のすべての値セットを読取り専用にします。Excelワークブックに値セット・シートが存在しなくなります。すべての条件に、ドロップダウン・メニューがあり、それらの値は選択できますが、値を追加したり削除することはできません。
- 「エクスポート」をクリックします。これで、ワークブックを開き、デシジョン表を編集できます。
5.5.3 編集済デシジョン表をディクショナリにインポートして戻す方法
図5-45に示すように、エクスポートおよびインポート機能は、ツールバー・ボタンを使用して起動できます。インポートできるExcelワークブックは前にエクスポートしたもののみです。
編集済デシジョン表をインポートするには:
5.5.4 Excelでデシジョン表を編集する方法
Excelで、マクロを有効化して、「Oracle Business Rules」タブを表示します。これにより、ルールの作成、値セットの編集、およびプリファレンスの設定を行えるオプションが表示されます。
5.5.4.3 値セットの表示または非表示と説明の編集
図5-49に示すように、値セット・ワークシートで右クリックし、値の表示/非表示を選択して、値の表示と非表示を切り替えます。また、右クリックしてバケットの説明の編集を選択し、説明を変更することもできます。
5.5.4.5 簡易または拡張モードの使用方法
ワークシートで、「簡易モード」または「拡張モード」をクリックし、2つのモード間で切り替えます。
簡易モードでは、条件およびアクションの説明のみ表示され、実際の式は表示されません。また、アクション・パラメータが表示されますが、それらを固定または可変として指定することはできません。
図5-51に示すように、拡張モードでは、条件およびアクションについて説明と式の両方が表示されます。また、アクション・パラメータ・タイプを固定または可変に指定できます。これは、SDKでパラメータ化または定数を指定することと同等です。
5.5.4.6 ReadMeワークシートの非表示または表示
図5-52に示すように、「ReadMeシートの非表示」または「ReadMeシートの表示」をクリックして、モードを切り替えることができます。ReadMeワークシートは、「Oracle Business Rules」タブでの機能の使用方法に関する役立つ情報を提供します。
5.5.4.7 条件セルの編集
図5-53に示すように、ドロップダウンから選択するか、自動追加を使用して新しい値を追加できます。条件セルのいくつかでは、ドロップダウン・メニューから値を選択することのみが可能です。これらのセルは、色コードを使用することで区別化されています。値セットまたはデシジョン表の間で変更した条件は、すべて自動的に同期されます。
5.5.4.10 アクション式のパラメータの編集
図5-55に示すように、アクション・パラメータを固定または可変にすることができます。アクション・パラメータが固定である場合、すべてのルールで、その特定のパラメータが同じ値になります。アクション・パラメータが可変である場合、ルールごとに、その特定のパラメータを異なる値にすることができます。
5.5.4.11 説明の編集
アクション、条件およびルールの説明を編集できます。いずれのアクション、条件またはルールに対しても説明が入力されていない場合、デフォルトでそれぞれA、CまたはRの後にデシジョン表でのその位置を示す番号が続きます。
5.5.4.13 値セット・ワークシートでの値のエイリアス
値セット・シートでは、値セットごとに2つの行があります。最初の行は値を示し、2番目のものは値のエイリアスを示します。条件セルのドロップダウンに表示されるのは、値のエイリアスです。エイリアスは編集できます。エイリアスで行われた変更はすべて、即時に、対応する条件セルで使用可能になります。