プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Business Process Managementによるビジネス・ルールの設計
12c (12.1.3)
E57557-04
目次へ移動
目次

前
前
次
次

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 条件とアクションを使用するサンプル・デシジョン表

図5-1の説明が続きます
「図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 アクション・セルに値するデシジョン表のアクション

アクション 説明

assert new

新規ファクトをアサートします。

assign

変数に値を割り当てます。

call

関数をコールします。

modify

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

retract

ファクトを取り消します。

assert

ファクトをアサートします

assert tree

ルートが指定されたファクトのツリーをアサートします。

assign new

新規の変数に値を割り当てます。

expression

式を実行します。

return

returnアクションは、関数またはルールのアクション・ブロックから戻ります。ルール内のreturnアクションはルールセット・スタックをポップするため、実行は現在ルールセット・スタックの最上部にあるルールセットからのアジェンダに対するアクティブ化に進みます。

throw

例外をスローします。例外はjava.lang.Throwableを実装するJavaオブジェクトである必要があります。スローされた例外は、tryアクション・ブロック内のcatchによって捕捉される場合があります。

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

デシジョン表のアクション(modifyなど)では、条件セル内で一致したファクトを参照できます。たとえば、デシジョン表にDriverファクトの条件行があり、そこにDriver.ageとDriver.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-4 デシジョン表の兄弟条件セル

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

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

5.1.2 条件セル値の理解

デフォルトでは、条件行の作成時にデシジョン表により単一の条件セルが作成され、そのセルに「?」値が割り当てられます。条件セルの値が?である場合は、そのセルの値が値セットでは未定義であることを示します。例として、図5-5にStrategyContextの「?」の値を示します。条件セル内の連続した値範囲は結合されていることに注意してください。たとえば、<20と[20..40]を選択すると、<=40として表示されます。

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

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

5.1.3 アクション・セル値の理解

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

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

RUL-05831: Decision table value reference not found

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

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

  • 欠落している値を値セットに追加するか、その条件を、欠落している値が含まれている別の値セットに関連付けます。

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

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

注意:

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

5.2 デシジョン表の作成

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

手順には、デシジョン表の作成、値セットの作成、デシジョン表への条件とアクションの追加、デシジョン表の操作の使用(デシジョン表の検証、訂正および変更)が含まれます。

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

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

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

  1. ルール・デザイナで、「ルールセット」タブから既存のルールセットを選択するか、「ルール・セットの作成」をクリックしてルールセットを作成します。
  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を繰り返し、デシジョン表にさらに条件行を追加します。

5.2.3 デシジョン表条件の値セットを使用または指定する方法

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

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

    図5-8の説明が続きます
    「図5-8 デシジョン表で条件行に使用する値セットの指定」の説明
  3. グローバル値セットを指定しない場合、「ローカル値セット」または「ローカル範囲値セット」のいずれかを選択して、指定されたタイプの値セットを作成および使用することで、ローカル値セットを作成および使用できます。
  4. 必要に応じて手順2から手順3を繰り返し、デシジョン表にさらに条件行を定義します。

値セットの作成の詳細は、「値セットの使用」を参照してください。

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

デシジョン表には、デシジョン表のアクションを指定するための「アクション」領域が含まれています。これにより、デシジョン表内のルールに対するアクションが決まります。有効なデシジョン表を作成するには、デシジョン表にアクションを追加します。特定の値が適用されるアクション・セルごとに、値を設定します。アクション・セルごとに、アクションがルールに適用されない場合はそのセルの選択を解除します。デフォルトでは、デシジョン表にアクションを追加すると、すべてのルールに対するアクションの選択が解除されます

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

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

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

    図5-9の説明が続きます
    「図5-9 デシジョン表へのアクションの追加」の説明
  3. 「アクション・エディタ」ダイアログの「ターゲット」領域で、アクションのターゲットを選択します。これにより、アクションが適用されるデータ・モデル・オブジェクトが指定されます。
  4. 指定したターゲットについて、必要に応じてアクションで目的の操作が実行されるように、「引数」表のフィールドを変更します。「アクション・エディタ」ダイアログの「引数」表には、表5-2に示すフィールドが含まれています。

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

    フィールド 説明

    プロパティ

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

    タイプ

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

    値

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

    パラメータ化

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

    定数

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

  5. 「アクション・エディタ」ダイアログで、すべてのルールのアクション・セルを選択するには、「常に選択」チェック・ボックスを選択します。
  6. 必要に応じてステップ2からステップ5を繰り返し、デシジョン表に対してさらにアクションを定義します。

5.2.4.1 デシジョン表のアクション・セルの値を設定する方法

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

  1. Rules Designerで、「ルールセット」ナビゲーション・タブからルールセットを選択し、アクション・セル値を指定するデシジョン表を選択します。
  2. 「アクション」領域で、適切なアクション・セルが選択されていることを確認します。「アクション・エディタ」ダイアログで「常に選択」チェック・ボックスを選択した場合は、すべてのアクション・セルを選択する必要があります。「常に選択」チェック・ボックスの選択が解除されている場合は、アクション・セルのチェック・ボックスを使用して適切なアクション・セルを選択します。
  3. 「アクション」領域で、選択したアクション・セルごとに、パラメータ化されたプロパティに適切な値を入力します。そのためには、アクション・セルのプロパティ・セルを選択し、値を入力するか、リストから値を選択するか、または「式ビルダー」ボタンをクリックして「式ビルダー」ダイアログを使用します。

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

