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

前
 
次
 

3 ファクトとバケット・セットの使用

この章では、ファクトと呼ばれるOracle Business Rulesデータ・モデル要素について説明します。ファクトはルールの判断対象となるオブジェクトです。ファクト・プロパティ値のグループ化を定義する、バケット・セットと呼ばれるもう1つの要素についても説明します。

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

3.1 ファクトとバケット・セットの使用の概要

ルール・デザイナでは、データ・モデルの一部であるファクト・タイプを使用してOracle Business Rulesにビジネス・オブジェクトおよびそのメソッドを認識させます。

ファクト・タイプとバケット・セットはルールを作成する前に作成できます。

ルール・デザイナでは、次の種類のファクトを使用できます。

ルール対応アプリケーションのビジネス・オブジェクトを調査するルールを作成したり、結果をアプリケーションに返す場合は、通常、Javaファクト・タイプとXMLファクト・タイプを使用します。RL Languageファクト・タイプ定義を使用して、Rules Engineで他のルールを起動できる中間ファクトを作成します。ADFビジネス・コンポーネント・ファクト・タイプを使用すると、ルールおよびデシジョン表でADFビジネス・コンポーネントをファクトとして使用できます

Oracle Business Rulesでは、ルールに対して実行できるファクトは、アサートされたデータ・オブジェクトです。各オブジェクト・インスタンスは単一のファクトに対応しています。オブジェクトが(変更済かどうかに関係なく)再アサートされると、Rules Engineが更新され、そのオブジェクトの新しい状態が反映されます。オブジェクトの再アサートによるファクトの作成はありません。特定のファクト・タイプに複数のファクトを指定するには、オブジェクト・インスタンスを個別にアサートする必要があります。

バケット・セットを作成し、指定したタイプの値リストまたは値範囲を定義できます。バケットセットを作成した後、バケットセットを一致するタイプのビジネス条件に関連付けることができます。バケット・セットがビジネス条件に関連付けられている場合、Oracle Business Rulesでは、ルールまたはデシジョン表でビジネス条件の値に対する制約として定義したバケットが使用されます。

詳細な情報は、次を参照してください:

3.2 XMLファクトの使用

XMLファクト・タイプを使用すると、ルールを記述する際にXMLスキーマのタイプ、要素および属性を使用できます。XMLスキーマに定義されている要素およびタイプをデータ・モデルにインポートし、Javaファクト・タイプやRLファクト・タイプの場合と同様にルールおよびデシジョン表の作成に使用できます。XMLスキーマ定義およびXMLファクト・タイプの間のマッピングには、Java Architecture for XML Binding (JAXB)が使用されます。Oracle Business Rulesでは、デフォルトでOracle Application Serverに同梱されているJAXB 2.0を使用します。JSR-222に定義されているJAXBは、XMLスキーマ定義内のタイプ、名前、規則および、Javaで使用可能なタイプ、許可される名前、規則の間のマッピングを提供します。たとえば、xsd:integerタイプのorder-idという要素は、BigInteger型のorderIDというJava Beanプロパティにマップされます(xsd:intタイプはJavaのintにマップされます)。

したがって、Oracle Business Rulesでは、アプリケーションに関連付けられたデータを含むXML文書があり、そのXML文書に関連付けられたスキーマがある場合、ルール・デザイナを使用し、XMLスキーマから指定する要素に基づいてルールを定義できます。

XMLファクト・タイプを作成する手順は、次のとおりです。

  1. XMLスキーマを定義または取得します。

  2. ルール・デザイナを使用して、XMLスキーマをディクショナリにインポートします。この手順では、JAXBコンパイラを使用してXMLスキーマからJavaクラスを生成します。XMLスキーマのコンパイル後に、スキーマから必要な要素を選択し、データ・モデル内でXMLファクトを追加し、生成されたJAXBクラスをデータ・モデルにインポートします。これらの手順の詳細は、第3.2.1項「XMLスキーマをインポートしてXMLファクトを追加する方法」を参照してください。

  3. データ・モデルに追加したXMLファクトに基づいて、ルールを記述するか、デシジョン表を作成します。詳細は、第4.3項「ルールの使用」および第5.2項「デシジョン表の作成」を参照してください。

XMLスキーマに定義されている要素およびタイプをデータ・モデルにインポートし、タイプのインスタンスをルールで作成、アサート、変更および取消しできます。ほとんどのXML文書では階層情報が記述されており、各要素にはサブ要素が含まれています。通常、ユーザーはこの階層内の複数の要素および要素間の階層関係に基づいて個々のルールを記述します。Oracle Business Rulesでは、ファクトをアサートする際のデフォルト動作は単一のファクト・インスタンスをアサートすることのみで、サブ要素の階層内で参照している可能性のある子オブジェクトはアサートしません。ルールまたはデシジョン表の作成時には、通常、ルート要素への参照に基づいて要素の階層全体をアサートするようにします。Oracle Business Rulesには、階層を再帰的にアサートできるようにassertTreeアクション・タイプが用意されています。詳細は、第4.8項「ツリー・モードのルールの使用」を参照してください。

3.2.1 XMLスキーマをインポートしてXMLファクトを追加する方法

データ・モデルでXMLスキーマ定義を使用する前に、XMLスキーマをインポートする必要があります。この手順では、JAXBクラスを生成し、生成されたクラスおよびパッケージをルール・デザイナで参照可能なXMLスキーマに関連付けます。

