ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Business Rulesユーザーズ・ガイド
11gリリース1 (11.1.1.9)
B55917-07
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

5 デシジョン表の使用

この章では、デシジョン表を使用して、IF/THENルール書式の代替となるわかりやすい書式でビジネス・ルールを作成し、使用する方法について説明します。さらに、条件、競合、アクションなど、デシジョン表の各種コンポーネントについて取り上げ、デシジョン表に対して実行できる様々な操作についても説明します。

この章の項目は、次のとおりです。

5.1 デシジョン表の使用の概要

企業は、自社のビジネス・プロセスを自動化するためにソフトウェアに投資しています。従来、この自動化の焦点は、データに関する意思決定を容易にするためのデータの収集、プレゼンテーションおよび操作に置かれていました。しかし、ビジネス・プロセスに関するルール詳細をソフトウェア・アーキテクチャに組み込むことで意思決定プロセスを自動化するという、ソフトウェア設計者と開発者に対する要求が大きくなってきています。また、多くの企業は、ビジネスの変化に対するソフトウェア・システムの応答性を高めようという圧力の高まりに直面しています。場合によっては、ビジネス・ルールを記述およびテストする役割が、ソフトウェア・エンジニアではなく、研修を受けたビジネス・ユーザーに割り当てられるようになりました。また、ソフトウェアのビジネス上の動作の変更を従来のソフトウェア開発サイクルから分離し、その変更内容を製品や販売サイクルのようなビジネス主導の規範に関連付ける組織もあります。

デシジョン表は、特にコンピュータ・プログラマではなくビジネス・アナリストが記述を担当する場合に、データ処理タスクを記述するためのメカニズムを提供します。

スプレッドシートに慣れたビジネス・アナリストにとって、デシジョン表の書式は直感的なものです。デシジョン表に用意されている仮の構造により、複数の類似するルールを容易に作成、理解および変更でき、ソフトウェアでルールの完全性および整合性をチェックできます。

Oracle Business Rulesデシジョン表には、次の機能があります。

  • 強力な視覚化: コンパクトで構造化されたプレゼンテーション。この視覚化は、多数の表を使用し、宣言的で単純なステップに編成されるという、現実のビジネス・ポリシーの表現方法に適合しています。

  • エラー防止: 不完全性や非整合性を回避します。デシジョン表は適切に構造化されているため、自動化されたツールで競合、冗長性および不完全性をチェックし、有効で整合性のあるビジネス・ルールを迅速に開発できます。

  • モジュール形式の情報編成: 複数のルールが単一の表にグループ化されます。スプレッドシートのように、連携して動作するルールのグループが単一の表示可能ペインに置かれます。たとえば、申込者が適格かどうかをチェックする6つのルールがある場合、個別ではあっても関連するルールとして表示するのではなく、6つのルールすべてを表示する方が便利です。

  • ルールの最適化およびパフォーマンス上のメリット: Oracle Business Rulesのデシジョン表には自動化された機能が用意されており、IF/THENルールに比べて、必要なルールの数を削減できます(これをルールの結合と呼びます)。

  • ルール検証機能: デプロイメント前にルールの論理的な整合性を確認する機能が用意されています。競合、不完全性またはギャップをチェックするように自動化されたツールを使用して、有効で整合性のあるビジネス・ルールを迅速に開発できます。

デシジョン表を使用する主な理由は、検証および視覚化が容易であることです。

詳細は、第4章「ルールセットとルールの使用」を参照してください。

5.1.1 デシジョン表とは

デシジョン表では、スプレッドシート形式の単一ビューに複数の関連するルールが表示されます。ルール・デザイナの場合、デシジョン表には関連するビジネス・ルールのコレクション、条件行、ルールおよびアクションがわかりやすい表形式で表示されます。ビジネス・ユーザーは、各セルおよびそれぞれの値をすばやく比較し、デシジョン表のルール分析機能(ルール・デザイナでアイコンをクリックして値を選択することで使用可能)を使用し、競合するケースや欠落しているケースを識別し、訂正できます。

デシジョン表の概念を理解しやすいように、運転者に免許資格があるかどうかを判別する一連のIF/THENルールおよび、それと同等のデシジョン表を示します。運転免許の教習を受講済の運転者が受講証明を持っていることに注意してください。

このIF/THENルールは次のようになります。

if driver.age < 20 and driver.has training then driver.eligible = 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 条件とアクションを使用するサンプル・デシジョン表

図5-1の説明が続きます
「図5-1 条件とアクションを使用するサンプル・デシジョン表」の説明

5.1.1.1 デシジョン表の条件に関する必知事項

デシジョン表の「条件」領域には、1行以上の条件行が含まれています。各条件行には条件式が含まれ、ルールごとに条件セルがあります。条件式は、ルール・デザイナで構築する式です。条件式はファクト・プロパティまたは関数結果であることが多いのですが、バケット・セットに関連付けられるタイプを持つ式の場合もあります。テスト式は、Driver.age<16のように、よく使用されます。これらの式は、trueおよびfalseという値を使用して、組込みのブール型のバケット・セットと関連付けられています。指定された条件セルの値または範囲は、関連付けられたLOVまたは範囲のバケット・セット内の1つ以上のバケットから取得されます。バケット・セットの詳細は、第3.6項「バケット・セットの使用」を参照してください。

たとえば、図5-1は、Driver.ageプロパティを持つDriverファクトの条件式を示しています。デシジョン表内の対応する行は、範囲<20および>=20のバケットを含む条件セルを示しています。セルの値は、driver_agesというグローバル・バケット・セットから取得されます。

図5-1には、Driver.has_trainingプロパティを持つDriverファクトの条件行も示されています。この条件行は、値true、falseおよび-を持つ条件セルを示しています。ハイフン(-)は、考慮されないこと(つまり、この場合はDriver.has_trainingtrueでもfalseでもかまわないこと)を意味します。これらの条件セルの値は、ブール型に関連付けられているデフォルト・バケット・セットから取得されます(このデフォルト・バケット・セットは、値trueおよびfalseのデフォルト・バケットで構成されています)。

デシジョン表にはルールがバケット順に表示され、ルールの順序を変更するにはバケット・セット内のバケットの順序を変更する必要があります。つまり、条件行に関連付けられているバケット・セット内のバケットの順序によって条件セルの順序が決まり、したがってルールの順序も決まります。デシジョン表でのルールの順序付けは、条件行に関連付けられているLOVバケット・セット内のバケットの相対位置を変更することで管理できますが、範囲バケットの順序は変更できません。バケット・セット内のバケットの順序付けの詳細は、第3.6.1項「値リストのグローバル・バケット・セットの定義方法」を参照してください。

5.1.1.2 デシジョン表のアクションに関する必知事項

デシジョン表では、アクションはルールに関連付けられています。実行時には、条件セルについてファクトが一致すると、Rules Engineにより、そのルールに関連付けられているアクションの実行が準備されます。

表5-1に、「アクション」領域で選択できるアクションのタイプを示します。つまり、関数のコール、新規ファクトのアサート、ファクトの取消しまたは変更を行うことができます。「アクション」領域では、ルールに対する個別アクションに対応するセルをアクション・セルと呼びます。拡張モードには、アクション用の他のオプションがあります。拡張モードの詳細は、第4.5.2項「拡張モード・オプションの選択方法」を参照してください。

表5-1 アクション・セルに値するデシジョン表のアクション

アクション 説明

assert new

新規ファクトのアサート

call

関数のコール

retract

ファクトの取消し

modify

一致したファクトに関連付けられているデータ値の変更


複数のアクションを追加する場合、「アクション」領域で追加したアクションは順序付けされます。上位の行に表示されるアクションが実行されてから、下位の行のアクションが実行されます。