5.2.4.2 デシジョン表のアクション・セルの選択を解除する方法

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

  1. Rules Designerで、「ルールセット」ナビゲーション・タブからルールセットを選択し、アクション・セルの選択を解除するデシジョン表を選択します。
  2. 「アクション」領域で、アクション・セルを選択し、アクション・セル内のチェック・ボックスの選択を解除します。アクションに対して「常に選択」が設定されている場合は、アクション・セル値の選択を解除できません。

アクションを追加するときに、アクションの順序変更が必要になる場合があります。ルール・デザイナでは、「下に移動」ボタンまたは「上に移動」ボタンを使用して、アクションの順序を変更できます。

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

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

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

  1. Rules Designerで、「ルールセット」ナビゲーション・タブからルールセットを選択し、ルールを追加するデシジョン表を選択します。
  2. 「追加」ボタンの横にあるリストから、「ルール」を選択します。
  3. 条件セルの値を入力します。新しいルールはデシジョン表の最初のルールとして左側に追加され、その他のルールは、値の順序が定義どおりに保たれるように、必要に応じて移動していることに注意してください。
  4. アクション・セルの値を入力します。

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

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

注意:

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

さらに、ルール列に関連する「移動」ボタンも使用できます。これらを使用してルールの位置を変更できます。「表の行と列を反転」ボタンを使用して、デシジョン表の表示を変更します。これにより、「移動」ボタンも影響を受けます。移動方向は、上または下、左または右になります。「マージ」、「圧縮」ぉよびスパン・オプションも有効化されます。ルールを切り取り、コピー、または貼り付けることもできます。

詳細は、「デシジョン表の操作の概要」を参照してください。

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

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

「データ・エクスプローラ」タブを使用すると、データ・モデル内のファクト・タイプおよび値セットを検索できます。

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

  1. ルール・デザイナで、「ルールセット」ナビゲーション・タブからルールセットを選択し、ルールを追加するデシジョン表を選択します。
  2. デシジョン表名の左にある「パターン/テストの表示」ボタン(虫眼鏡)をクリックします。「拡張モード」が選択されている場合は、そのチェック・ボックスの選択を解除します。
  3. 図5-10に示すように、必要に応じていずれかのオプションを選択します。テストのない変数がよく使用され、それらの変数はデシジョン表の条件およびアクションで使用できることに注意してください。
    • 簡易テスト

    • 変数

    • ネストされたテスト

    • 否定されたテスト

    • 次のすべて...

    • 次のいずれか...

    • は

    • 次のファクトがある...

    • 次のケースがある...

    • 次のファクトがない...

    • 次のケースがない...

    • 集計...

    • ブール式

    図5-10 オプション・リスト

    図5-10の説明が続きます
    「図5-10 オプション・リスト」の説明
  4. 図5-11のように、左右の<operand>をクリックしてオペランド値を入力し、演算子リストをクリックして演算子を選択します。

    図5-11 値オプション・リスト

    図5-11の説明が続きます
    「図5-11 値オプション・リスト」の説明

テストの記述の詳細は、「ビジネス・ルールのテストと検証」を参照してください。

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

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

条件行

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

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

デシジョン表

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

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

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

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

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

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

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

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

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

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

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

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

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

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

次に、最初の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」をクリックすると、すべてのルールまたは選択したルールがデシジョン表に追加されます(この例では、追加対象として単一のルールが表示されているのみです)。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

図5-18の説明が続きます
「図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」オプションを選択して、ルール間の競合を解決できます。

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

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

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

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

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

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

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

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

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

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

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

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

  1. ルール・デザイナで、「ルールセット」ナビゲーション・タブからルールセットを選択します。「概要」タブでデシジョン表を選択し、「編集」をクリックします。
  2. 「表の圧縮」ボタンをクリックして圧縮するか、「表の分割」ボタンをクリックしてセルを分割します。

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

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

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

  1. ルール・デザイナで、「ルールセット」ナビゲーション・タブからルールセットを選択します。「概要」タブで、条件をマージまたは分割するデシジョン表を選択し、「編集」をクリックします。
  2. 「条件」領域で、マージまたは分割する条件を選択します。
  3. 右クリックしてリストから「条件のマージ」または「分割条件」を選択します。

5.3.4 条件セル操作を使用する方法

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

5.3.4.1 デシジョン表内の条件の兄弟セルをマージする方法

  1. ルール・デザイナで、「ルールセット」ナビゲーション・タブからルールセットを選択します。「概要」タブで、条件セルをマージするデシジョン表を選択し、「編集」をクリックします。
  2. マージする兄弟条件セルを選択します。
  3. 右クリックしてリストから「選択済セルのマージ」を選択します。

5.3.4.2 デシジョン表内の条件のセルを分割する方法

  1. ルール・デザイナで、「ルールセット」ナビゲーション・タブからルールセットを選択します。「概要」タブで、条件セルを分割するデシジョン表を選択し、「編集」をクリックします。
  2. 分割するセルを選択します。
  3. 右クリックしてリストから「選択済セルの分割」を選択します。

5.3.4.3 デシジョン表内の条件セルについて考慮されない値を指定する方法

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