XMLスキーマをインポートしてXMLファクトを追加する手順は、次のとおりです。

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

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

    図3-1 Rules Designerの「XMLファクト」タブ

    図3-1の説明が続きます
    「図3-1 Rules Designerの「XMLファクト」タブ」の説明

  3. 「XMLファクト」タブで「作成」をクリックします。「XMLファクトの作成」ダイアログが表示されます。

  4. 「XMLファクトの作成」ダイアログの「ソース・スキーマ」領域で、「ソース・スキーマの追加」をクリックします。図3-2に示すように、「ソース・スキーマの追加」ダイアログが表示されます。

    図3-2 XMLファクト: 「ソース・スキーマの追加」ダイアログ

    図3-2の説明が続きます
    「図3-2 XMLファクト: 「ソース・スキーマの追加」ダイアログ」の説明

  5. 「ソース・スキーマの追加」ダイアログでは、次の操作を実行します。

    • 「スキーマの場所」フィールドで、インポートするXMLスキーマの場所を入力するか、「参照」をクリックしてXMLスキーマを検索します。インポート中に、ファイルがプロジェクトにコピーされます。


      注意:

      通常、XMLスキーマ(xsd)ファイルはxsdフォルダ内にあります。作成したXMLスキーマはSOAコンテンツ内のxsdフォルダ内に保存する必要があるからです。


    • 「JAXBクラス・ディレクトリ」フィールドで、デフォルト・パスを受け入れるか、またはRules DesignerでJAXB生成のJavaソースおよびクラス・ファイルを格納するディレクトリを入力します。

    • 「ターゲット・パッケージ」フィールドで、ターゲット・パッケージ名を入力するか、またはこのフィールドを空白にしておきます。このフィールドを空白にした場合、JAXBクラス・パッケージ名は、JAXB XMLおよびJavaのデフォルト・マッピング・ルールを使用してXMLスキーマのXMLターゲット・ネームスペースから生成されるか、注釈を使用して明示的に定義されたパッケージ名から生成されるか、ネームスペースまたは注釈が定義されていない場合は「generated」になります。スキーマのネームスペースを使用することをお薦めします。

      たとえば、ネームスペースhttp://www.oracle.com/as11/rules/demoは、com.oracle.as11.rules.demoにマップされます。

    • 「OK」をクリックします。

      ルール・デザイナでスキーマが処理されJAXBがコンパイルされるため、スキーマのサイズによっては、この手順の完了に時間がかかる場合があります。この手順が完了すると、図3-3に示すように、Rules Designerの「XMLファクトの作成」ダイアログは、「ターゲット・クラス」領域が更新され、JAXBクラスが含まれた状態で表示されます。

  6. 図3-3 XMLファクト: 「XMLファクトの作成」ダイアログ

    図3-3の説明が続きます
    「図3-3 XMLファクト: 「XMLファクトの作成」ダイアログ」の説明

  7. 「XMLファクトの作成」ダイアログの「ターゲット・クラス」領域で、XMLファクト・タイプとしてインポートするクラスを選択します。

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

3.2.2 XMLファクトの表示および編集方法

XMLファクトを使用するには、Rules Designerで「XMLファクトの編集 -」ダイアログを開きます。

XMLファクトを表示して編集する手順は、次のとおりです。

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

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

  3. 「XMLファクト」表で、編集するXMLファクトのアイコンをダブルクリックします。図3-4に示すように、「XMLファクトの編集 -」ダイアログが表示されます。

    図3-4 「XMLファクトの編集 -」ダイアログ

    図3-4の説明が続きます
    「図3-4 「XMLファクトの編集 -」ダイアログ」の説明

「XMLファクトの編集 -」ダイアログには、表3-1に示すフィールドがあります。

表3-1 XMLファクト: 「XMLファクトの編集 -」ダイアログのフィールド

フィールド 説明

名前

XMLファクト名が表示されます。JAXB生成クラスの名前は変更できません。

エイリアス

XMLファクトの別名を入力します。この値は変更できます。デフォルトは、未修飾のクラス名です。

スーパー・クラス

このファクトに関連付けられているJavaスーパークラスが表示されます。

説明

XMLファクトの説明を入力します。

XML名

XMLファクトに関連付けられているXML名が表示されます。

生成元

ビジネス・ルール・データ・モデルにコピーされる際にXMLファクトのソースとなったXMLスキーマ・ファイルが表示されます。

参照可能

ルール・デザイナのリストにXMLファクトを表示する場合に選択します。XMLファクトから他のXMLファクトが参照されることによって、ツリーが形成されることがあります。ルールで参照するプロパティを含む、すべてのXMLファクト・タイプを参照可能にする必要があります。

XPathアサーションのサポート

ファクトについてXPathアサーションを有効化する場合に選択します。この機能は、下位互換性のためにのみ提供されています。通常、このオプションは使用しません。

「属性」領域

表示または編集するXMLファクトのJAXBクラスに関連付けられている、使用可能なコンストラクタ、プロパティ、メソッドまたはフィールドを選択します。


3.2.3 スキーマが更新されたXMLファクトをリロードする方法

プロジェクト内でXMLスキーマが変更された場合、Oracle Business Rulesディクショナリにスキーマを再インポートする必要があります。スキーマを再インポートすると、Oracle Business Rulesでは、JAXBを使用してすべてのXMLファクト・タイプに対してソース・スキーマをすべて再コンパイルし、更新されたXMLスキーマ定義を使用してXMLファクト・タイプ定義を更新します。スキーマまたはクラスを変更し、実行時に変更後のスキーマまたはクラスを使用する場合、ファクトを再インポートする必要があります。


注意:

スキーマの再インポート時に、XMLファクトの変更基準となるXMLスキーマが変更された場合、ファクトが更新され、ベース・ディレクトリにインポートされます。リンクされたディクショナリ内のファクトを使用する場合は、変更されたスキーマのXMLファクトを、リンクされたディクショナリではなく、ベース・ディクショナリからリロードする必要があります。


XMLファクトを再インポートする手順は、次のとおりです。

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

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

  3. 「XMLファクト」ページで、「更新されたスキーマからのXMLファクトのリロード」アイコンをクリックします。

再インポート操作が完了した後、互換性のない変更(更新されたスキーマに、ルールで参照されているプロパティを削除したという変更が含まれているなど)によって発生する検証警告があれば、訂正する必要があります。

3.2.4 XMLファクトに関する必知事項