デシジョン表のアクション(modifyなど)では、条件セル内で一致したファクトを参照できます。たとえば、デシジョン表にDriverファクトの条件行があり、そこにDriver.ageDriver.has_trainingの条件行が含まれている場合、アクションでプロパティDriver.eligibleを変更でき、アクション・セルごとにDriver.eligibleの値を指定できます。

「アクション」領域の特定のタイプのアクションには、「パラメータ化」チェック・ボックスが含まれています。このチェック・ボックスでは、アクションのプロパティが、デシジョン表にあるルールに関連付けられたアクション・セル内に、値セットを持てることを指定します。パラメータ化のチェック・ボックスを選択すると、「アクション」領域で、アクション内の式の値に入力した値が、アクション・セルに値が入力されていない場合のプロパティのデフォルト値になります。たとえば、図5-2を参照してみると、値falseがアクション・プロパティeligibleのデフォルト値として割り当てられています。

図5-2 デフォルト値が設定されたパラメータ化アクションが表示されているアクション・エディタ

図5-2の説明が続きます
「図5-2 デフォルト値が設定されたパラメータ化アクションが表示されているアクション・エディタ」の説明

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 デシジョン表内のルール

図5-3の説明が続きます
「図5-3 デシジョン表内のルール」の説明

図5-3に示すように、1つのセルが別のセルの親になり、親のセルが下位のセルにまたがることは重要です。「条件」領域では、親の条件セルが同じである複数の条件セルは、兄弟と呼ばれます。一部の操作は兄弟である条件セルにのみ適用されます。たとえば、図5-4では2つの兄弟セルが選択されており、これらのセルが選択された状態なので、「選択済セルのマージ」操作が有効になっています。これらのセルでは、対応するバケットでDriver.eye_testの値がfailであるものも兄弟になります(図5-4のR3列とR4列を参照)。詳細は、第5.3.3項「デシジョン表内の条件のマージまたは分割方法」を参照してください。

図5-4 デシジョン表の兄弟条件セル

図5-4の説明が続きます
「図5-4 デシジョン表の兄弟条件セル」の説明

Rules Designerでは、行を選択して「移動」アイコンをクリックすることで、行の順序を容易に変更できます。「条件」領域で行の順序を変更すると、条件セルに対する操作を必要な粒度で実行できます。つまり、条件セルの位置や、条件セルの親、子または兄弟の位置に応じて、ツリーの特定レベルでのみ適切な特定の値を分割、マージまたは割り当てる場合に、移動操作を使用できます。

5.1.2 デシジョン表の値

デフォルトでは、条件行の作成時にデシジョン表により単一の条件セルが作成され、そのセルに「?」値が割り当てられます。条件セルの値が「?」である場合は、そのセルの値がバケット・セットでは未定義であることを示しています。例として、図5-5Driver.ageが「?」の値を示します。

図5-5 条件セルで未定義を示すサンプル・デシジョン表

図5-5の説明が続きます
「図5-5 条件セルで未定義を示すサンプル・デシジョン表」の説明

デシジョン表の「アクション」領域では、あるアクション・セルが何も実行しないように指定できます。この場合は、そのアクション・セルの選択を解除します。アクション・セルのチェック・ボックスの選択が解除されている場合は、パターンがデシジョン表内で指定の条件値に一致しても、このアクションが実行されないことを意味します。つまり、アクション・セルごとに、関連付けられているルールでアクションをアクティブにする必要があるか、またはアクションを実行しないかを指定できます。

デシジョン表では、条件セルがバケット・セットから削除済のバケットを表している場合、ルール・デザイナにより次のような検証警告が表示されます。

RUL-05831: Decision table bucket reference not found

このタイプの検証警告を解決するには、次のいずれかを実行できます。

  • 条件セルをダブルクリックしてリストからバケットを1つ以上選択し、値を定義します。

  • 欠落しているバケットをバケット・セットに追加するか、欠落しているバケットを含む別のバケット・セットに条件を関連付けます。

5.1.3 デシジョン表のループに関する必知事項

デシジョン表のループは、条件行の値がアクションにより変更される場合に発生します。ループは、単一のデシジョン表内のルール間か、複数のデシジョン表全体か、同一ルールセット内のルールおよびデシジョン表全体で設定できます。デシジョン表のアクションとして、デシジョン表の条件で使用されるファクト・プロパティを変更するアクションは作成しないでください。このようなアクションによって、無限ループが発生する場合があります。


注意:

包含するデシジョン関数に対するルール実行制限を使用することで、無限ループを防止できます。

5.2 デシジョン表の作成

デシジョン表を追加するには、複数のステップを実行します。ステップは次のとおりです。

  • デシジョン表の作成

  • デシジョン表への条件の追加

  • デシジョン表へのアクションの追加

  • デシジョン表操作を使用した、デシジョン表の検証、訂正および変更

5.2.1 デシジョン表の作成方法

デシジョン表で作業するには、まずルールセット内にデシジョン表を作成します。

デシジョン表を作成する手順は、次のとおりです。

  1. Rules Designerで、「ルールセット」タブから既存のルールセットを選択するか、「ルールセットの作成」をクリックしてルールセットを作成します。

  2. 図5-6に示すように、「追加」アイコンをクリックしてリストから「デシジョン表の作成」を選択します。これにより、デシジョン表が作成されます。

    図5-6 デシジョン表の追加

    図5-6の説明が続きます
    「図5-6 デシジョン表の追加」の説明


注意:

デシジョン表を追加すると、ルール検証ログに検証警告が表示されます。デシジョン表は、条件およびアクションを追加するまでは不完全なものであり、検証すると必ず警告が表示されます。

5.2.2 デシジョン表への条件行の追加方法

デシジョン表には、デシジョン表の条件行を指定するための「条件」領域が含まれています。条件行により、Oracle Rules Engineで実行時に照合されるファクトが決定されます。デシジョン表を作成するには、デシジョン表に条件行を1行以上追加する必要があります。

デシジョン表に条件行を追加する手順は、次のとおりです。

  1. Rules Designerで、「ルールセット」ナビゲーション・タブからルールセットを選択し、条件を追加するデシジョン表を選択します。

  2. 「デシジョン表」領域で、「追加」アイコンの横にあるリストから「条件」を選択します。

  3. 図5-7に示すように、「条件」領域で、「<条件の編集>」をダブルクリックしてナビゲータを表示し、式を選択または入力します。

    図5-7 デシジョン表への条件の追加

    図5-7の説明が続きます
    「図5-7 デシジョン表への条件の追加」の説明

  4. ナビゲータ内でクリックして変数を選択するか、「式ビルダー」アイコンをクリックして「式ビルダー」ウィンドウを表示し、式を入力します。「式ビルダー」を使用すると式を作成できます。

  5. 各条件行には、各セルの値を取り出すバケット・セットが必要です。選択した値にグローバル・バケット・セットが関連付けられている場合は、デフォルトでバケット・セットに条件行が関連付けられます。

  6. 必要に応じて手順2から手順5を繰り返し、デシジョン表にさらに条件行を追加します。