5.3.4.4 すべての値セットを選択して条件セルについて考慮されない値を指定する方法

  1. ルール・デザイナで、「ルールセット」ナビゲーション・タブからルールセットを選択します。「概要」タブで、「考慮しない」値を設定するデシジョン表を選択し、「編集」をクリックします。
  2. 該当する条件セルを選択します。
  3. ダブルクリックし、リストから可能な値すべてについて使用可能なチェック・ボックスをすべて選択します。

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

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

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

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

  1. ルール・デザイナで、「ルールセット」ナビゲーション・タブからルールセットを選択します。「概要」タブで、ギャップのチェックを実行するデシジョン表を選択し、「編集」をクリックします。
  2. 「ギャップ分析」ボタンをクリックします。

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

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

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

  1. ルール・デザイナで、「ルールセット」ナビゲーション・タブからルールセットを選択します。「概要」タブで、競合をチェックするデシジョン表を選択し、「編集」をクリックします。
  2. 競合ポリシーを「手動」に設定します(デフォルトの競合ポリシーです)。詳細は、「デシジョン表の競合分析」を参照してください。
  3. 「条件」領域で、「競合」領域に競合が存在する場合は、競合のあるルールごとに該当する条件セルをダブルクリックして「競合解決」ダイアログを表示します。
  4. 「競合解決」ダイアログで、競合するルールごとに、「解決」フィールドのリストから解決を選択します。

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

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

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

  1. 無視の競合ポリシーを使用するルールまたはデシジョン表を選択します。
  2. ルール名またはデシジョン表名の横にある「詳細設定の表示」ボタンをクリックします。
  3. 「競合ポリシー」オプションで、「自動オーバーライド」を選択します。

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

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

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

  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で作成する必要があります。次の例に示すスキーマ・ファイルをローカルに保存して、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でアプリケーションを作成します。

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

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

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

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

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

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

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

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

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

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

      図5-20の説明が続きます
      「図5-20 注文承認アプリケーションの追加」の説明
  3. 「プロジェクトの名前付け」ページで、プロジェクトの名前および場所を入力します。

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

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

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

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

      図5-21の説明が続きます
      「図5-21 アプリケーションへのプロジェクトの追加」の説明
  4. 「終了」をクリックします。

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

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

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

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

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

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

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

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

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

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

    図5-22の説明が続きます
    「図5-22 「ビジネス・ルールの作成」ダイアログでのビジネス・ルール・ディクショナリの追加」の説明
  3. 入力を追加するには、「追加」ボタンの横にあるリストから「入力」を選択し、ビジネス・ルールを入力します。
  4. 「タイプ・チューザ」ダイアログで、「スキーマ・ファイルのインポート」ボタンをクリックします。これにより、「スキーマ・ファイルのインポート」ダイアログが表示されます。
  5. 「スキーマのインポート」ダイアログで「リソースの参照」をクリックし、プロセスの入力変数のXMLスキーマ要素を選択します。「SOAリソース・ルックアップ」ダイアログが表示されます。
  6. 「SOAリソース・ルックアップ」ダイアログで、ナビゲートしてorder.xsdスキーマ・ファイルを検索し、「OK」をクリックします。
  7. 「スキーマ・ファイルのインポート」ダイアログで、図5-23に示すように、「プロジェクトにコピー」が選択されていることを確認します。「OK」をクリックします。

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

    図5-23の説明が続きます
    「図5-23 order.xsdスキーマ・ファイルのインポート」の説明
  8. 「ファイルのローカライズ」ダイアログが表示される場合は、「OK」をクリックしてスキーマをコンポジット・プロセス・ディレクトリにコピーします。
  9. 「タイプ・チューザ」で、「プロジェクトのスキーマ・ファイル」フォルダにナビゲートして入力変数を選択します。

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

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

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

    図5-24の説明が続きます
    「図5-24 CustomerOrder入力が表示されている「ビジネス・ルールの作成」ダイアログ」の説明
  10. 同様の方法で、インポートしたorder.xsdから出力ファクト・タイプOrderApprovalを追加します。
  11. 「ビジネス・ルールの作成」ダイアログで、図5-25に示すように、「コンポジット・サービスとして公開」を選択します。

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

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

    「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. ルール・デザイナで、「値セット」ナビゲーション・タブを選択します。
  2. 「値セットの作成」ボタンの横にあるドロップダウンから「範囲値セット」を選択します。
  3. 「名前」フィールドにOrderAmountと入力します。[Enter]を押して、その名前を受け入れます。
  4. OrderAmount値セット・アイコンをダブルクリックし、「範囲値セットの編集」ダイアログを表示します。
  5. 「値の追加」をクリックし、値を追加します。
  6. 「値の追加」を再度クリックし、別の値を追加します。
  7. 「範囲値」領域で、最上位の「エンドポイント」フィールドに、エンドポイント値として1000を入力します。
  8. 「範囲値」領域で、「エンドポイント」フィールドの中間バケットに、エンドポイント値として500を入力します。
  9. 図5-28に示すように、各値セットの「含まれるエンドポイント」フィールドでチェック・ボックスが選択されていることを確認します。

    図5-28 OrderAmount値セットの追加

    図5-28の説明が続きます
    「図5-28 OrderAmount値セットの追加」の説明
  10. それぞれの値の「エイリアス」フィールドを「高」、「標準」および「低」に変更します。「OK」をクリックします。

5.4.5.1 CreditScore値セットをデータ・モデルに追加する方法