XMLファクトを使用する際の注意事項は、次のとおりです。

  • ルールを記述する場合、assertTreeアクション・タイプは拡張モードでのみ使用可能です。assertTreeを使用したルールの作成の詳細は、第4.8項「ツリー・モードのルールの使用」を参照してください。

  • デシジョン関数を作成する場合、入力タイプのtreeオプションでは、作業メモリーに入力ファクトを入れるためにassertを使用するかassertTreeを使用するかを定義します。assertTreeの詳細は、第4.8項「ツリー・モードのルールの使用」を参照してください。

  • XMLスキーマにrestriction定義が含まれていると、要素内での使用に有効なタイプを制限できます。restrictionの一般的な用途は、例3-1に示すように、要素に使用できる文字列の列挙を定義することです。

    例3-1 XMLスキーマのrestrictionの例

    <xs:simpleType name="status-type">
            <xs:restriction base="xs:string">
                <xs:enumeration value="manual"/>
                <xs:enumeration value="approved"/>
                <xs:enumeration value="rejected"/>
            </xs:restriction>
    </xs:simpleType>
    

    Oracle JAXB 2.0では、restrictionがJava列挙タイプにマップされます。ルール・デザイナを使用してJava列挙タイプまたは要素をXML制限とともにインポートすると、列挙を表す静的な最終フィールドを式に使用できます。また、Oracle Business Rulesでは列挙ごとに、すべての列挙値およびNULLを含むバケット・セットが作成されます。バケット・セットの詳細は、第3.6項「バケット・セットの使用」を参照してください。

  • Oracle Application Serverには、デフォルト・バージョンのJAXBバインド・コンパイラが同梱されています。異なるJAXBバインド・コンパイラも使用できます。ただし、異なるJAXBバインド・コンパイラを使用する場合は、XMLスキーマ処理を手動で実行し、生成されたJavaパッケージおよびクラスをJavaファクトとしてデータ・モデルにインポートする必要があります。

    JAXBの詳細は、次を参照してください。

    http://java.sun.com/webservices/jaxb/

  • スキーマまたはクラスを変更し、実行時に変更後のスキーマまたはクラスを使用する場合、ファクトを再インポートする必要があります。互換性のない変更(ルールで参照されているプロパティの削除など)によって発生する検証警告があれば、訂正する必要があります。詳細は、第3.2.3項「スキーマが更新されたXMLファクトをリロードする方法」を参照してください。

  • ほとんどのユーザーは、ObjectFactoryを使用またはインポートする必要はありません。ObjectFactoryをインポートして使用する必要がある場合は、インポートする各XMLスキーマに異なるパッケージ名を使用しないと、異なるObjectFactoryクラスが競合します。

  • minOccurs="0"およびnillable="true"を含む要素のあるXMLスキーマの使用では、JAXBでの特別な処理が発生します。詳細は、第C.12項「xsd:string入力済要素を持つXMLスキーマをタイプJAXBElementとしてインポートするのはなぜですか。」を参照してください。

  • JAXBのデフォルト要素の命名規則では、XMLスキーマ要素名にアンダースコア文字を含むXMLスキーマのコンパイルに失敗します。詳細は、第D.7項「アンダースコアを持つXMLスキーマでJAXBコンパイルに失敗するのはなぜですか。」を参照してください。

  • デシジョン・サービスの入力のタイプおよび名前には、特定の制限があります。詳細は、第D.8項「デシジョン・サービスの入力と出力の要素タイプはどのように制限されますか。」を参照してください。

  • 組込みディクショナリには、JavaラッパーのIntegerLongShortFloatDoubleBigDecimalBigIntegerに対するサポートが含まれています。これらのタイプは、XMLファクト・タイプに表示されます。

3.3 Javaファクトの使用

ルール・デザイナでは、Javaファクトをインポートすると、Javaクラスおよびそのメソッドがルール・デザイナで参照可能になります。ルール・デザイナでは、Javaコードやバイトコードがデータ・モデルやディクショナリにコピーされることはありません。

Javaファクト・タイプを使用すると、Javaクラスの選択したプロパティおよびメソッドをRules Engineにインポートできるため、ルールではそのJavaクラスのインスタンスへのアクセス、作成、変更および削除が可能となります。

Javaファクト・タイプをインポートすると、Rules EngineはJavaクラスに定義されているpublic属性、publicメソッドおよびBeanプロパティにアクセスして使用できます(Beanプロパティが適切です。これは、BeanプロパティがModifyアクションで変更できるからです)。

3.3.1 JavaクラスをインポートしてJavaファクトを定義する方法

Javaファクトをルールおよびデシジョン表で使用する前に、Javaファクトを含むクラスおよびパッケージをルール・デザイナで使用可能にする必要があります。そのためには、ルール・デザイナを使用してJavaクラスを含むクラスパスを指定し、Javaファクトをインポートします。

Javaファクトをインポートして定義する手順は、次のとおりです。

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

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

    図3-5 「ファクト」ナビゲーション・タブの「Javaファクト」表

    図3-5の説明が続きます
    「図3-5 「ファクト」ナビゲーション・タブの「Javaファクト」表」の説明

  3. 「Javaファクト」タブで「作成」をクリックします。図3-6に示すように、「Javaファクトの作成」ダイアログが表示されます。

    図3-6 Javaファクトの追加

    図3-6の説明が続きます
    「図3-6 Javaファクトの追加」の説明

  4. 「Javaファクトの作成」ダイアログで、インポートするクラスを含むクラスパスが「クラスパス」領域に表示されない場合は、「クラスパスに追加」をクリックします。「ディレクトリ/Jarの選択」ダイアログが表示されます。

    ルール・デザイナのデフォルト・クラスパスには、3つのパッケージjavajavaxおよびorgが含まれています。この3つのパッケージには、ルール・デザイナでJavaランタイム・ライブラリ(rt.jar)からインポートできるクラスが含まれています。Rules Designerでは、これらのクラスを「クラス」領域から削除することはできません(また、関連するクラスパスは「クラスパス」領域に表示されません)。

  5. 「ディレクトリ/Jarの選択」ダイアログで、追加するクラスパスまたはjarファイルを参照して選択します。デフォルトでは、プロジェクトの出力ディレクトリはインポート・クラスパスに存在し、プロジェクト内のJavaクラスは「クラス」インポータに表示されます。表示されない場合は、プロジェクトに対してBuildアクションを実行します。

  6. 「開く」をクリックします。これにより、クラスパスまたはjarファイルが追加され、「クラスパス」領域が更新されます。

  7. 「Javaファクトの作成」ダイアログの「クラス」領域で、インポートするパッケージとクラスを選択します。

  8. 「OK」をクリックします。「Javaファクト」タブの「Javaファクト」表が更新されます。

3.3.2 Javaファクトの表示および編集方法

Javaファクトのインポート後にJavaファクトを表示および編集するには、「Javaファクトの編集 -」ダイアログを使用します。

Javaファクトを表示して編集する手順は、次のとおりです。

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

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

  3. 「Javaファクト」表で、編集するJavaファクトをダブルクリックします。図3-7に示すように、「Javaファクトの編集 -」ダイアログが表示されます。

    図3-7 「Javaファクトの編集 -」ダイアログ

    図3-7の説明が続きます
    「図3-7 「Javaファクトの編集 -」ダイアログ」の説明

「Javaファクトの編集 -」ダイアログには、表3-2に示すフィールドがあります。

表3-2 「Javaファクトの編集 -」ダイアログのフィールド

フィールド 説明

クラス

Javaファクトに関連付けられているソースのJavaファクト・クラスが表示されます。

エイリアス

Javaファクトの別名を入力します。

スーパー・クラス

このファクトに関連付けられているJavaスーパークラスが表示されます。

説明

Javaファクトの説明を入力します。

参照可能

ルール・デザイナのリストにJavaファクトを表示する場合に選択します。

「属性」領域

表示または編集するJavaファクトのJavaクラスに関連付けられている、使用可能なクラス・プロパティ、コンストラクタ、メソッドまたはフィールドを選択します。


3.3.3 Javaファクトに関する必知事項