ローカル・バケット・セットを使用するか、デシジョン表の条件用のバケット・セットを指定する手順は、次のとおりです。

  1. 各条件行には、各セルの値を取り出すバケット・セットが必要です。選択した値にグローバル・バケット・セットが関連付けられている場合は、デフォルトでバケット・セットに条件行が関連付けられます。

  2. その値に関連付けられているグローバル・バケット・セットがない場合は、デシジョン表に条件行を追加した後、条件行に関連付けるローカル値リスト・バケット・セットまたはローカル範囲リスト・バケット・セットを指定するか、既存のグローバル・バケット・セットを指定する必要があります。バケット・セットを条件に追加するには、図5-8に示すように、「条件」領域で条件を選択し、バケット・セットのリストから選択してバケット・セットを関連付けます。バケット・セット・リストには、該当するタイプの使用可能なグローバル・バケット・セットが含まれています。

    図5-8 デシジョン表で条件行に使用するバケット・セットの指定

    図5-8の説明が続きます
    「図5-8 デシジョン表で条件行に使用するバケット・セットの指定」の説明

  3. グローバル・バケット・セットを指定しない場合は、「ローカルの値リスト」または「範囲のローカル・リスト」を選択してローカル・バケット・セットを作成して使用し、指定したタイプのバケット・セットを作成して使用できます。

  4. 必要に応じて手順2から手順3を繰り返し、デシジョン表にさらに条件行を定義します。

バケット・セットの作成の詳細は、第3.6項「バケット・セットの使用」を参照してください。

5.2.3 デシジョン表へのアクションの追加方法

デシジョン表には、デシジョン表のアクションを指定するための「アクション」領域が含まれています。これにより、デシジョン表内のルールに対するアクションが決まります。

有効なデシジョン表を作成する手順は、次のとおりです。

  1. デシジョン表にアクションを追加します。

  2. 特定の値が適用されるアクション・セルごとに、値を設定します。

  3. アクション・セルごとに、アクションがルールに適用されない場合はそのセルの選択を解除します。デフォルトでは、デシジョン表にアクションを追加すると、すべてのルールに対するアクションの選択が解除されます。

デシジョン表にアクションを追加する手順は、次のとおりです。

  1. Rules Designerで、「ルールセット」ナビゲーション・タブからルールセットを選択し、アクションを追加するデシジョン表を選択します。

  2. 「追加」アイコンの横にあるリストから「アクション」を選択し、リストから使用可能なアクションを選択します。表5-1に、使用可能なアクションを示します。たとえば、「Modify」を選択します。図5-9に示すように、Rules Designerの「アクション・エディタ」ダイアログが表示されます。

    図5-9 デシジョン表へのアクションの追加

    図5-9の説明が続きます
    「図5-9 デシジョン表へのアクションの追加」の説明

  3. 「アクション・エディタ」ダイアログの「ターゲット」領域で、アクションのターゲットを選択します。これにより、アクションが適用されるデータ・モデル・オブジェクトが指定されます。

  4. 指定したターゲットについて、必要に応じてアクションで目的の操作が実行されるように、「引数」表のフィールドを変更します。「アクション・エディタ」ダイアログの「引数」表には、表5-2に示すフィールドが含まれています。

    表5-2 「アクション・エディタ」ダイアログの「引数」フィールド

    フィールド 説明

    プロパティ

    指定したターゲットのプロパティ名が表示されます。

    タイプ

    プロパティのタイプが表示されます。

    使用可能なアクションのリストから、アクションのデフォルト値を選択します。指定した値は、アクション全体にデフォルト値として適用されるか、または特定のアクション・セルを選択している場合は、選択したアクション・セルに適用されます。

    パラメータ化

    パラメータ化された値を指定します。パラメータ化された値は、デシジョン表のアクション・セルに表示されます。パラメータ化された値をプロパティに選択すると、通常は各ルールにより異なるパラメータ値が入力されます。

    定数

    定数値を指定する場合に選択します。


  5. 「アクション・エディタ」ダイアログで、すべてのルールのアクション・セルを選択するには、「常に選択」チェック・ボックスを選択します。

  6. 必要に応じてステップ2からステップ5を繰り返し、デシジョン表に対してさらにアクションを定義します。

デシジョン表内のアクション・セルの値を設定する手順は、次のとおりです。

  1. Rules Designerで、「ルールセット」ナビゲーション・タブからルールセットを選択し、アクション・セル値を指定するデシジョン表を選択します。

  2. 「アクション」領域で、適切なアクション・セルが選択されていることを確認します。「アクション・エディタ」ダイアログで「常に選択」チェック・ボックスを選択した場合は、すべてのアクション・セルを選択する必要があります。「常に選択」チェック・ボックスの選択が解除されている場合は、アクション・セルのチェック・ボックスを使用して適切なアクション・セルを選択します。

  3. 「アクション」領域で、選択したアクション・セルごとに、パラメータ化されたプロパティに適切な値を入力します。そのためには、アクション・セルのプロパティ・セルを選択し、値を入力するか、リストから値を選択するか、または「式ビルダー」アイコンをクリックして「式ビルダー」ダイアログを使用します。

    デシジョン表からバケット・セットを参照する方法の詳細は、第3.6.2項「範囲リスト・グローバル・バケット・セットの定義方法」を参照してください。

デシジョン表のアクション・セルの選択を解除する手順は、次のとおりです。

  1. Rules Designerで、「ルールセット」ナビゲーション・タブからルールセットを選択し、アクション・セルの選択を解除するデシジョン表を選択します。

  2. 「アクション」領域で、アクション・セルを選択し、アクション・セル内のチェック・ボックスの選択を解除します。アクションに対して「常に選択」が設定されている場合は、アクション・セル値の選択を解除できません。

アクションを追加するときに、アクションの順序変更が必要になる場合があります。Rules Designerでは、「下に移動」アイコンまたは「上に移動」アイコンを使用して、アクションの順序を変更できます。

5.2.4 デシジョン表へのルールの追加方法

デシジョン表にルールを追加できます。ルール・デザイナでは、既存のルールの左側にルールの列が追加され、各条件セルは「?」に初期化されます。これは実際には検証エラーを意味し、セルに適切な値を入力するように求めています。

デシジョン表にルールを追加する手順は、次のとおりです。

  1. Rules Designerで、「ルールセット」ナビゲーション・タブからルールセットを選択し、ルールを追加するデシジョン表を選択します。

  2. 「追加」アイコンの横にあるリストから、「ルール」を選択します。

  3. 条件セルの値を入力します。新しいルールはデシジョン表の最初のルールとして左側に追加され、その他のルールは、バケット値の順序が定義どおりに保たれるように、必要に応じて移動していることに注意してください。

  4. アクション・セルの値を入力します。

バケットによるルールの順序付け

デシジョン表の「詳細設定」にある「バケットによるルールの順序付け」チェック・ボックスは、デフォルトで選択されています。この場合、新しいルールを追加すると、デシジョン表のレイアウトが自動的に変更されます。

デシジョン表に新しいルールを追加すると、新しいルールはデシジョン表の最初のルールとして追加され、その他のルールは、バケット値の順序が定義どおりに保たれるように、必要に応じて移動します。これは、「バケットによるルールの順序付け」が有効になっているからです。つまり、デシジョン表のルールの順序は、条件式に関連付けられているバケットの相対位置に応じて設定されるのです。ルールを追加するときに「バケットによるルールの順序付け」が有効でない場合、新しいルールはデシジョン表の最後のルールとして追加されます。どちらの場合も、新しいルールの列のセルには、セルに値がまだ設定されていないことを示す「?」という記号が表示されます。


注意:

「バケットによるルールの順序付け」を選択すると、ルールが順序付けされ、重複ルール(厳密に同じバケットを持つルール)は結合されます。したがって、バケットを持たない2つのルールをデシジョン表に追加することはできません。この場合、ルールが重複することになり、即座に結合されてしまうからです。「バケットによるルールの順序付け」の選択を解除すると、重複ルールが許可されます。

また、ルール列に付属する「左へ移動」および「右へ移動」ボタンも有効になっており、ルールを再配置できます。拡張オプションも有効なので、ルールの切り取り、コピーまたは貼り付けも実行できます。