CreditScore値を追加する手順は、次のとおりです。

  1. ルール・デザイナで、「値セット」ナビゲーション・タブを選択します。
  2. 「値セットの作成」ボタンの横にあるドロップダウンから「範囲リスト」を選択します。
  3. 「名前」フィールドにCreditScoreと入力します。
  4. 「CreditScore」値セット・アイコンをダブルクリックし、「値セットの編集」ダイアログを表示します。
  5. 「値の追加」をクリックし、値を追加します。
  6. 「値の追加」を再度クリックし、別の値を追加します。
  7. 最上位値セットについて、「エンドポイント」フィールドに750と入力します。
  8. 中間値セットについて、「エンドポイント」フィールドに400と入力します。
  9. 各値セットの「含まれるエンドポイント」フィールドでチェック・ボックスが選択されていることを確認します。
  10. 各エンドポイント値の「エイリアス」フィールドを、750は「solid」に、400は「avg」に、-Infinityは「risky」に変更します。「OK」をクリックします。

5.4.6 値セットをOrderプロパティおよびCreditScoreプロパティに関連付ける方法

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

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

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

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

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

    図5-29の説明が続きます
    「図5-29 ルール・デザイナでビジネス・ルール・ディクショナリを開く様子」の説明
  3. 変更するタイプを選択します。たとえば、「XMLファクト」表で、「CustomerOrder」エントリの横のアイコンをダブルクリックします。「XMLファクトの編集 -」ダイアログが表示されます。
  4. 「XMLファクトの編集 -」ダイアログの「プロパティ」表の「値セット」列で、適切なプロパティのセルを選択し、使用する値セットをリストから選択します。たとえば、図5-30に示すように、プロパティ「order」について「OrderAmount」値セットを選択します。

    図5-30 OrderAmount値セットとCustomerOrder.orderの関連付け

    図5-30の説明が続きます
    「図5-30 OrderAmount値セットとCustomerOrder.orderの関連付け」の説明
  5. 同様の方法で、プロパティ「creditScore」について「CreditScore」値セットを選択します。
  6. 「OK」をクリックします。

5.4.7 注文承認用デシジョン表の追加方法

デシジョン表を作成して、入力ファクトを処理して出力ファクトを生成するか、または暫定的な結論を生成します。暫定的な結論は、Oracle Business Rulesにより他のルールを使用するか別のデシジョン表内でさらに処理できます。

ルールを操作する際に、ルール・デザイナのルール検証機能を使用できます。ディクショナリを変更すると、ルール・デザイナではディクショナリ検証が実行されます。検証ログ・ウィンドウを表示するには、「検証」ボタンをクリックするか、または「表示」→「ログ」を選択して、「ビジネス・ルール検証」タブを選択します。ルール検証ログを表示すると、警告メッセージが表示されます。これらの警告メッセージは、デシジョン表を作成すると削除されます。ルール検証の詳細は、「ルール検証」を参照してください。

このサンプル・アプリケーションでルールにデシジョン表を使用するには、特定の顧客および特定の注文に関して顧客の消費レベルおよび顧客の信用リスクを表すファクトを操作します。次に、デシジョン表を使用し、顧客の消費額、注文金額および顧客の信用リスクに基づくルールを作成します。

注文承認用のデシジョン表を追加する手順は、次のとおりです。

  1. Rules Designerで、「ルールセット」ナビゲーション・タブから「Ruleset_1」を選択します。
  2. 「追加」ボタンをクリックし、リストから「デシジョン表の作成」を選択します。
  3. デシジョン表で、「追加」ボタンをクリックし、リストから「条件」を選択します。
  4. デシジョン表で、「<条件の編集>」をダブルクリックします。次に、ナビゲータで、「CustomerOrder」を開いて「creditScore」を選択します。これにより、式CustomerOrder.creditScoreがConditions列に入力されます。
  5. 再度、デシジョン表で、「追加」ボタンをクリックし、リストから「条件」を選択します。
  6. デシジョン表の「条件」領域で、「<条件の編集>」をダブルクリックします。次に、ナビゲータで、「CustomerOrder」を開いて「order」を選択します。これにより、式CustomerOrder.orderが入力されます。
  7. 再度、デシジョン表で、「追加」ボタンをクリックし、リストから「条件」を選択します。
  8. デシジョン表で、「<条件の編集>」をダブルクリックします。
  9. ナビゲータで、「CustomerOrder」を開いて「annualSpending」を選択します。図5-31に示すように、テキスト入力領域で>2000を追加します。

    図5-31 デシジョン表への年間消費額エントリの追加

    図5-31の説明が続きます
    「図5-31 デシジョン表への年間消費額エントリの追加」の説明
  10. 図5-32に示すように、[Enter]を押して値を受け入れます。ルール検証ログを表示すると、図5-32に示すように警告メッセージが表示されます。これらの警告メッセージは、後のステップでデシジョン表を変更すると削除されます。

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

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