Javaファクトを定義する際の注意事項は、次のとおりです。

  • Windowsシステムでは、「クラスパス」領域でクラスパスの指定に円記号(\)またはスラッシュ(/)を使用できます。ルール・デザイナでは、どちらのパス・セパレータも使用できます。

  • ルール・デザイナで使用するクラスおよびインタフェースは、次のルールに従う必要があります。つまり、クラスまたはインタフェースを使用する場合、参照可能にできるのは、そのスーパー・クラスまたは実装されるインタフェースの1つのみです。

  • クラスパスを指定する際に、JARファイル、ZIPファイルまたはディレクトリのフルパスを指定できます。

  • クラスパスにディレクトリ名を指定する場合、そのディレクトリでは、ルート・パッケージ(完全パッケージ名に含まれる最初のパッケージ)が格納されているディレクトリで終わるクラスパスを指定します。つまり、クラスパスでディレクトリを指定すると、ルール・デザイナではそのツリー内でパッケージ名構造と一致するディレクトリ名が検索されます。

    たとえば、c:\myprj\cool\example\Test1.classにあるクラスcool.example.Test1をインポートするには、クラスパスの値c:\myprjを指定します。

  • クラスを変更した場合は、ファクトを再インポートする必要があります。再インポート操作の完了後、クラスの変更によって検証警告が表示されることがあります。互換性のない変更(ルールで参照されているプロパティの削除など)によって発生する検証警告があれば、訂正する必要があります。

3.4 RLファクトの使用

RLファクトは、ユーザーが直接作成でき外部ソースが存在しないタイプの唯一のファクトです。他のすべてのタイプのOracle Business Rulesファクトはインポートされます。RLファクトは、リレーショナル・データベースの行またはメソッドがないJavaBeanと同じです。RLファクトには、データ・モデルで使用可能なタイプ(RLファクト、Javaファクトまたはプリミティブ・タイプ)のプロパティのリストが含まれています。RLファクトを使用すると、動的な仮想型を提供することでJavaアプリケーションのオブジェクト・モデルを拡張できます。

次に例を示します。

顧客が過去3か月間に500ドル支払った場合(IF customer spent $500 within past 3 months)

その顧客はGold Customerとなる(THEN customer is a Gold Customer)

このルールでは、顧客データを指定するJavaファクトを使用し、RLファクト(Gold Customer)を作成するアクションも使用できます。ルールは、次のように、Gold Customerファクトを使用するように定義できます。

顧客がGold Customerの場合(IF customer is a Gold customer)

10%の割引を提供する(THEN offer 10% discount)

このルールでは、Gold Customerという名前のRLファクトを使用しています。このルールは、Gold Customerファクトを使用して、過去3か月間に$500の支払があった顧客には10%割引の資格があることを示しています。ルールには、顧客がGold Customerになる他の方法も指定できます。

ルール・デザイナでテストおよびプロトタイプ化を行う場合、RLファクトを作成し、ルールの記述およびテストに使用してから、スキーマをインポートし、XMLファクトに切り替えることができます(承認済XMLスキーマが作成されるか使用可能になるまで、待機が必要な場合があります)。RLファクトから対応するXMLファクトに切り替える手順は、次のとおりです。

  1. RLファクトを削除します(これにより、作成したルールまたはデシジョン表で削除対象のRLファクトを使用しているという検証警告が表示されます)。

  2. XMLファクトをインポートし、そのXMLファクトおよびプロパティに、手順1で削除したRLファクトとプロパティの名前と一致する別名を与えます。

  3. このプロセスでは、XMLファクトとプロパティの別名および型が削除するRLファクトの別名および型と一致する場合、検証警告が削除されます。

3.4.1 RLファクトの定義方法

「ファクト」ナビゲーション・タブからRLファクトを追加します。

RLファクトを定義する手順は、次のとおりです。

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

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

    図3-8 Rules Designerの「RLファクト」タブ

    図3-8の説明が続きます
    「図3-8 Rules Designerの「RLファクト」タブ」の説明

  3. 「RLファクト」タブで「作成」をクリックします。

  4. 「RLファクト」表で、「名前」フィールドにRLファクトの名前を入力するか、またはデフォルト名を受け入れます。

  5. 「RLファクト」表で、「説明」フィールドに説明を入力するか、またはデフォルトの説明なしを受け入れます。

3.4.2 RLファクトを表示および編集してRLファクトのプロパティを追加する方法

RLファクトにプロパティを追加するには、「RLファクトの編集 -」ダイアログを使用します。

RLファクトを表示、編集してRLファクトのプロパティを追加する手順は、次のとおりです。

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

  2. 「RLファクト」タブで、ファクトを表示または編集するRLファクトをダブルクリックします。図3-9に示すように、「RLファクトの編集 -」ダイアログが表示されます。

    図3-9 「RLファクトの編集 -」ダイアログ

    図3-9の説明が続きます
    「図3-9 「RLファクトの編集 -」ダイアログ」の説明

  3. RLファクトのプロパティを追加するには、「RLファクトの編集 -」ダイアログの「プロパティ」領域で「作成」をクリックします。

    1. 「名前」フィールドにプロパティ名を入力します。

    2. 「タイプ」フィールドで、リストからタイプを選択するか、またはプロパティ・タイプを入力します。

    3. プロパティにバケット・セットを関連付けるには、「バケットセット」フィールドのリストからバケット・セットを選択します。

    4. プロパティに初期値を関連付けるには、「初期値」フィールドに値を入力します。

  4. 必要に応じて前述の手順を繰り返し、さらにプロパティを追加します。

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

3.4.3 RLファクトに関する必知事項

「RLファクトの編集 -」ダイアログを使用してRLファクトにプロパティを追加する場合、図3-10に示すように、「プロパティ」領域の「初期値」フィールドに候補値のリストが表示されます。

図3-10 RLファクトのプロパティの初期値の設定

図3-10の説明が続きます
「図3-10 RLファクトのプロパティの初期値の設定」の説明

ルール・デザイナの一部のフィールドを使用する際に、図3-11に示すように、初期値のリストや他のリストが空の場合があります。この場合、リストは空のボックスです。したがって、Rules Designerで値の入力に役立つオプションがみつからない場合、テキスト入力領域に値を直接入力するか、または「式ビルダー」アイコンをクリックして「式ビルダー」ダイアログを表示する必要があります。

図3-11 RLファクトの「初期値」フィールドの空のリスト・オプション

図3-11の説明が続きます
「図3-11 RLファクトの「初期値」フィールドの空のリスト・オプション」の説明

3.5 ADFビジネス・コンポーネント・ファクトの使用

ADFビジネス・コンポーネント・ファクトを使用すると、ルールおよびデシジョン表でADFビジネス・コンポーネントをファクトとして使用できます。ADFビジネス・コンポーネントのファクトを使用することで、ルールのベースとして必要なビジネス・オブジェクトを表すビュー・オブジェクトのグラフをアサートし、Oracle Business Rulesにビュー・オブジェクトのグラフ内で各種の関連ビュー・オブジェクト間の関係管理に伴う複雑な処理を実行させることができます。

詳細は、第10章「Oracle Business RulesとADFビジネス・コンポーネントの使用」を参照してください。