5.2.5 デシジョン表でのテストの定義方法

デシジョン表でテストを定義できます。テストでは、デシジョン表内のルールを起動する場合は、trueに評価する必要があります。テストの定義とルール条件の使用方法の詳細は、第4.3項「ルールの使用」を参照してください。

デシジョン表にテストを追加する手順は、次のとおりです。

  1. Rules Designerで、「ルールセット」ナビゲーション・タブからルールセットを選択し、ルールを追加するデシジョン表を選択します。

  2. デシジョン表の名前の横の「詳細設定の表示」アイコン(二重の下矢印)をクリックします。「拡張モード」が選択されている場合は、チェック・ボックスの選択を解除します。

  3. デシジョン表名のすぐ下で、「<テストの挿入>」の下矢印をクリックします。

  4. 次のオプションのいずれかを必要に応じて選択します。

    • 簡易テスト

    • 変数

    • ネスト・テスト

    • ネストされていないテスト

  5. 左右の「<オペランド>」をクリックしてオペランド値を入力し、演算子リストをクリックして演算子を選択します。

    追加したテストを図5-10に表示します。

    図5-10 デシジョン表へのテストの追加

    図5-10の説明が続きます
    「図5-10 デシジョン表へのテストの追加」の説明

5.3 デシジョン表の操作の実行

デシジョン表の作成後、デシジョン表に対して次のような操作を実行できます。

  • デシジョン表のセルの圧縮または分割

  • デシジョン表内の条件のマージまたは分割

  • デシジョン表内のルール間の競合の検出および解決

  • デシジョン表内のギャップの検出および修正

5.3.1 デシジョン表の操作の概要

デシジョン表の作成後に、デシジョン表の内容を変更し、すべてのケースに関する完全なルールセットを含むデシジョン表を生成したり、複数のケースに関して最小数のルールを提供するデシジョン表を生成できます。

5.3.1.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つに考慮されない値が表示されている場合、マージされたセルにも考慮されない値が表示されます。

この操作ではアクション・セルをマージでき、これにより、「RUL-05847: 重複するデシジョン表アクション・パラメータ"{0}"」など、重複するアクション・セルに関する警告を作成できます。

条件行

各兄弟グループ内のすべての値が、直前の条件式にある条件セルごとに結合されて単一の考慮されない値セルとなります。この操作には、各兄弟グループ内のすべてのセルに対してmergeをコールするのと同じ効果があります。

この操作ではアクション・セルをマージでき、これにより、「RUL-05847: 重複するデシジョン表アクション・パラメータ"{0}"」など、重複するアクション・セルに関する警告を作成できます。

デシジョン表


ルールの条件を同一アクションとマージすることでデシジョン表が圧縮されます。


競合するアクション・セルが操作に関連付けられていない場合、分割とマージは逆の操作になります。この場合、競合するアクション・セルがなければ、マージ操作では兄弟のすべての値を1つの兄弟に結合し、他の兄弟の条件セルは破棄されます。条件セルをマージした結果、デシジョン表にアクション・セルが含まれていれば、そのアクション・セルもマージされます。つまり、マージ操作では複数の条件セルを1つの条件セルに結合し、すべてのバケットを1つのセルに追加するのです。

競合する値を持つアクション・セルは、マージ操作では追加の手動ステップを必要とする形式でマージされます。そのため、2つのアクション・セルのパラメータが競合する場合、マージ後のアクション・セルには競合する複数のパラメータ値が含まれることになります。これらの競合する値はアクション・セルに追加され、不要な重複パラメータを選択して削除することにより手動で解決する必要があります。例については、アクション・セル内で競合する値を示す図5-11を参照してください。

1つのプロパティについて複数の値を含むアクション・セルは無効です。このアクション・セルを選択すると、ルール・デザイナではアクション・セル用の単一値を選択できるように、チェック・ボックスを含むポップアップ・ウィンドウが表示されます。図5-11の検証ログに示すように、ルール・デザイナでは単一値を選択するまで検証警告が表示されます。

図5-11 マージ後のアクション・セルについて解決が必要な競合するプロパティ

図5-11の説明が続きます
「図5-11 マージ後のアクション・セルについて解決が必要な競合するプロパティ」の説明

5.3.1.2 デシジョン表の移動操作

デシジョン表内で条件またはアクションを移動できます。「移動」アイコンを使用すると、「条件」領域に表示される条件行や「アクション」領域に表示されるアクションの順序を変更できます。条件を上下に移動してルールの表示順序を変更できますが、これらの操作によってロジックが変わることはありません。たとえば、if (x.a == 1 and x.b == 1)は論理的にはif (x.b == 1 and x.a == 1)と同じです。

デシジョン表で作業する場合、一部の操作は兄弟である条件セルにのみ適用されます。「移動」アイコンを使用すると、デシジョン表の操作が必要な粒度でツリーに適用されるように行の順序を変更できます。たとえば、単一ルールの条件セルに対するアクションを変更する場合は、その条件セルをデシジョン表の「条件」領域の最終行に移動する必要があります。例として、図5-12に示すデシジョン表を考えてみます。

図5-12 デシジョン表内のルール

図5-12の説明が続きます
「図5-12 デシジョン表内のルール」の説明

この表をDriver.ageの粒度で表示するには、図5-13に示すように、Driver.age条件を第1行から第3行に移動します。

図5-13 age条件を最終行に移動した後のデシジョン表

図5-13の説明が続きます
「図5-13 age条件を最終行に移動した後のデシジョン表」の説明

次に、最初の2つのルール(運転者が視覚テストをパスし、運転教習がtrueの場合)でDriver.age条件が考慮されないようにします。Driver.age条件が最終行にあるときは、これらの特定の条件に変更を簡単に適用できます。つまり、この表では、Driver.ageが最終行にあるときは、年齢に関連するルールを非常に高い粒度で、簡単に表示および変更できるようになります。一般的に、条件セルの位置や、条件セルの親、子または兄弟の位置に応じて、ツリーの特定レベルでのみ適切な特定の値を分割、マージまたは割り当てる場合に、移動操作を使用できます。

「アクション」領域内のアクションの場合は、「上へ移動」または「下に移動」をクリックするとアクションの順序を変更できます。アクションは、複数のアクションが適用される場合に最初のアクションが実行されてから以降のアクションが実行されるように順序付けされます。そのため、アプリケーションによっては、アクションに「上へ移動」または「下に移動」操作を使用することが適切な場合があります。

5.3.1.3 デシジョン表のギャップ・チェック

ギャップとは、デシジョン表内で欠落しているルールです。デシジョン表にギャップが生じるのは、各条件からの1つのバケットの組合せが、既存のルールの対象でない場合です。Rules Designerには、ギャップをチェックするためのギャップ・チェックが用意されています。「ギャップ分析」アイコンをクリックすると、Rules Designerによりギャップが検索され、検出されたギャップを修正するためのダイアログが表示されます。

ギャップがあると検証警告が表示されるように選択できます。「詳細設定」領域で「ギャップの許可」の選択を解除すると、ギャップの検出時にデシジョン表で検証警告がレポートされます。詳細は、第4.5項「ルールおよびデシジョン表での詳細設定の使用」を参照してください。

たとえば、Driverの例では、Driver.age < 20でDriver.has_trainingfalseのケースを対象とするルールを削除してギャップを作成してから、「ギャップ分析」をクリックすると、図5-14に示す「ギャップ分析」ダイアログが表示されます。チェック・ボックスを選択して「OK」をクリックすると、すべてのルールまたは選択したルールがデシジョン表に追加されます(この例では、追加対象として単一のルールが表示されているのみです)。