5.4.7.1 デシジョン表にアクションを作成する方法

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

  1. デシジョン表で、「追加」ボタンをクリックしてリストから「アクション」→「新規アサート」を選択します。
  2. 「アクション」領域で、assert new(をクリックします。これにより、「アクション・エディタ」ダイアログが表示されます。
  3. 「アクション・エディタ」ダイアログの「ファクト」領域で「OrderApproval」を選択します。
  4. 「アクション・エディタ」ダイアログのstatusプロパティの「プロパティ」表で、「パラメータ化」チェック・ボックスおよび「定数」チェック・ボックスを選択します。これで、各ルールでステータスを個別に設定するように指定したことになります。
  5. 図5-33に示すように、「アクション・エディタ」ダイアログで「常に選択」チェック・ボックスを選択します。

    図5-33 「アクション・エディタ」ダイアログを使用してデシジョン表にアクションを追加する様子

    図5-33の説明が続きます
    「図5-33 「アクション・エディタ」ダイアログを使用してデシジョン表にアクションを追加する様子」の説明
  6. 「アクション・エディタ」ダイアログで「OK」をクリックします。

次に、デシジョン表にルールを追加し、ルールごとにアクションを指定する必要があります。

5.4.7.2 デシジョン表のセルの分割とアクションの追加

デシジョン表の分割操作を使用して、デシジョン表の条件行に関連付けられた値セットに関するルールを作成できます。これにより、条件値セットの組合せごとにルールが1つ作成されます。3つの注文金額値セット、3つの信用スコア値セット、および年間消費額用の2つのブール値セットがあり、ルールは合計18個(3 x 3 x 2 = 18)となります。

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

  1. デシジョン表を選択します。
  2. デシジョン表で、「表の分割」ボタンをクリックし、リストから「表の分割」を選択します。表の分割操作により、考慮されないセルが表から消去されます。図5-34に示すように、表にはすべての範囲を対象とする18のルールが表示されています。

これらのステップでは、欠落している式があるアクション・セルに関する検証警告が生成されます。これらの警告は後のステップで修正します。

図5-34 表分割操作を使用したデシジョン表の分割

図5-34の説明が続きます
「図5-34 表分割操作を使用したデシジョン表の分割」の説明

5.4.7.3 デシジョン表内のルールごとにアクションを追加する方法

デシジョン表の「アクション」領域で、各アクション・セルのOrderApprovalに関連付けられているstatusプロパティの値を指定します。可能な選択肢は、「Status.MANUAL」、「Status.REJECTED」または「Status.ACCEPTED」です。このステップでは、18のルールそれぞれについて、statusの値を入力します。入力した値は、デシジョン表の各ルールを構成する条件に対応します。

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

  1. 図5-35に示すように、「アクション」領域で、操作するルールのアクション・セルをダブルクリックします。

    図5-35 デシジョン表へのアクション・セル値の追加

    図5-35の説明が続きます
    「図5-35 デシジョン表へのアクション・セル値の追加」の説明
  2. リストで、アクション・セルの値を選択して入力します。たとえば、「Status.MANUAL」を入力します。
  3. アクション・セルごとに、アプリケーションのロジックによって決定された適切な値を入力します。この例では、表5-5に示す、デシジョン表のアクションの値がアプリケーションで使用されます。
  4. 「ファイル」メイン・メニューから「すべて保存」を選択し、作業内容を保存します。

表5-5 デシジョン表のアクションの値

ルール C1 creditScore C2順序 C3 annualSpending > 2000 A1 OrderApprovalのステータス

R1

risky

低

true

Status.MANUAL

R2

risky

低

false

Status.MANUAL

R3

risky

中

true

Status.MANUAL

R4

risky

中

false

Status.REJECTED

R5

risky

高

true

Status.MANUAL

R6

risky

高

false

Status.REJECTED

R7

avg

低

true

Status.APPROVED

R8

avg

低

false

Status.MANUAL

R9

avg

中

true

Status.APPROVED

R10

avg

中

false

Status.MANUAL

R11

avg

高

true

Status.MANUAL

R12

avg

高

false

Status.MANUAL

R13

solid

低

true

Status.APPROVED

R14

solid

低

false

Status.APPROVED

R15

solid

中

true

Status.APPROVED

R16

solid

中

false

Status.APPROVED

R17

solid

高

true

Status.APPROVED

R18

solid

高

false

Status.MANUAL

5.4.7.4 デシジョン表の圧縮

この手順では、18のルールを9つのルールにマージして圧縮します。これにより、不要なルールが自動的に消去され、デシジョン表にギャップや競合するプロパティのない状態が保持されます。

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

  1. デシジョン表を選択します。
  2. 「すべての列を同じ幅にサイズ変更」ボタンをクリックします。
  3. 「表の圧縮」ボタンをクリックし、リストから「表の圧縮」を選択します。表圧縮操作により、デシジョン表からルールが消去されます。図5-36に示すように、デシジョン表には9つのルールが表示されるようになります。

図5-36 「表の圧縮」を使用したデシジョン表の圧縮

図5-36の説明が続きます
「図5-36 「表の圧縮」を使用したデシジョン表の圧縮」の説明

5.4.7.5 1つの一般ルールによる複数の限定的ルールの置換

残る9つのルールのうち5つでは、手動注文承認ステータスになることに注意してください。ルール数は、これら5つのルールを削除することで減らすことができます。通常は、このことは行わない、つまり、複数の限定的ルールを1つの一般ルールで置き換えないことがベスト・プラクティスです。ルール数を減らす際には、少数のルールを使用するメリットおよびルール数の減少で生じる競合の管理に伴う複雑さを比較する必要があります。

複数の限定的ルールを1つの一般ルールで置き換える手順は、次のとおりです。

  1. デシジョン表を選択します。
  2. デシジョン表で、OrderApproval statusのアクションが「Status.MANUAL」に設定されているルールを選択します。ルールを選択するには、列見出しをクリックします。たとえば、図5-37に示すように、ルール「R2」をクリックします。
  3. 「削除」をクリックしてデシジョン表内のルールを削除します。「デシジョン表」領域でデシジョン表内のルールを削除するために「削除」ボタンをクリックする際は、慎重に行ってください(「ルールセット」領域にも、デシジョン表全体を削除する「削除」ボタンがあります)。

    図5-37 デシジョン表からのルールの削除

    図5-37の説明が続きます
    「図5-37 デシジョン表からのルールの削除」の説明
  4. 前述の手順を繰り返し、アクションが「Status.MANUAL」に設定されているすべてのルールを削除します。これにより、図5-38に示すように、デシジョン表には4つのルールが残ることになります。

    図5-38 手動アクションを削除した後のデシジョン表

    図5-38の説明が続きます
    「図5-38 手動アクションを削除した後のデシジョン表」の説明

5.4.7.6 一般ルールの追加

これで、手動の場合を処理する単一ルールを追加できます。このルールを追加したら、競合解決に対して、「競合ポリシー」の「自動オーバーライド」オプションを使用して競合ポリシーを設定します。

一般ルールを追加する手順は、次のとおりです。

  1. デシジョン表で、「追加」ボタンをクリックし、リストから「ルール」を選択します。
  2. 「条件」領域で、3つの条件についてルールのセルごとに「-」(考慮されない値)を残します。
  3. 「アクション」領域で、図5-39に示すように「Status.MANUAL」を入力します。「ビジネス・ルール検証」ログに、解決されない競合に関する警告「RUL-05851」が表示されることに注意してください。

    図5-39 競合するルールを含むデシジョン表

    図5-39の説明が続きます
    「図5-39 競合するルールを含むデシジョン表」の説明
  4. 図5-40に示すように、競合解決の表示切替えボタンをクリックして、競合するルールを表示します。

    図5-40 Status.MANUALを処理するルールの追加

    図5-40の説明が続きます
    「図5-40 Status.MANUALを処理するルールの追加」の説明

5.4.7.7 自動オーバーライド競合解決ポリシーを有効にする方法

自動オーバーライド競合解決ポリシーを有効にする手順は、次のとおりです。

  1. デシジョン表で、「詳細設定の表示」(デシジョン表名の横にある)をクリックします。
  2. 「競合ポリシー」リストで、「自動オーバーライド」を選択します。手動の場合のルールを追加し、「自動オーバーライド」を選択すると、図5-41に示すように、競合が解決され、限定的な場合により一般的な場合がオーバーライドされることがわかります。

    図5-41 自動オーバーライド競合ポリシーを使用したStatus.MANUALを処理するルールの追加

    図5-41の説明が続きます
    「図5-41 自動オーバーライド競合ポリシーを使用したStatus.MANUALを処理するルールの追加」の説明

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

アプリケーションをデプロイする前に、ディクショナリが警告なしで検証されることを確認する必要があります。検証警告がある場合は、それに関連する問題を解決する必要があります。ディクショナリを検証するには、「ビジネス・ルール検証」ログで、検証警告をチェックします。警告がある場合は、適切なアクションを実行して問題を修正します。

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

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

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

  1. アプリケーション・サーバー・インスタンスを起動していない場合は、Oracle WebLogic Serverを起動します。
  2. 「アプリケーション・ナビゲータ」で、「OrderApproval」プロジェクトを右クリックし、「デプロイ」→「OrderApproval」を選択し、該当するサーバー名を選択します。

    これにより、「SOAデプロイメントと構成ダイアログ」が表示されます。すでに作成済のアプリケーション接続を選択するか、ここでそれを作成します。接続には、認証およびその他の接続情報(サーバー名、ポートなど)が含まれています。

  3. 「次へ」をクリックします。
  4. 「サーバーの選択」で、アプリケーション接続を選択するか、作成してから選択します。
  5. 「次へ」、「次へ」をクリックし、「終了」をクリックします。

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

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

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

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

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

    図5-42の説明が続きます
    「図5-42 注文承認アプリケーションのテスト」の説明
  2. 「テスト」をクリックします。
  3. 「引数を入力」領域で、「XML表示」を選択します。注文承認サンプル・アプリケーションのテストのために、次に示すサンプル入力の内容でXMLを置き換えます。
    <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. ステップ3に示す入力値を、テスト用に必要な値に置き換えます。
  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>
    

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にエクスポートできます。

図5-43 Microsoft Excelワークブック

図5-43の説明が続きます
「図5-43 Microsoft Excelワークブック」の説明

Excelワークブックを開く際のデフォルトではマクロが無効化されています。マクロを有効にすると、「Oracle Business Rules」という新しいタブが表示されます。このタブで、ルールの追加または削除、セルのマージまたは分割、値セットの値の追加または削除を実行できます。また、強調表示の無効化または有効化、簡易モードまたは拡張モードの使用、READMEワークシートの非表示または表示も実行できます。

マクロを無効にした状態でも編集はできますが、次のことを実行できません。

  • 制限付きセルでのドロップ・リストからの値の選択

  • フリー・フォーム・セルの編集

  • セル範囲のコピーおよび貼付けによるルールまたは値セットの追加

  • セル範囲の削除によるルールまたは値セットの削除

  • セルの分割またはマージ

  • 値セットの自動作成

  • デシジョン表または値セットの構造の検証

事前定義済のマクロを使用すると、次の実行が可能になります。

  • ルールの追加と削除

  • セルの分割またはマージ

  • 値セットの追加または削除

  • 編集可能なセルには次が含まれます。

    • ルール、条件、アクションの説明。

    • 条件およびアクション・ノード。

    • アクションの状態。

    • アクション・パラメータのパラメータ化オプション

  • 編集不可のセルには次が含まれます。

    • 条件式。

    • アクション式。

    • アクション・パラメータ。

    これらのセルを編集しようとすると、図5-44に示すようにエラー・メッセージが表示されます。

5.5.1 エクスポートされるものの理解

SDKには、複数のデシジョン表にわたる複数の条件と関連付けることができる共有値セットがあります。ただし、Excelでは、共有値セットは存在しません。各条件に独自の値セットがあるため、Excelで変更可能な場合にエクスポート可能な値セットは1つのみになります。変更不可の値セットには、次が含まれます。

  • リンク先のディクショナリ値セット。

  • 列挙。

  • ブール値セットなどの内部値セット。

ワークシートでは、変更不可の値セットと関連付けられた条件のドロップダウンから値を選択することのみが可能です。強調表示メカニズムによって、変更不可の値セットに関連付けられている条件が示されます。

5.5.2 デシジョン表をエクスポートする方法

図5-45に示すように、エクスポートおよびインポート機能は、ツールバー・ボタンを使用して起動できます。

図5-45 「エクスポート」および「インポート」ツールバー・ボタン

図5-45の説明が続きます
「図5-45 「エクスポート」および「インポート」ツールバー・ボタン」の説明

デシジョン表をエクスポートする手順は、次のとおりです。

  1. ルール・デザイナで、「Excelにエクスポート」をクリックします。
  2. 「Excelにエクスポート」ダイアログ・ボックスで、「形式」を選択し、ワークブックを保存するフォルダを参照します。
  3. 「追加」をクリックし、エクスポートするデシジョン表(複数可)を選択し、「OK」をクリックします。
  4. 「読取り専用値セット」チェック・ボックスを選択し、Excel内のすべての値セットを読取り専用にします。Excelワークブックに値セット・シートが存在しなくなります。すべての条件に、ドロップダウン・メニューがあり、それらの値は選択できますが、値を追加したり削除することはできません。
  5. 「エクスポート」をクリックします。これで、ワークブックを開き、デシジョン表を編集できます。

5.5.3 編集済デシジョン表をディクショナリにインポートして戻す方法

図5-45に示すように、エクスポートおよびインポート機能は、ツールバー・ボタンを使用して起動できます。インポートできるExcelワークブックは前にエクスポートしたもののみです。

編集済デシジョン表をインポートする手順は、次のとおりです。

  1. ルール・デザイナで、「Excelからインポート」をクリックします。
  2. 「Excelからインポート」ダイアログ・ボックスで、「ファイル」を選択し、ワークブックを保存したフォルダを参照します。
  3. 「インポート時に差異のマージを実行」チェック・ボックスはデフォルトで選択されています。ファイルを比較するベース・ディクショナリを参照します。ベース・ディクショナリは、3方向の差異のマージに必要です。
  4. 「インポート時に差異のマージを実行」チェック・ボックスの選択を解除して、「新規作成」または「上書き」を選択します。
  5. 「インポート」をクリックします。図5-46に示すように、デシジョン表がルール・デザイナにインポートされ、そこで変更を受け入れるか拒否できます。各変更済アーティファクトには、変更アイコンのフラグが付いています。ディクショナリのマージは注意深く実行してください。

    差異のマージの使用方法の詳細は、「2つ以上のディクショナリを比較またはマージする方法」を参照してください。

    図5-46 インポート時に差異のマージを実行

    図5-46の説明が続きます
    「図5-46 インポート時に差異のマージを実行」の説明

5.5.4 Excelでデシジョン表を編集する方法

Excelで、マクロを有効化して、「Oracle Business Rules」タブを表示します。これにより、ルールの作成、値セットの編集、およびプリファレンスの設定を行えるオプションが表示されます。

5.5.4.1 ルールの追加または削除とセルのマージまたは分割

デシジョン表ワークシートごとに、図5-47に示すように、ルールを追加したり、ルールを削除したり、セルをマージまたは分割できます。

図5-47 Excelの「Oracle Business Rules」タブ

図5-47の説明が続きます
「図5-47 Excelの「Oracle Business Rules」タブ」の説明

5.5.4.2 値セットの追加または削除

図5-48に示すように、「値セット」タブで値セットを追加または削除できます。クリックしたセルに応じて、オプションが変わります(エンドポイントまたは値)。

図5-48 値セット・ワークシート

図5-48の説明が続きます
「図5-48 値セット・ワークシート」の説明

5.5.4.3 値セットの表示または非表示と説明の編集

図5-49に示すように、値セット・ワークシートで右クリックし、値の表示/非表示を選択して、値の表示と非表示を切り替えます。また、右クリックしてバケットの説明の編集を選択し、説明を変更することもできます。

図5-49 値セットの表示/非表示

図5-49の説明が続きます
「図5-49 値セットの表示/非表示」の説明

5.5.4.4 プリファレンスの設定

図5-50に示すように、「値セット」タブで「強調表示の有効化」または「強調表示の無効化」をクリックします。

図5-50 強調表示の有効化

図5-50の説明が続きます
「図5-50 強調表示の有効化」の説明

5.5.4.5 簡易または拡張モードの使用方法

ワークシートで、「簡易モード」または「拡張モード」をクリックし、2つのモード間で切り替えます。

簡易モードでは、条件およびアクションの説明のみ表示され、実際の式は表示されません。また、アクション・パラメータが表示されますが、それらを固定または可変として指定することはできません。

図5-51に示すように、拡張モードでは、条件およびアクションについて説明と式の両方が表示されます。また、アクション・パラメータ・タイプを固定または可変に指定できます。これは、SDKでパラメータ化または定数を指定することと同等です。

5.5.4.6 ReadMeワークシートの非表示または表示

図5-52に示すように、「ReadMeシートの非表示」または「ReadMeシートの表示」をクリックして、モードを切り替えることができます。ReadMeワークシートは、「Oracle Business Rules」タブでの機能の使用方法に関する役立つ情報を提供します。

図5-52 ReadMeの表示/非表示

図5-52の説明が続きます
「図5-52 ReadMeの表示/非表示」の説明

5.5.4.7 条件セルの編集

図5-53に示すように、ドロップダウンから選択するか、自動追加を使用して新しい値を追加できます。条件セルのいくつかでは、ドロップダウン・メニューから値を選択することのみが可能です。これらのセルは、色コードを使用することで区別化されています。値セットまたはデシジョン表の間で変更した条件は、すべて自動的に同期されます。

5.5.4.8 アクションの編集

図5-54に示すように、ドロップダウンからアクションの状態(アクティブまたは非アクティブ)を選択できます。

図5-54 アクションの状態の編集

図5-54の説明が続きます
「図5-54 アクションの状態の編集」の説明

5.5.4.9 式の編集

アクション式のセルの値を編集できます。編集する場合は、これらのセルの妥当性が保持されるように注意してください。

5.5.4.10 アクション式のパラメータの編集

図5-55に示すように、アクション・パラメータを固定または可変にすることができます。アクション・パラメータが固定である場合、すべてのルールで、その特定のパラメータが同じ値になります。アクション・パラメータが可変である場合、ルールごとに、その特定のパラメータを異なる値にすることができます。

図5-55 アクション式のパラメータの編集

図5-55の説明が続きます
「図5-55 アクション式のパラメータの編集」の説明

5.5.4.11 説明の編集

アクション、条件およびルールの説明を編集できます。いずれのアクション、条件またはルールに対しても説明が入力されていない場合、デフォルトでそれぞれA、CまたはRの後にデシジョン表でのその位置を示す番号が続きます。

5.5.4.12 自動追加機能の使用方法

値セットの値は、次の2つの方法で追加できます。

  1. 値セット・ワークシートで特定の値セットに移動します。「Oracle Business Rules」タブで、「バケットの追加」をクリックします。
  2. 条件セルに、値(LOV値セットの場合)またはエンドポイント(範囲値セットの場合)を入力します。図5-57に示すように、これは、対応する値セットに値が自動的に追加されるため、自動追加と呼ばれます。

    図5-57 条件セルへの値の入力

    図5-57の説明が続きます
    「図5-57 条件セルへの値の入力」の説明

    前述の値セットには、1) <18、2) [18..60)、および3) >=60の3つの値が含まれています。

  3. たとえば[18..30]と(30..60)などの新しい値を追加するには、図5-58に示すようにセルに30を入力して、[Enter]を押します。
  4. [Enter]を押した後、値が値セットに追加され、図5-59に示すようにドロップダウンに表示されるようになります。

    値セットの自動追加された機能について通知するために、様々な強調表示手法が使用されています。次の例を参照してください。値のコメントおよび強調表示は、その条件の他のルールに対して別の値を選択した後、または同じ値セットに新しい値が追加された場合に、削除されます。

    1つ目は、値セット・シートの新しく追加された値を強調表示することです(図5-60に示す)。

    図5-60 強調表示された値セット

    図5-60の説明が続きます
    「図5-60 強調表示された値セット」の説明

    2つ目は、条件セルでのコメントの追加です(図5-61に示す)。

    図5-61 条件セルのコメント

    図5-61の説明が続きます
    「図5-61 条件セルのコメント」の説明

    3つ目は、メッセージ・ボックスを表示することです(図5-62に示す)。このボックスは、最初に値が自動追加されたときにのみ表示されることに注意してください。

    図5-62 メッセージ・ダイアログ

    図5-62の説明が続きます
    「図5-62 メッセージ・ダイアログ」の説明

5.5.4.13 値セット・ワークシートでの値のエイリアス

値セット・シートでは、値セットごとに2つの行があります。最初の行は値を示し、2番目のものは値のエイリアスを示します。条件セルのドロップダウンに表示されるのは、値のエイリアスです。エイリアスは編集できます。エイリアスで行われた変更はすべて、即時に、対応する条件セルで使用可能になります。

5.5.4.14 値セットと条件の同期

値セットと条件セルは常に同期しています。値セットで行われた変更はすべて、どの値の追加または削除であっても、エイリアスでのどのような変更であっても条件セルとすぐに同期されます。値セットとその対応する条件セルとの間の同期は常に保持されます。