3.5.1 ADFビジネス・コンポーネント・ファクトをインポートおよび定義する方法

ADFビジネス・コンポーネント・ビュー・オブジェクトをインポートすると、ビュー・オブジェクの各属性に対応するプロパティを持つADFビジネス・コンポーネント・ファクト・タイプが作成されます。

ADFビジネス・コンポーネント・ファクトを追加する手順は、次のとおりです。

  1. 「ファクト」ナビゲーション・タブをクリックし、「ADF-BCファクト」タブを選択します。図3-12に示すように、「ADF-BCファクト」表が表示されます。

    図3-12 「ADFビジネス・コンポーネント・ファクト」タブ

    図3-12の説明が続きます
    「図3-12 「ADFビジネス・コンポーネント・ファクト」タブ」の説明

  2. 「作成」をクリックします。図3-13に示すように、「ADFビジネス・コンポーネント・ファクト」ダイアログが表示されます。

    図3-13 「ADF-BCファクトの作成」ダイアログ

    図3-13の説明が続きます
    「図3-13 「ADF-BCファクトの作成」ダイアログ」の説明

  3. 「接続」フィールドのリストから、ADFビジネス・コンポーネント・オブジェクトで使用する接続を選択します。「クラスパスの検索」領域にはクラスパスのリストが表示されます。詳細は、第3.5.2項「ADFビジネス・コンポーネント・ファクトのクラスパスに関する必知事項」を参照してください。

  4. 「ビュー定義」フィールドで、インポートするビュー・オブジェクトの名前を選択します。

  5. 「OK」をクリックします。図3-14に示すように、「ファクト」ナビゲーション・タブが表示されます。インポートしたファクトには検証警告が含まれることに注意してください。この検証警告の削除の詳細は、第3.5.3項「ADFビジネス・コンポーネントの循環参照に関する必知事項」を参照してください。

    図3-14ルール・デザイナでのADFビジネス・コンポーネント・ファクト

    図3-14の説明が続きます
    「図3-14ルール・デザイナでのADFビジネス・コンポーネント・ファクト」の説明

3.5.2 ADFビジネス・コンポーネント・ファクトのクラスパスに関する必知事項

表示されたいずれかのクラスパスの「ADFビジネス・コンポーネント・ファクト」ダイアログの「クラスパスの検索」領域に表示されるクラスパス・リストには、プロジェクトで使用できるオブジェクト定義を表示できます。プロジェクトに使用できないクラスパスを使用する必要がある場合は、このダイアログで「クラスパスに追加」をクリックするだけで十分です(非常にまれなケース)。

3.5.3 ADFビジネス・コンポーネントの循環参照に関する必知事項

ADFビジネス・コンポーネント・ファクトには、図3-14に示すように循環参照を含めることができます。この警告がビジネス・ルール検証ログに表示された場合は、循環参照を手動で解決する必要があります。そのためには、循環参照に関係するいずれかのプロパティの「参照可能」チェック・ボックスの選択を解除します。

3.5.4 ADFビジネス・コンポーネント・ファクトに関する必知事項

各ADFビジネス・コンポーネント・ファクト・タイプには、各ファクト・インスタンスが表すoracle.jbo.Rowを参照するViewRowImplという名前のプロパティと、この行と親行のキー値セットの取得に使用可能なoracle.rules.sdk2.decisionpoint.KeyChainオブジェクトを指すkey_valuesという名前のプロパティが含まれています。

ADFビジネス・コンポーネントを使用する際の注意事項は、次のとおりです。

  • ビュー・オブジェクト定義間の関係は、ビュー定義の属性、特にビュー・リンクのアクセッサである属性のイントロスペクションによって決定されます。

    ADFビジネス・コンポーネント・ファクト・タイプ・インポータでは、どの関係が1対1で、どの関係が1対多であるかが正しく判別され、それに従ってディクショナリに定義が生成されます。1対多関係の場合、生成されるプロパティのタイプはListで、実行時に示されたタイプのファクトが含まれています。

  • 循環的なタイプ依存性を持つADFビジネス・コンポーネント・ファクト・タイプは使用できません。循環に関係する1つ以上のプロパティの「参照可能」チェック・ボックスの選択を解除して、これらの循環を絶つ必要があります。

  • ADFビジネス・コンポーネント・ファクト・タイプはJavaファクト・タイプではなく、ビュー・オブジェクト用に明示的に作成された実装クラスのメソッドは起動できません。

    この種のメソッドをコールする必要がある場合は、ビュー・オブジェクト実装をADFビジネス・コンポーネント・ファクト・タイプのかわりにJavaファクト・タイプとしてディクショナリに追加します。この場合、すべてのgetter、setterおよびその他のメソッドが使用可能になりますが、関連するビュー・オブジェクトにアクセスできなくなり、そのオブジェクトへのアクセスが必要な場合は、これらの関係を明示的に管理する必要があるというトレードオフがあります。

  • 内部的には、ADFビジネス・コンポーネント・ファクト・タイプはRLファクト・タイプのインスタンスです。

    つまり、このことは、ADFビジネス・コンポーネント・ビュー・オブジェクト・インスタンスをルール・セッションに直接アサートすることはできず、かわりにMetadataHelperおよびADFBCFactTypeHelperクラスに用意されているヘルパー・メソッドを使用する必要があることを意味します。詳細は、『Oracle Fusion Middleware Java API Reference for Oracle Business Rules』を参照してください。

3.6 バケット・セットの使用

バケット・セットを作成すると、値リストまたは値範囲のリストを定義して、Oracle Business Rules内のファクトまたはファクト・プロパティについて許容範囲内の値セットを制限できます。バケット・セットは、バケット・セットに名前を付けてデータ・モデルに格納する再利用可能なグローバル・バケット・セット、またはデシジョン表の定義時に指定し、1つの条件式にのみ適用するローカル・バケット・セットとして定義できます。ローカル・バケット・セットの使用の詳細は、第5.2.2項「デシジョン表への条件行の追加方法」を参照してください。

バケット・セットは次のように使用できます。

バケット・セットには次の3つの形式があります。

3.6.1 値リスト・グローバル・バケット・セットの定義方法

値リスト・バケット・セットを使用すると、バケット・セットのバケットの型およびリストを指定できます。

詳細は、第3.6.5項「値リスト・バケット・セットに関する必知事項」を参照してください。