図5-14 ギャップのチェック

図5-14の説明が続きます
「図5-14 ギャップのチェック」の説明

次のケースについては、ギャップ・チェックにより異なる新規ルールが生成されます。

  • 兄弟ルール: 欠落している複数の兄弟ルールが単一の新規ルールとして追加されます。たとえば、2つの条件Driver.ageおよびDriver.hairを持つルールを考えてみます。異なる髪色に関して2つのルールが欠落しており、それらが兄弟(つまり、共通の親を持つ)ルールの場合、ギャップ・チェックでは図5-15に示すように単一ルールが表示されます。

  • 非兄弟ルール: 欠落している複数の非兄弟ルールが、個別の新規ルールとして追加されます。たとえば、同じ親を持たない2つの異なるルールが欠落している場合、ギャップ・チェックでは図5-16に示すように2つのルールが表示されます。

図5-15 欠落している兄弟ルールがある場合のギャップ・チェック

図5-15の説明が続きます
「図5-15 欠落している兄弟ルールがある場合のギャップ・チェック」の説明

図5-16 欠落している非兄弟ルールがある場合のギャップ・チェック

図5-16の説明が続きます
「図5-16 欠落している非兄弟ルールがある場合のギャップ・チェック」の説明

図5-15図5-16に示したどちらの場合も2つのバケットが欠落していますが、兄弟ルールの場合は複数のバケットが結合されて新規の単一ルールになります。したがって、通常、ギャップ・チェックでは、多数の限定的なルールではなく少数の汎用的なルールが提案されます。

兄弟ルールの場合は、複数のルールを追加した後、必要なバケットを取得するように各セルを編集できます。または、ギャップの検索を使用してルールを追加してから、複数の値を含むセルを分割し、不要なルールを削除します。

5.3.1.4 デシジョン表の競合分析

デシジョン表内のルールが競合する場合があります。2つのルールが競合するのは、両者が重複し、異なるアクションが設定されている場合です。2つのルールが重複するのは、その条件セルの1つ以上に共通するバケットがある場合です。重複は、デシジョン表に考慮されない条件セルが含まれている場合に一般的です。競合のない重複は一般的であり、問題はありません。

Rules Designerでは競合が検出され、「競合の表示」をクリックするとデシジョン表の「競合解決」行に競合を表示できます。競合を処理して解決する方法は、指定された競合ポリシーによって異なります。競合ポリシーを選択するか、デフォルトの手動競合ポリシーを使用できます。「詳細設定」領域の「競合ポリシー」オプションを使用して競合ポリシーを設定すると、Rules Designerによってデシジョン表の競合ポリシーが設定されます。「競合ポリシー」では、デシジョン表の競合ポリシーとして、次のいずれかを指定します。

  • 手動: 競合ルールごとに競合解決を手動で指定することで、競合を解決します。

  • 自動オーバーライド: Oracle Business Rules自動競合解決ポリシーを使用して、可能な場合に、オーバーライド競合解決を使用して競合を自動的に解決します。

  • 無視: 競合が無視されます。

詳細は、第4.5項「ルールおよびデシジョン表での詳細設定の使用」を参照してください。たとえば、図5-17に示されているデシジョン表の競合ルールは、デフォルトの手動競合ポリシーで解決されています。

図5-17 「競合」領域に競合するルールが表示されているデシジョン表

図5-17の説明が続きます
「図5-17 「競合」領域に競合するルールが表示されているデシジョン表」の説明