値リスト(LOV)グローバル・バケット・セットを定義する手順は、次のとおりです。

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

  2. 図3-15に示すように、「バケットセットの作成」アイコンの横にあるリストから、「値リスト」を選択します。

    図3-15 値リスト・バケット・セットの追加

    図3-15の説明が続きます
    「図3-15 値リスト・バケット・セットの追加」の説明

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

  4. 「バケットセットの編集」ダイアログで、「名前」列にバケット・セット名を入力します。

    バケット・セット名がファクトの別名と同じにならないように確認してください。これらの名前が同じだと、次のような検証エラーが発生します。

    RUL-05006: The fact type "Rating" has the same alias as an unrelated bucketset.
    
  5. 「データ型」列で、リストからデータ型を選択します。

    たとえば、リストから「文字列」を選択します。

  6. 「作成」アイコンをクリックして値を追加します。

  7. 追加するバケットごとに、次の手順を実行します。

  8. 図3-16に示すように、必要に応じてバケット・セットの「作成」アイコンをクリックし、値をさらに追加します。

    図3-16 値リスト・バケット・セットの作成

    図3-16の説明が続きます
    「図3-16 値リスト・バケット・セットの作成」の説明

  9. 「バケットセットの編集」ウィンドウで「OK」をクリックします。

デシジョン表でのルールの順序付けは、デシジョン表で条件式に関連付けられているLOVバケット・セット内のバケットの相対位置を変更することで管理できます。

値リスト・バケット・セット内のバケットの順序を変更する手順は、次のとおりです。

  1. バケット・セットの「バケットセットの編集」ダイアログで、順序を変更するバケットを選択します。

  2. バケットの順序を下位へ変更するには、「下に移動」アイコンをクリックします。

  3. バケットの順序を上位へ変更するには、「上に移動」アイコンをクリックします。

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

3.6.2 範囲リスト・グローバル・バケット・セットの定義方法

範囲リスト・バケット・セットを使用すると、バケット・セットのバケットの型およびエンドポイントを指定できます。

詳細は、第3.6.6項「範囲バケット・セットに関する必知事項」を参照してください。