デシジョン表の「競合解決」領域でセルをクリックすると、次の方法でルール間の競合を解決できます。

  • オーバーライド(「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-18に、「競合解決」領域で競合するルールを選択したときに表示される、Rules Designerの「競合解決」ダイアログを示します。このダイアログでは、オーバーライド、「RunBefore」または「RunAfter」オプションによる優先度設定および「NoConflict」オプションを選択して、ルール間の競合を解決できます。

図5-18 デシジョン表の「競合解決」ダイアログの使用

図5-18の説明が続きます
「図5-18 デシジョン表の「競合解決」ダイアログの使用」の説明

デシジョン表の「詳細設定」の「競合ポリシー」「自動オーバーライド」オプションを使用すると、可能な場合は競合を自動的に解決するように指定できます。自動オーバーライド競合解決ポリシーでは、特殊ケースにより一般的なケースがオーバーライドされるように指定します。詳細は、第4.5項「ルールおよびデシジョン表での詳細設定の使用」を参照してください。

つまり、デシジョン表に競合がある場合は、次の1つ以上を実行して競合を解決できます。

  • デシジョン表の「競合ポリシー」「自動オーバーライド」オプションを選択して、自動オーバーライド競合解決を使用します。

  • デシジョン表の「競合ポリシー」「無視」オプションを選択して、競合を無視します。

  • デシジョン表の「競合ポリシー」「手動」オプションを選択することで、手動の競合解決を使用し、「競合の表示」チェック・ボックスを選択した状態で「競合解決」領域でセルを選択することで、ダイアログ内の競合するルールごとに「競合解決」を設定します。

  • デシジョン表を変更して重複を削除します。

  • アクションを結合して競合を削除します。

5.3.2 デシジョン表の圧縮または分割方法

「表の圧縮」アイコンおよび「表の分割」アイコンを使用して、デシジョン表を圧縮または分割します。詳細は、第5.3.1.1項「デシジョン表の分割操作と圧縮操作」を参照してください。

デシジョン表を圧縮する手順は、次のとおりです。

  1. Rules Designerで、「ルールセット」ナビゲーション・タブからルールセットを選択し、圧縮するデシジョン表を選択します。

  2. 「表の圧縮」アイコンをクリックします。

デシジョン表のセルを分割する手順は、次のとおりです。

  1. Rules Designerで、「ルールセット」ナビゲーション・タブからルールセットを選択し、分割するデシジョン表を選択します。

  2. 「表の分割」アイコンをクリックします。

5.3.3 デシジョン表内の条件のマージまたは分割方法

条件マージ操作および条件分割操作を使用して、デシジョン表内の条件をマージまたは分割します。詳細は、第5.3.1.1項「デシジョン表の分割操作と圧縮操作」を参照してください。

デシジョン表内の条件をマージする手順は、次のとおりです。

  1. Rules Designerで、「ルールセット」ナビゲーション・タブからルールセットを選択し、条件をマージするデシジョン表を選択します。

  2. 「条件」領域で、マージする条件を選択します。

  3. 右クリックしてリストから「条件のマージ」を選択します。

デシジョン表内の条件を分割する手順は、次のとおりです。

  1. Rules Designerで、「ルールセット」ナビゲーション・タブからルールセットを選択し、条件を分割するデシジョン表を選択します。

  2. 「条件」領域で、分割する条件を選択します。

  3. 右クリックしてリストから「分割条件」を選択します。

5.3.4 条件セルのマージ、分割および考慮されない条件セルの指定

条件セル操作を使用して、条件セルの分割、兄弟条件セルのマージまたはデシジョン表内の条件セルについて考慮されない値を指定します。詳細は、第5.3.1.1項「デシジョン表の分割操作と圧縮操作」を参照してください。

デシジョン表内の条件の兄弟セルをマージする手順は、次のとおりです。

  1. Rules Designerで、「ルールセット」ナビゲーション・タブからルールセットを選択し、条件セルをマージするデシジョン表を選択します。

  2. マージする兄弟条件セルを選択します。

  3. 右クリックしてリストから「選択済セルのマージ」を選択します。

デシジョン表内の条件のセルを分割する手順は、次のとおりです。

  1. Rules Designerで、「ルールセット」ナビゲーション・タブからルールセットを選択し、条件セルを分割するデシジョン表を選択します。

  2. 分割するセルを選択します。

  3. 右クリックしてリストから「選択済セルの分割」を選択します。

デシジョン表内の条件セルについて考慮されない値を指定する手順は、次のとおりです。

  1. Rules Designerから、「ルールセット」ナビゲーション・タブでルール・セットを選択し、考慮されない値を設定するデシジョン表を選択します。

  2. 該当する条件セルを選択します。

  3. 右クリックしてリストから「考慮しない」を選択します。

すべてのバケットを選択して条件セルについて考慮されない値を指定する手順は、次のとおりです。

  1. Rules Designerから、「ルールセット」ナビゲーション・タブでルール・セットを選択し、考慮されない値を設定するデシジョン表を選択します。

  2. 該当する条件セルを選択します。

  3. ダブルクリックし、リストから可能な値すべてについて使用可能なチェック・ボックスをすべて選択します。

5.3.5 デシジョン表のギャップ・チェックの実行方法

ギャップとは、デシジョン表内で欠落しているルールです。デシジョン表にギャップが生じるのは、各条件からの1つのバケットの組合せが、既存のルールの対象でない場合です。Rules Designerには、ギャップをチェックするためのギャップ・チェックが用意されています。この操作を使用すると、ルール・デザイナにギャップを修正するためのウィンドウが表示されます。詳細は、第5.3.1.3項「デシジョン表のギャップ・チェック」を参照してください。

ギャップがあると検証警告が表示されるように選択できます。「詳細設定」領域で「ギャップの許可」の選択を解除すると、ギャップの検出時にデシジョン表で検証警告がレポートされます。詳細は、第4.5項「ルールおよびデシジョン表での詳細設定の使用」を参照してください。

デシジョン表のギャップ・チェックを実行する手順は、次のとおりです。

  1. Rules Designerで、「ルールセット」ナビゲーション・タブからルールセットを選択し、実行対象のデシジョン表を選択します。

  2. 「ギャップ分析」アイコンをクリックします。

5.3.6 デシジョン表の手動競合解決の実行方法

デシジョン表内のルールが競合する場合があります。2つのルールが競合するのは、両者が重複し、異なるアクションが設定されている場合です。2つのルールが重複するのは、その条件セルの1つ以上に共通するバケットがある場合です。詳細は、第5.3.1.4項「デシジョン表の競合分析」を参照してください。

デシジョン表の競合解決を手動で実行する手順は、次のとおりです。

  1. Rules Designerで、「ルールセット」ナビゲーション・タブからルールセットを選択し、競合をチェックするデシジョン表を選択します。

  2. 競合ポリシーを「手動」に設定します(デフォルトの競合ポリシーです)。詳細は、第5.3.1.4項「デシジョン表の競合分析」を参照してください。

  3. 「条件」領域で、「競合」領域に競合が存在する場合は、競合のあるルールごとに該当する条件セルをダブルクリックして「競合解決」ダイアログを表示します。

  4. 「競合解決」ダイアログで、競合するルールごとに、「解決」フィールドのリストから解決を選択します。

5.3.7 デシジョン表の自動オーバーライド競合解決ポリシーの設定方法

デシジョン表で「詳細設定」オプションを選択する際に、「自動オーバーライド」競合ポリシーを使用してデシジョン表の競合が自動的に解決されるように選択できます(これは、Oracle Business Rules自動競合解決ポリシーを使用して競合を解決可能な場合にのみ適用されます)。自動オーバーライド競合解決ポリシーでは、ルールが競合する場合に特殊ケースにより一般的なケースがオーバーライドされるポリシーが使用されます。詳細は、第5.3.1.4項「デシジョン表の競合分析」を参照してください。

自動オーバーライド・ポリシーを選択する手順は、次のとおりです。

  1. 無視の競合ポリシーを使用するルールまたはデシジョン表を選択します。

  2. ルール名またはデシジョン表名の横にある「詳細設定の表示」アイコンをクリックします。

  3. 「競合ポリシー」オプションで、「自動オーバーライド」を選択します。

5.3.8 デシジョン表の競合ポリシーの無視の設定方法

デシジョン表で「詳細設定」オプションを選択する際に、「無視」の競合ポリシーを使用して、デシジョン表の競合が無視されるように設定できます。無視のポリシーにより、Oracle Business Rulesはデシジョン表での競合を無視するようになります。詳細は、第5.3.1.4項「デシジョン表の競合分析」を参照してください。

無視の競合ポリシーを選択する手順は、次のとおりです。

  1. 無視の競合ポリシーを使用するルールまたはデシジョン表を選択します。

  2. ルール名またはデシジョン表名の横にある「詳細設定の表示」アイコンをクリックします。

  3. 「競合ポリシー」オプションで、「無視」を選択します。

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で作成する必要があります。例5-1に示すスキーマ・ファイルをローカルに保存して、Oracle JDeveloperで使用可能にできます。

例5-1order.xsdスキーマ・ファイルを示します。

例5-1 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でアプリケーションを作成します。

注文承認アプリケーションを作成する手順は、次のとおりです。

  1. 「アプリケーション・ナビゲータ」で「新規アプリケーション」をクリックします。

  2. 「アプリケーションの名前付け」ダイアログで、新規アプリケーションの名前および場所を入力します。

    1. 「アプリケーション名」フィールドに、アプリケーション名を入力します。たとえば、OrderApprovalAppと入力します。

    2. 「ディレクトリ」フィールドで、ディレクトリ名を指定するか、またはデフォルトを使用します。

    3. 「アプリケーション・パッケージの接頭辞」フィールドに、アプリケーション・パッケージの接頭辞(com.example.orderなど)を入力します。

      この接頭辞とそれに続くピリオドは、アプリケーションの初期プロジェクトで作成されるオブジェクトに適用されます。

    4. Oracle Business RulesでのSOAコンポジットの場合は、「アプリケーション・テンプレート」領域でアプリケーション・テンプレートとして「SOAアプリケーション」を選択します。図5-19に示す例を参照してください。

    5. 「次へ」をクリックします。

      図5-19 注文承認アプリケーションの追加

      図5-19の説明が続きます
      「図5-19 注文承認アプリケーションの追加」の説明

  3. 「プロジェクトの名前付け」ページで、プロジェクトの名前および場所を入力します。

    1. 「プロジェクト名」フィールドに名前を入力します。たとえば、OrderApprovalと入力します。

    2. ディレクトリ名を入力または参照するか、デフォルトを使用します。

    3. Oracle Business Rulesプロジェクトの場合は、図5-20に示すように、「プロジェクト・テクノロジ」タブの「選択済」領域に、「SOA」、「ADFビジネス・コンポーネント」、「Java」および「XML」が表示されていることを確認します。項目が欠落している場合は、その項目を「選択可能」ペインで選択し、「追加」ボタンを使用して「選択済」ペインに追加します。

      図5-20 アプリケーションへのプロジェクトの追加

      図5-20の説明が続きます
      「図5-20 アプリケーションへのプロジェクトの追加」の説明

  4. 「終了」をクリックします。

5.4.3 注文承認のビジネス・ルール・サービス・コンポーネントの作成方法

Oracle JDeveloperでプロジェクトを作成した後、プロジェクト内でビジネス・ルール・サービス・コンポーネントを作成する必要があります。ビジネス・ルールを追加する際、入力変数および出力変数を作成して、サービス・コンポーネントに入力を提供し、サービス・コンポーネントから結果を取得できます。

ビジネス・ルールをOracle JDeveloperで使用する手順は、次のとおりです。

  • ビジネス・ルール・サービス・コンポーネントを追加します。

  • サービス・コンポーネントの入力変数および出力変数を作成します。

  • プロジェクト内でOracle Business Rulesディクショナリを作成します。

ビジネス・ルール・サービス・コンポーネントを作成する手順は、次のとおりです。

  1. 「アプリケーション・ナビゲータ」で、「OrderApproval」プロジェクト内の「SOAコンテンツ」を開き、composite.xmlをダブルクリックしてSOAコンポジット・エディタを起動します(このエディタは、プロジェクトの作成後、すでに開いている場合もあります)。

  2. 「コンポーネント・パレット」で、「SOA」メニューの「サービス・コンポーネント」領域から「ビジネス・ルール」composite.xmlエディタの「コンポーネント」レーンにドラッグ・アンド・ドロップします。

    図5-21に示すように、Oracle JDeveloperで「ビジネス・ルールの作成」ページが表示されます。

    図5-21 「ビジネス・ルールの作成」ダイアログでのビジネス・ルール・ディクショナリの追加

    図5-21の説明が続きます
    「図5-21 「ビジネス・ルールの作成」ダイアログでのビジネス・ルール・ディクショナリの追加」の説明

  3. 入力を追加するには、「追加」アイコンの横にあるリストから「入力」を選択し、ビジネス・ルールを入力します。

  4. 「タイプ・チューザ」ダイアログで、「スキーマ・ファイルのインポート」アイコンをクリックします。図5-22に示すように、「スキーマ・ファイルのインポート」ダイアログが表示されます。

    図5-22 「スキーマ・ファイルのインポート」が表示されている「タイプ・チューザ」

    図5-22の説明が続きます
    「図5-22 「スキーマ・ファイルのインポート」が表示されている「タイプ・チューザ」」の説明

  5. 「スキーマのインポート」ダイアログで「リソースの参照」をクリックし、プロセスの入力変数のXMLスキーマ要素を選択します。「SOAリソース・ルックアップ」ダイアログが表示されます。

  6. 「SOAリソース・ルックアップ」ダイアログで、ナビゲートしてorder.xsdスキーマ・ファイルを検索し、「OK」をクリックします。

  7. 「スキーマ・ファイルのインポート」ダイアログで、図5-23に示すように、「プロジェクトにコピー」が選択されていることを確認します。

    図5-23 order.xsdスキーマ・ファイルのインポート

    図5-23の説明が続きます
    「図5-23 order.xsdスキーマ・ファイルのインポート」の説明

  8. 「スキーマ・ファイルのインポート」ダイアログで「OK」をクリックします。

  9. 「ファイルのローカライズ」ダイアログが表示される場合は、「OK」をクリックしてスキーマをコンポジット・プロセス・ディレクトリにコピーします。

  10. 「タイプ・チューザ」で、「プロジェクトのスキーマ・ファイル」フォルダにナビゲートして入力変数を選択します。

    この例では、入力変数として「CustomerOrder」を選択します。

  11. 「タイプ・チューザ」ウィンドウで「OK」をクリックします。図5-24に示すように、「ビジネス・ルールの作成」ダイアログが表示されます。

    図5-24 CustomerOrder入力が表示されている「ビジネス・ルールの作成」ダイアログ

    図5-24の説明が続きます
    「図5-24 CustomerOrder入力が表示されている「ビジネス・ルールの作成」ダイアログ」の説明

  12. 同様の方法で、インポートしたorder.xsdから出力ファクト・タイプOrderApprovalを追加します。

  13. 「ビジネス・ルールの作成」ダイアログで、図5-25に示すように、「コンポジット・サービスとして公開」を選択します。

    図5-25 入力とOrderApproval出力が表示されている「ビジネス・ルールの作成」ダイアログ

    図5-25の説明が続きます
    「図5-25 入力とOrderApproval出力が表示されている「ビジネス・ルールの作成」ダイアログ」の説明

  14. 「OK」をクリックします。ビジネス・ルール・コンポーネントが作成され、図5-26に示すようにOracle JDeveloperのキャンバス・ワークスペースにビジネス・ルールが表示されます。

    図5-26 OrderApprovalコンポジットのビジネス・ルール・コンポーネント

    図5-26の説明が続きます
    「図5-26 OrderApprovalコンポジットのビジネス・ルール・コンポーネント」の説明

ビジネス・ルール・サービス・コンポーネントを使用すると、SOAコンポジット・アプリケーションをビジネス・ルールと統合できます。これにより、ビジネス・ルール・ディクショナリが作成され、ビジネス・ルールを実行し、ルールに基づいてビジネス上の決定を下すことができます。

5.4.4 注文承認のデータ・モデル要素の表示方法

ルールを追加する前に、Oracle Business Rulesデータ・モデルを作成する必要があります。データ・モデルには、ビジネス・データの定義(タイプ)およびルールの作成に使用するファクトの定義が含まれています。たとえば、このサンプルのデータ・モデルには、ビジネス・ルール・アクティビティの入力および出力を定義する際に指定するorder.xsdからのXMLスキーマ要素が含まれています。

ルール・デザイナを使用してルールまたはデシジョン表を作成する際に、データ・モデルの要素の作成や変更が必要になる場合があります。

Oracleビジネス・ルールのデータ・モデル要素を表示する手順は、次のとおりです。

  1. 値がcomposite.xmlのコンポジット・タブを選択し、「コンポーネント」レーンでビジネス・ルールを選択します(これにより、コンポーネントOracleRules1が破線の選択ボックスで囲まれます)。

  2. 選択ボックスをダブルクリックしてルール・デザイナを起動します。

  3. Rules Designerで、「ファクト」ナビゲーション・タブを選択します。

  4. 図5-27に示すように、「ファクト」ナビゲーション・タブで「XMLファクト」タブを選択します。

    図5-27 ルール・デザイナでビジネス・ルール・ディクショナリを開く様子

    図5-27の説明が続きます
    「図5-27 ルール・デザイナでビジネス・ルール・ディクショナリを開く様子」の説明

5.4.5 注文承認のデータ・モデルへのバケット・セットの追加方法

デシジョン表を使用するには、デシジョン表を構成する条件の各セルについて、値の描画方法を指定するバケット・セットを定義する必要があります。この例では、ルール・デザイナで定義する範囲のリストを使用して、バケット・セットを定義します。

OrderAmountバケット・セットをデータ・モデルに追加する手順は、次のとおりです。

  1. Rules Designerで、「バケットセット」ナビゲーション・タブを選択します。

  2. 「バケットセットの作成」アイコンの横にあるドロップダウンから、「範囲リスト」を選択します。

  3. 「名前」フィールドにOrderAmountと入力します(Rules Designerでは、名前を受け入れるときに必ず[Enter]を押します)。

  4. 「OrderAmount」バケット・セット・アイコンをダブルクリックして「バケットセットの編集」ダイアログを表示します。

  5. 「バケットの追加」をクリックしてバケットを追加します。

  6. 「バケットの追加」を再度クリックしてバケットをもう1つ追加します。

  7. 「範囲バケット値」領域で、最上位の「エンドポイント」フィールドに、エンドポイント値として1000を入力します。

  8. 「範囲バケット値」領域で、「エンドポイント」フィールドの中間バケットに、エンドポイント値として500を入力します。

  9. 図5-28に示すように、各バケットの「含まれるエンドポイント」フィールドでチェック・ボックスが選択されていることを確認します。

    図5-28 OrderAmountバケット・セットの追加

    図5-28の説明が続きます
    「図5-28 OrderAmountバケット・セットの追加」の説明

  10. 図5-29に示すように、それぞれの値の「エイリアス」フィールドを「高」、「標準」および「低」に変更します。

    図5-29 「高」、「標準」および「低」の別名を持つOrderAmountバケット・セットの追加

    図5-29の説明が続きます
    「図5-29 「高」、「標準」および「低」の別名を持つOrderAmountバケット・セットの追加」の説明

  11. 「OK」をクリックします。

CreditScoreバケット・セットをデータ・モデルに追加する手順は、次のとおりです。

  1. Rules Designerで、「バケットセット」ナビゲーション・タブを選択します。

  2. 「バケットセットの作成」アイコンの横にあるドロップダウンから、「範囲リスト」を選択します。

  3. 「名前」フィールドにCreditScoreと入力します。

  4. 「CreditScore」バケット・セット・アイコンをダブルクリックして「バケットセットの編集」ダイアログを表示します。

  5. 「バケットの追加」をクリックしてバケットを追加します。

  6. 「バケットの追加」を再度クリックしてバケットをもう1つ追加します。

  7. 最上位バケットについて、「エンドポイント」フィールドに750と入力します。

  8. 中間バケットについて、「エンドポイント」フィールドに400と入力します。

  9. 図5-30に示すように、各バケットの「含まれるエンドポイント」フィールドでチェック・ボックスが選択されていることを確認します。

    図5-30 CreditScoreバケット・セットの追加

    図5-30の説明が続きます
    「図5-30 CreditScoreバケット・セットの追加」の説明

  10. 図5-31に示すように、各エンドポイント値の「エイリアス」フィールドを、750は「solid」に、400は「avg」に、-Infinityは「risky」に変更します。

  11. 「OK」をクリックします。

図5-31 risky、avgおよびsolid別名を持つCreditScoreバケット・セットの追加

図5-31の説明が続きます
「図5-31 risky、avgおよびsolid別名を持つCreditScoreバケット・セットの追加」の説明

5.4.6 バケット・セットとOrderプロパティおよびCreditScoreプロパティを関連付ける方法

デシジョン表を作成する準備のため、バケット・セットをデータ・モデル内のファクト・プロパティに関連付けることができます。これにより、デシジョン表の作成時に、デシジョン表の「条件」領域にある条件セルでバケット・セットを使用できるようになります。

OrderApprovalファクト・タイプがXMLスキーマからインポートされた時点で、Statusバケット・セットにOrderApproval.statusプロパティが関連付けられていることに注意してください。スキーマ内では、StatusStringタイプに制限されるため、列挙バケット・セットとして表されます。ルール・デザイナにより、Statusバケット・セットが作成されます。詳細は、第3.2.4項「XMLファクトに関する必知事項」を参照してください。

バケット・セットをOrderプロパティおよびCreditScoreプロパティに関連付ける手順は、次のとおりです。

  1. Rules Designerで、「ファクト」ナビゲーション・タブを選択します。

  2. 図5-32に示すように、「ファクト」ナビゲーション・タブで「XMLファクト」タブを選択します。

    図5-32ルール・デザイナでビジネス・ルール・ディクショナリを開く様子

    図5-32の説明が続きます
    「図5-32ルール・デザイナでビジネス・ルール・ディクショナリを開く様子」の説明

  3. 変更するタイプを選択します。たとえば、「XMLファクト」表で、「CustomerOrder」エントリの横のアイコンをダブルクリックします。「XMLファクトの編集 -」ダイアログが表示されます。

  4. 「XMLファクトの編集 -」ダイアログの「プロパティ」表の「バケットセット」列で、適切なプロパティのセルを選択し、使用するバケット・セットをリストから選択します。たとえば、図5-33に示すように、プロパティ「order」について「OrderAmount」バケット・セットを選択します。

    図5-33 OrderAmountバケット・セットとCustomerOrder.orderの関連付け

    図5-33の説明が続きます
    「図5-33 OrderAmountバケット・セットとCustomerOrder.orderの関連付け」の説明

  5. 同様の方法で、プロパティ「creditScore」について「CreditScore」バケット・セットを選択します。

  6. 「OK」をクリックします。

5.4.7 注文承認のビジネス・ルール検証ログのチェック方法

アプリケーションをデプロイする前に、ディクショナリが警告なしで検証されることを確認する必要があります。検証警告がある場合は、それに関連する問題を解決する必要があります。

ディクショナリを検証する手順は、次のとおりです。

  1. 「ビジネス・ルール検証」ログで、検証警告をチェックします。

  2. 検証警告がある場合は、適切なアクションを実行して問題を修正します。

5.4.8 注文承認アプリケーションのデプロイ方法

SOAアプリケーションで作成されたビジネス・ルールは、Oracle JDeveloperでデプロイメント・プロファイルを作成するときに、SOAコンポジットの一部としてデプロイされます。SOAコンポジット・アプリケーションをOracle WebLogic Serverにデプロイします。

注文承認アプリケーションをデプロイして実行する手順は、次のとおりです。

  1. アプリケーション・サーバー・インスタンスを起動していない場合は、Oracle WebLogic Serverを起動します。

  2. 「アプリケーション・ナビゲータ」で、「OrderApproval」プロジェクトを右クリックし、「デプロイ」「OrderApproval」「To」→「WLSサーバー名」を選択します。

    これにより、「SOAデプロイメントと構成ダイアログ」が表示されます。

  3. 「OK」をクリックします。

  4. 「認証リクエスト」ダイアログで、認証を入力します。

  5. 「OK」をクリックします。

5.4.9 注文承認アプリケーションのテスト方法

アプリケーションのデプロイ後、Oracle Enterprise Manager Fusion Middleware Controlコンソールを使用して、SOAコンポジット・アプリケーションでデシジョン表をテストできます。

アプリケーションをテストする手順は、次のとおりです。

  1. 図5-34に示すように、Oracle Enterprise Manager Fusion Middleware Controlコンソールでコンポジット・アプリケーションを開きます。

    図5-34 注文承認アプリケーションのテスト

    図5-34の説明が続きます
    「図5-34 注文承認アプリケーションのテスト」の説明

  2. 「テスト」をクリックします。

  3. 「引数を入力」領域で、「XML表示」を選択します。このXMLを例5-2の内容に置き換えます。

    例5-2 注文承認アプリケーションのテスト用のサンプル入力

    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
       <soap:Body xmlns:ns1="http://xmlns.oracle.com/OracleRules1/OracleRules1_DecisionService_1">
            <ns1:callFunctionStateless name="OracleRules1_DecisionService_1">
                       <ns1:parameterList xmlns:ns3="http://example.com/ns/customerorder">
                               <ns3:CustomerOrder>
                                       <ns3:name>Gary</ns3:name>
                                           <ns3:creditScore>600</ns3:creditScore>
                                           <ns3:annualSpending>2001.0</ns3:annualSpending>
                                           <ns3:value>High</ns3:value>
                                           <ns3:order>100.0</ns3:order>
                        </ns3:CustomerOrder>
                       </ns1:parameterList>
               </ns1:callFunctionStateless>
           </soap:Body>
    </soap:Envelope> 
    
  4. 例5-2に示す入力値を、テスト用に必要な値に置き換えます。

  5. 「Webサービスのテスト」をクリックします。

  6. 「レスポンス」タブで、結果を表示します。たとえば、この入力の場合は次のようになります。

    /OracleRules1_DecisionService_1" xmlns:ns2="http://xmlns.oracle.com/bpel">
          <resultList>
              <OrderApproval:OrderApproval      xmlns:OrderApproval="http://example.com/ns/customerorder"
    xmlns="http://example.com/ns/customerorder">
                  <status>approved</status>
              </OrderApproval:OrderApproval>
           </resultList>
      </callFunctionStatefulDecision>