範囲リスト(範囲)グローバル・バケット・セットを定義する手順は、次のとおりです。

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

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

  3. 「データ型」フィールドをダブルクリックします。図3-17に示すように、「バケットセットの編集」ダイアログが表示されます。

    図3-17 「バケットセットの編集」: 範囲リスト

    図3-17の説明が続きます
    「図3-17 「バケットセットの編集」: 範囲リスト」の説明

  4. 「バケットセットの編集」ダイアログで、「名前」フィールドにバケット・セット名を入力します。

  5. 「バケットセットの編集」ダイアログで、「データ型」フィールドのリストからバケット・セットに該当するデータ型を選択します。

    この例では、「int」を選択します。

  6. 「バケットの追加」アイコンを繰り返しクリックし、図3-18に示すようにバケット・セットに必要な数のバケットを追加します。

    図3-18 「バケットセットの編集」: 必要なバケットの追加

    図3-18の説明が続きます
    「図3-18 「バケットセットの編集」: 必要なバケットの追加」の説明

    この手順では、3つのバケットを追加します。図3-18に示すように、デフォルト値で開始します。デフォルトのバケットを変更した後、バケットには次の値が存在します。

    • 1000より大きい

    • 500以上1000以下

    • 500未満

    ルール・デザイナにより、デフォルト値50、0および負の無限大(-Infinity)でバケットが追加されます。

  7. 「エンドポイント」フィールドで、最初(最上位)のバケットから始めてデフォルト値をダブルクリックし、最上位の値バケットのエンドポイントを入力して[Enter]を押します。

    この例では、最初のバケットについて1000と入力します。

  8. 「含まれるエンドポイント」フィールドで、該当するチェック・ボックスを選択して、バケットのエンドポイントを含めるか除外します。

    この例では、バケットのエンドポイントを含めるために、このチェック・ボックスを選択状態のままにしておくことができます。

  9. 「アクションで許可済」フィールドで、該当するチェック・ボックスを選択して、バケット・セットの許可された値にバケットを含めます。

    「アクションで許可済」フィールドと「許可されないバケットをテストに含める」フィールドの詳細は、第3.6.7項「バケット・セットの「アクションで許可済」オプションに関する必知事項」を参照してください。

  10. 「エイリアス」フィールドでデフォルト値をダブルクリックし、必要なバケット別名を入力して[Enter]を押すこともできます。

    別名は、このバケット・セットを使用するデシジョン表に表示されます。別名を使用すると、バケットにデフォルト値(範囲ベースの範囲値)よりもわかりやすい名前を付けることができます。

    Oracle Business Rulesのほとんどの名前と別名では、文字、数字、埋込みの単一スペース、特殊文字($、_、'、.、-、/、:.)しか使用できません。ただし、バケット別名では、[0..1]などのその他の文字を使用できます。バケット別名にこうした追加の文字が含まれている場合、デシジョン表のアクション・セル内の別名によってバケットを参照することはできません。この場合は、バケット名(バケット値とも呼ばれている)を使用できます。

    「範囲」フィールドは読取り専用で、バケットに関連付けられている実際の範囲が別名値に関係なく明確に識別されます。詳細は、第3.6.6項「範囲バケット・セットに関する必知事項」を参照してください。

  11. 以降のバケットごとに、バケットのリスト内で下に移動し、手順7以降を繰り返します。第2のバケットの場合、エンドポイント値500を入力します。

    図3-19に、完成したバケット・セットを示します。

    図3-19 「バケットセットの編集」: 完成した範囲バケット

    図3-19の説明が続きます
    「図3-19 「バケットセットの編集」: 完成した範囲バケット」の説明

  12. 「バケットセットの編集」ダイアログで「OK」をクリックします。

3.6.3 XMLタイプからの列挙タイプ(列挙)バケット・セットの定義方法

XMLスキーマをインポートする際に、XSDに列挙値が含まれていると、ルール・デザイナでは列挙ごとに列挙タイプ・バケット・セットが自動的に作成されます。列挙タイプ・バケット・セットは読取り専用ですが、バケットの順序は変更できます。

詳細は、第3.2.4項「XMLファクトに関する必知事項」を参照してください。

XMLタイプから列挙タイプ(列挙)バケット・セットを定義する手順は、次のとおりです。

  1. 必要な列挙を含むXSDを取得します。

    例3-2に、列挙Statusを含むorder.xsdスキーマ・ファイルを示します。

    例3-2 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>
    
  2. ルール・デザイナでディクショナリを開き、列挙を含む指定のスキーマを使用してXMLファクトを作成します。詳細は、第3.2項「XMLファクトの使用」を参照してください。

  3. 「バケットセット」ナビゲーション・タブをクリックし、Enumバケット・セットを選択して、図3-20に示すようなバケット・セットを表示します。図3-20では、例3-2に示すインポートされたStatusの列挙値がXSD指定値を含むバケットとしてインポートされていることに注意してください。

    図3-20 インポートされた値を含むフォームEnumを示すバケット・セット

    図3-20の説明が続きます
    「図3-20 インポートされた値を含むフォームEnumを示すバケット・セット」の説明

デシジョン表でのルールの順序付けは、デシジョン表で条件式に関連付けられている列挙バケット・セット内のバケットの相対位置を変更することで管理できます。

列挙バケット・セット内のバケットの順序を変更する手順は、次のとおりです。

  1. バケット・セットの「バケットセットの編集」ダイアログで、順序を変更するバケットを選択します。

  2. バケットの順序を下位へ変更するには、「下に移動」アイコンをクリックします。

  3. バケットの順序を上位へ変更するには、「上に移動」アイコンをクリックします。

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

3.6.4 Javaタイプからの列挙タイプ(列挙)バケット・セットの定義方法

Java列挙をインポートすると、ルール・デザイナではJava列挙ごとに列挙タイプのバケット・セットが自動的に作成されます。列挙タイプ・バケット・セットは読取り専用ですが、バケットの順序は変更できます。

Javaファクトから列挙タイプ(列挙)バケット・セットを定義する手順は、次のとおりです。

  1. 必要な列挙を含むJavaクラスを作成または取得します。

    例3-3に、列挙OrderSizeを含むRejectPurchaseItem.javaクラスを示します。

    例3-3 列挙OrderSizeを含むJavaファクト

    package com.example;
    
    public class Class1
    {
        public enum OrderSize { SMALL, MEDIUM, LARGE };
        public Class1()
        {
        }
    }
    
  2. ルール・デザイナでディクショナリを開き、Javaクラスを使用してJavaファクトを作成します。詳細は、第3.3項「Javaファクトの使用」を参照してください。

    図3-21に、Java列挙Class1$OrderSizeのJavaファクトの作成方法を示します。

    図3-21 Javaファクトの作成

    図3-21の説明が続きます
    「図3-21 Javaファクトの作成」の説明

  3. 図3-22に示すように、Rules Designerで「バケットセット」ナビゲーション・タブをクリックし、Enumバケット・セットを選択します。例3-3の列挙からの列挙Class1$OrderSizeが、Javaのenum指定値を含むバケット・セットになっていることに注意してください。

    図3-22 Java Enumの「バケットセットの編集」ダイアログ

    図3-22の説明が続きます
    「図3-22 Java Enumの「バケットセットの編集」ダイアログ」の説明

デシジョン表でのルールの順序付けは、デシジョン表で条件式に関連付けられている列挙バケット・セット内のバケットの相対位置を変更することで管理できます。

列挙タイプ(列挙)バケット・セット内のバケットの順序を変更する手順は、次のとおりです。

  1. バケット・セットの「バケットセットの編集」ダイアログで、順序を変更するバケットを選択します。

  2. バケットの順序を下位へ変更するには、「下に移動」アイコンをクリックします。

  3. バケットの順序を上位へ変更するには、「上に移動」アイコンをクリックします。

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

3.6.5 値リスト・バケット・セットに関する必知事項

デシジョン表では、条件式に関連付けられているバケット・セット内のバケットの順序によって条件セルの順序が決まり、したがってルールの順序も決まります。デシジョン表でのルールの順序付けは、条件式に関連付けられている値リスト・バケット・セット内のバケットの相対位置を変更することで管理できますが、範囲バケットの順序は変更できません。

図3-23に、値リストを使用するcolorsというバケット・セットに関するルール・デザイナ内のバケット・セット定義を示します。

図3-23 値リストを使用したバケット・セット定義

図3-23の説明が続きます
「図3-23 値リストを使用したバケット・セット定義」の説明

図3-23に示すように、デフォルトの値リスト・バケット・セットでは、otherwiseという値が値リスト(LOV)に含まれています。このotherwiseという値は、他のすべての値と性質が異なり、他のバケットを持たないすべての値タイプと一致します。したがって、値リストのotherwiseを使用すると、バケット・セットを使用する条件式はすべての値を処理可能になり、指定したタイプのすべての値と一致するようになります。この場合の一致は、定義された値か、otherwiseバケットのいずれかに対するものです。otherwise値をLOVバケット・セットから削除することはできませんが、「アクションで許可済」チェック・ボックスをクリアして除外することはできます(otherwiseを除外すると、バケット・セット内のバケットのリストに存在しない値を割り当てようとすると、検証警告が表示されます)。

表3-3に、ルール・デザイナでLOVバケット・セットについてサポートされているバケット・セット値を示します。

表3-3 LOVバケット・セットについてサポートされている型

タイプ 説明

Javaプリミティブ型

intdoublebooleancharbyteshortlongおよびfloatが含まれます。

String

String型が含まれます。

Calendar

現行ロケール内のCalendar型が含まれます。



注意:

デシジョン表でブール型を使用する場合、LOVバケット・セットを指定する必要はありません。ブール型の場合、Oracle Business Rulesには可能な値(trueおよびfalse)用の組込みバケットが用意されています。


3.6.6 範囲バケット・セットに関する必知事項

範囲リスト・バケット・セットにバケットを追加すると、現在選択しているバケット値および次に上位のバケット値に基づいて値が計算されます。エンドポイント値を変更すると、値は自動的にバケット・セット内でソートされるため、新規バケットの追加先はどこでもかまいません。ただし、ルール・デザイナでは、現行のバケット・セットのエンドポイント値およびエンドポイント値の間に余地がない場合があります。この場合、ルール・デザイナでは次の書式の検証警告が表示されます。

RUL-05849: Bucketset has duplicate bucket value "4999"

この問題を解決するには、バケットのエンドポイントを変更し、重複するバケットを削除する必要があります。

図3-24に、整数intおよび範囲を持つバケット・セットの「バケットセットの編集」ウィンドウを示します。

図3-24 範囲リストと3つのエンドポイントを使用したバケット・セット定義

図3-24の説明が続きます
「図3-24 範囲リストと3つのエンドポイントを使用したバケット・セット定義」の説明

表3-4に、ルール・デザイナで範囲バケットについてサポートされている型を示します。

表3-4 範囲バケットについてサポートされている型

タイプ 説明

選択したプリミティブ型

intdoubleshortlongおよびfloatが含まれます。

Calendar

現行ロケール内のCalendar型が含まれます。


「範囲」フィールドに関する次の規則に注意してください。

  • 論理演算子: 正または負の無限大に関する範囲を指定します。たとえば、>=25は25以上で正の無限大を意味し、<18は負の無限大から18未満を意味します。

  • 大カッコ「[」: このエンドポイント値を含む範囲を指定します。たとえば、[18..25)は18以上25未満を意味します。

  • 丸カッコ「)」: このエンドポイント値を除く範囲を指定します。たとえば、(18..25]は18より大きく25以下を意味します。

3.6.7 バケット・セットの「アクションで許可済」オプションに関する必知事項

バケット・セット内のバケットを定義する際、許可されていない値に対応する一部のバケットを定義できます。たとえば、運転者の年齢に関するバケット・セットでは、通常、0より小さい値を含むバケットは許可しません。したがって、運転者のデータを持つファクトに、運転者の年齢に関するバケット・セットに関連付けられた年齢プロパティが含まれる場合は、年齢プロパティが-1などの値に設定されているファクトを作成または変更できないようにする必要があります。バケット・セットでは、有効なバケットに対して「アクションで許可済」を選択し、無効なバケットに対してこのオプションの選択を解除します。

バケット・セット・オプション「許可されないバケットをテストに含める」を使用すると、デシジョン表の条件およびルールのテストで「アクションで許可済」が選択されているかどうかに関係なく、すべてのバケットを含めることができます。すべてのバケットを含めることで、不正な値を明示的にテストできます。オプション「許可されないバケットをテストに含める」を使用すると、次のような2つのケースに対応できます。

  1. Oracle Business Rules Engineの入力データがクリーンで、無効なデータ(負の年齢など)が含まれていない場合。この場合、「許可されないバケットをテストに含める」の選択を解除する必要があります。注意: age < 0「アクションで許可済」に設定しないのは、これにより、modify(driver, age: -1))のような無効な値を使用するアクションを作成しようとした場合に、デザインタイムの検証警告が提供されるためです。詳細は、第4.11項「ルールにおけるオプション値の制約としてのバケット・セットの使用」を参照してください。

  2. ルールのテストやデシジョン表で、除外したバケットを検討したい場合があります。この場合、「許可されないバケットをテストに含める」を選択する必要があります。これは、Oracle Business Rules Engineの入力データがクリーンでなく、無効なデータ(無効な負の年齢など)が含まれているような場合に役立ちます。すべてのバケット・セットのアクションを提供するデシジョン表では、除外したバケットのケースを含めて、エラー・ファクトのアサートなど、適切なアクションを提供することもできます。この処理のためには、バケット・セット内のすべてのバケットの「アクションで許可済」フィールドを選択するか、「アクションで許可済」フィールドの構成をそのままにして、「許可されないバケットをテストに含める」フィールドを選択できます。「許可されないバケットをテストに含める」フィールドを使用すると、(すべてのバケットを再構成する必要がないので)便利なだけでなく、「アクションで許可済」の構成が保持されるので、このバケット・セットを再使用して簡単に最初のケースを処理できます(「許可されないバケットをテストに含める」の選択が解除されている場合)。

3.6.8 バケット値に関する必知事項

バケット・セットにバケット値を入力する場合、入力値はバケット・セットに指定されたタイプに対して有効である必要があります。入力した値がバケット・セット・タイプに無効であると、ルール・デザイナで引用符が追加され文字列になります。入力されたデータが指定タイプに対して適切でない場合、引用符を追加することによってのみ有効なリテラルとなります。たとえば、intタイプのLOVバケット・セットで2.2という値を入力すると、ルール・デザイナから次のような警告が表示されます。

RUL-05833: Invalid characters "2.2" in bucket value

この問題を解決するには、バケット値に有効な値(この場合は値2など)を入力するか、バケット・セットのタイプを変更します。

別の例として、バケットに値を入力する場合、たとえばデータ型がshortのバケット・セットで値999999のバケットを追加すると、ルール・デザイナによって"999999"という値が割り当てられます。Shortの最大値は32767です。この場合、データ型がshortのバケット・セットに対して「String」は有効なバケット値ではないため、バケット値に関する前述の例に似た警告が表示されます。この問題を解決するには、すべてのバケットに対して適切な値(この例では、32767以下の値)を入力します。

3.7 バケット・セットのビジネス条件との関連付け

グローバル・バケット・セットを定義した後、データ・モデルの各部をグローバル・バケット・セットに関連付けることができます(両方のタイプに互換性がある場合)。これにより、デシジョン表を定義する際、「条件」領域にある条件セルにバケット・セットを自動的に割り当てることができます。また、バケット・セットがビジネス条件に関連付けられている場合、Oracle Business Rulesでは、ルールでビジネス条件の式の値に対する制約として定義したバケットが使用されます。

次の4種類のビジネス条件をバケット・セットに関連付けることができます。

3.7.1 バケット・セットをファクト・プロパティに関連付ける方法

デシジョン表を作成する準備のため、グローバル・バケット・セットをデータ・モデル内のファクト・プロパティに関連付けることができます。

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

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

  2. 編集対象のファクト・タイプを選択して、「編集」アイコンをクリックします。選択したファクト・タイプに適した「ファクトの編集」ダイアログが表示されます。

  3. 「プロパティ」表の「バケットセット」の下で、適切なファクト・プロパティのセルを選択し、プロパティに関連付けるバケット・セットをリストから選択します。図3-25に示す例を参照してください。

    図3-25 プロパティのバケット・セットの定義

    図3-25の説明が続きます
    「図3-25 プロパティのバケット・セットの定義」の説明

  4. 「ファクトの編集」ページで「OK」をクリックします。

3.7.2 バケット・セットを関数または関数の引数に関連付ける方法

デシジョン表を作成する準備のため、グローバル・バケット・セットをデータ・モデル内の関数に関連付けることができます。

バケット・セットを関数の戻り値に関連付ける手順は、次のとおりです。

  1. Rules Designerで、「関数」タブを選択します。

  2. 編集する関数を選択します。これにより、選択された関数について、関数の引数および関数本体が表示されます。

  3. 「関数」表の「バケットセット」の下でセルを選択し、使用するバケット・セットをリストから選択します。図3-26に示す例を参照してください。

    図3-26 関数の戻り値に対するバケット・セットの定義

    図3-26の説明が続きます
    「図3-26 関数の戻り値に対するバケット・セットの定義」の説明

バケット・セットを関数の引数に関連付ける手順は、次のとおりです。

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

  2. 編集する関数を選択します。これにより、選択された関数について、関数の引数および関数本体が表示されます。

  3. 「関数」表の「引数」領域で、適切な引数を選択します。

  4. 指定の引数について「バケットセット」の下でセルを選択し、使用するバケット・セットをリストから選択します。

3.7.3 バケット・セットのグローバル値との関連付け方法

デシジョン表を作成する準備のため、グローバル・バケット・セットをデータ・モデル内のグローバル値に関連付けることができます。

バケット・セットをグローバル値に関連付ける手順は、次のとおりです。

  1. Rules Designerで、「グローバル」ナビゲーション・タブを選択します。

  2. 編集対象のグローバル値を選択します。

  3. 「グローバル」表の「バケットセット」の下で、適切なグローバル値のセルを選択し、グローバル値に関連付けるバケット・セットをリストから選択します。図3-27に示す例を参照してください。

図3-27 グローバル値に対するバケット・セットの定義

グローバルとバケット・セットとの関連付け
「図3-27 グローバル値に対するバケット・セットの定義」の説明