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

前
次

3 ファクトと値セットの使用

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

この章の内容は以下のとおりです。

3.1 ファクトと値セットの使用の概要

ルール・デザイナでは、データ・モデルの一部であるファクト・タイプを使用してOracle Business Rulesにビジネス・オブジェクトおよびそのメソッドを認識させます。ファクト・タイプは、データ・モデルにおけるタイプ定義です。ファクトは、そのファクト・タイプのインスタンスであり、ルールの実行対象とすることができるデータ構造です。

たとえば、ファクト・タイプは、関連するプロパティ(ビジネス条件)のコレクションであると、ファクトはそのビジネス条件にバインドされた関連するデータのコレクションです。顧客ファクトには、名前だけでなく、アドレス、履歴、信用格付などが含まれる場合があります。

ルールを作成する前に、ファクト・タイプおよび値セットを作成できます。

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

  • XMLファクト: XMLファクトは、XMLスキーマを指定して既存のソースからインポートされます。インポートしたXMLファクトに別名を追加するか、XMLファクトをRLファクトと併用し、ビジネス・ニーズに応じてデータ・モデルを変更できます。

    詳細は、「XMLファクトの使用」を参照してください。

  • Javaファクト: Javaファクトは既存のソースからインポートされます。Javaファクトに別名を追加するか、RLファクトと併用し、ビジネス・ニーズをデータ・モデルのターゲットにすることができます。また、Javaファクトは、作成するルールまたはデシジョン表で使用する関連Javaクラスのインポートにも使用されます。

    詳細は、「Javaファクトの使用」を参照してください。

  • RLファクト: RLファクトは、ユーザーが直接作成でき、外部ソースが存在しないタイプの唯一のファクトです。他のすべてのタイプのOracle Business Rulesファクトはインポートされます。RLファクトは、リレーショナル・データベースの行またはプロパティを持つJavaBeanと似ています。RLファクトには、名前付きの型指定プロパティのセットが含まれます。プロパティ値には、文字列のようなプリミティブ、別の構造化ファクトまたはリストを使用できます。RLファクトは、迅速で独立的な開発およびデシジョン・ロジックのテストに役立ちます。インポートされたスキーマを使用可能にするか安定させる前に、RLファクトを使用して、インポートされたファクト・タイプから最終的に取得される入力データ(XMLスキーマなど)を、モデル化できます。中間デシジョンはアプリケーションに返されません(顧客を優良または不良に分類するサブデシジョンなど)。通常は、デシジョンの入力および出力データに使用されるファクト・タイプをインポートすることが最適な方法です。RLファクトを使用すると、動的な仮想型を提供することでJavaアプリケーションのオブジェクト・モデルを拡張できます。

    詳細は、「RLファクトの使用」を参照してください。

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

    詳細は、「ADFビジネス・コンポーネント・ファクトの使用」を参照してください。

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

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

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

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

3.2 XMLファクトの使用

XMLファクト・タイプを使用すると、ルールを記述する際にXMLスキーマのタイプ、要素および属性を使用できます。XMLスキーマに定義されている要素およびタイプをデータ・モデルにインポートし、Javaファクト・タイプやRLファクト・タイプの場合と同様にIF/THENルールおよびデシジョン表ルールの作成に使用できます。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スキーマから指定する要素に基づいてルールを定義できます。

注意:

XSDに単純型のプリミティブまたは非プリミティブ・ルート要素が含まれる場合、JAXBでは単純型要素がJAXBElementにマッピングされ、ObjectFactoryクラスのみが生成されます。ビジネス・ルールで使用される複合型のファクトを作成する必要があります。

3.2.1 XMLファクト・タイプを作成する方法

  1. XMLスキーマを定義または取得します。
  2. ルール・デザイナを使用して、XMLスキーマをディクショナリにインポートします。

    この手順では、JAXBコンパイラを使用してXMLスキーマからJavaクラスを生成します。XMLスキーマのコンパイル後に、スキーマから必要な要素を選択し、データ・モデル内でXMLファクトを追加し、生成されたJAXBクラスをデータ・モデルにインポートします。

    これらの手順の詳細は、「XMLスキーマをインポートしてXMLファクトを追加する方法」を参照してください。

  3. データ・モデルに追加したXMLファクトに基づいて、ルールを記述するか、デシジョン表を作成します。

    詳細は、「ルールの使用」および「デシジョン表の作成」を参照してください。

XMLスキーマに定義されている要素およびタイプをデータ・モデルにインポートし、タイプのインスタンスをルールで作成、アサート、変更および取消しできます。ほとんどのXML文書では階層情報が記述されており、各要素にはサブ要素が含まれています。通常、ユーザーはこの階層内の複数の要素および要素間の階層関係に基づいて個々のルールを記述します。

Oracle Business Rulesでは、ファクトをアサートする際のデフォルト動作は単一のファクト・インスタンスをアサートすることのみで、サブ要素の階層内で参照している可能性のある子オブジェクトはアサートしません。ルールまたはデシジョン表の作成時には、通常、ルート要素への参照に基づいて要素の階層全体をアサートするようにします。Oracle Business Rulesには、階層を再帰的にアサートできるようにassertTreeアクション・タイプが用意されています。詳細は、「ツリー・モードのルールの使用」を参照してください。

3.2.2 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ファクトの作成」ダイアログの「ソース・スキーマ」領域で、「ソース・スキーマの追加」をクリックし、「ソース・スキーマの追加」ダイアログを開きます。
  5. 「ソース・スキーマの追加」ダイアログでは、次の操作を実行します。
    • 「スキーマの場所」フィールドで、インポートするXMLスキーマの場所を入力するか、「参照」をクリックしてXMLスキーマを検索します。インポート中に、ファイルがプロジェクトにコピーされます。

      注意:

      通常、XMLスキーマ(xsd)ファイルはSchemasと呼ばれる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がコンパイルされるため、スキーマのサイズによっては、この手順の完了に時間がかかる場合があります。この手順が完了すると、ルール・デザイナの「XMLファクトの作成」ダイアログは、「ターゲット・クラス」領域が更新され、JAXBクラスが含まれた状態で表示されます。

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

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

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

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

  1. Rules Designerで、「ファクト」ナビゲーション・タブを選択します。
  2. 「ファクト」ナビゲーション・タブで、「XMLファクト」タブを選択します。
  3. 「XMLファクト」表で、編集するXMLファクトのアイコンをダブルクリックします。図3-2に示すように、「XMLファクトの編集 -」ダイアログが表示されます。

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

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

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

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

フィールド 説明

名前

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

エイリアス

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

修飾子パターン

このフィールドは動詞ルールに使用されます。

ここで何も指定されていない場合は、グローバル修飾子が使用されます。カスタム修飾子パターンがファクトに指定されている場合、パターンに2つの部分({member}、{fact})が含まれている必要があります。次のようにパターンを指定します。

  • {fact}'s {member}

  • {member} in {fact}

  • {member} of {fact} (これがデフォルトです)。

動詞ルールの使用方法の詳細は、「動詞ルールおよびビジネス・フレーズの概要」を参照してください。

スーパー・クラス

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

XML名

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

生成元

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

参照可能

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

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

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

説明

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

「属性」領域

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

列を幅に合せる

列幅を調整するには、このチェック・ボックスを選択します。

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

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

注意:

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

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

  1. Rules Designerで、「ファクト」ナビゲーション・タブを選択します。
  2. 「ファクト」ナビゲーション・タブで、「XMLファクト」タブを選択します。
  3. 「XMLファクト」ページで、「変更されたスキーマに基づいたファクトのリロード(リンクされたファクトを除く)」または「すべてのファクトのリロード(リンクされたファクトを除く)」をクリックします。

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

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

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

XMLスキーマにrestriction定義が含まれていると、要素内での使用に有効なタイプを制限できます。restrictionの一般的な用途は、次に示す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を含む値セットが作成されます。値セットの詳細は、「値セットの使用」を参照してください。

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

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

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

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

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

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

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

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

  • 組込みディクショナリには、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ファクト・タイプを使用すると、副作用の有無に関係なくメソッドをインポートできます。副作用とは、I/O、データベース問合せ、Webサービスなどの負荷の高い操作のことです。Javaクラスをファクトとして使用するときは、副作用に関する次の点に留意してください。

  • ルールおよびデシジョン表の条件およびアクションは、副作用のあるメソッドを使用しません。

  • アクションはすべてのメソッドを使用できます。副作用は推奨されませんが、許容されます。

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

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

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

    図3-3の説明が続きます
    「図3-3 「ファクト」ナビゲーション・タブの「Javaファクト」表」の説明
  3. 「Javaファクト」タブで、「作成」をクリックし、「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-4に示すように、「Javaファクトの編集 -」ダイアログが表示されます。

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

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

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

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

フィールド 説明

クラス

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

エイリアス

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

修飾子パターン

このフィールドは動詞ルールに使用されます。

ここで何も指定されていない場合は、グローバル修飾子が使用されます。カスタム修飾子パターンがファクトに指定されている場合、パターンに2つの部分({member}、{fact})が含まれている必要があります。次のようにパターンを指定します。

  • {fact}'s {member}

  • {member} in {fact}

  • {member} of {fact} (これがデフォルトです)。

動詞ルールの使用方法の詳細は、「動詞ルールおよびビジネス・フレーズの概要」を参照してください。

スーパー・クラス

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

表示可能

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

説明

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

「属性」領域

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

プロパティ

いくつかのJavaオブジェクトには、そのオブジェクトの定義に役立つフィールドがあります。たとえば、Calendarには、週の初めの日、タイムゾーンなどを定義するためのプロパティがあります。

列を幅に合せる

列幅を調整するには、このチェック・ボックスを選択します。

属性の説明

「属性の説明」は、そのプロパティの説明です。

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アプリケーションのオブジェクト・モデルを拡張できます。

次に例を示します。

R1: if monthly spend = Customer.monthlySpend 
then assert new Temp(three month spend: monthly spend[0] + monthly spend[1] + monthly spend[2])
R2: if Temp.three month spend > 500
then modify Temp(status: GOLD)
R3: if Temp.status == GOLD
then assert new Result(discount: 0.10).

ルール・デザイナでテストおよびプロトタイプ化を行う場合、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-5に示すように、「ファクト」ナビゲーション・タブで、「RLファクト」タブを選択します。

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

    図3-5の説明が続きます
    「図3-5 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-6に示すように、「RLファクトの編集 -」ダイアログが表示されます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    図3-8の説明が続きます
    「図3-8 「ADF-BCファクト」タブ」の説明
  2. 「作成」...をクリックします。これにより、「ADF-BCファクトの作成」ダイアログが開きます。
  3. 「接続」フィールドのリストから、ADFビジネス・コンポーネント・オブジェクトで使用する接続を選択します。「クラスパスの検索」領域にはクラスパスのリストが表示されます。詳細は、「ADFビジネス・コンポーネント・ファクトのクラスパスに関する必知事項」を参照してください。
  4. 「ビュー定義」フィールドで、インポートするビュー・オブジェクトの名前を選択します。
  5. 「OK」をクリックします。これにより、「ファクト」ナビゲーション・タブが表示されます。インポートしたファクトには検証警告が含まれることに注意してください。この検証警告の削除の詳細は、「ADFビジネス・コンポーネントの循環参照に関する必知事項」を参照してください。

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

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

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

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

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つの条件式にのみ適用されるローカル値セットとして定義できます。

ローカル値セットの使用方法の詳細は、「デシジョン表への条件行の追加方法」を参照してください。

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

  • 値セットとファクト・タイプ・プロパティを関連付けることができます。これにより、ファクト・プロパティについて許容範囲内の値セットを制限できます。詳細は、「値セットをファクト・プロパティに関連付ける方法」を参照してください。

  • 値セットは、いくつかのプリミティブ値(数値、文字列、日付、ブール、または列挙)の値リストまたは値範囲を定義します。値セットは、ファクト・タイプ・プロパティの値に対して固定の選択肢のセット(たとえば、男性または女性など)を提供するために、そのプロパティと関連付けることができます。値セットは、デシジョン表の条件式の値に対して固定の選択肢のセットを提供するために、その条件と関連付ける必要があります。これらの選択肢(値または値範囲)は、デシジョン表の条件セルに入力されます。

    デシジョン表の各条件式では、値セットの値または範囲により、複数の可能性を決定できます。値セットを使用すると、条件式のそれぞれの可能性が値または範囲に分けられ、それらでは1つのセルが、値セットの値の1つの値または範囲を指定します(または、セルごとに複数の値または範囲を指定することもできます)。たとえば、色について定義した値セットでは、値または範囲に"blue"、"red"、"orange"といった文字列のリストを含むことができます。整数を含む値セットでは、1未満、1から10、10より上の3つの範囲を持つことができます。詳細は、「デシジョン表への条件行の追加方法」を参照してください。

  • グローバル、関数および関数の引数を値セットに関連付けることができます。値セットをグローバルに関連付けると、割り当てられた値が値セットで指定された値に制限されていることを、デザインタイムに検証できます。値セットを関数引数と関連付けると、その関数がその値セット内の値でのみ呼び出されることが検証されます。値セットをこのように使用すると、ルール・デザイナでは、許可されない定数の引数値が割り当てられるか、渡されたグローバル値および関数の引数について検証警告をレポートできます。関数と値セットを関連付けると、その関数がデシジョン表の条件行の式として使用されるときに、その条件行がその値セットを使用するように自動的に設定されます。検証されるのは定数式値のみです。グローバル初期式値および関数パラメータ式値が、関連付けられた値セットに対して必ず検証されるようにするには、その式に関連付けられた「定数」チェック・ボックスを選択します。値セットに関連付けられたグローバルまたは関数の引数に基づく実行時チェックは適用されません。詳細は、「値セットを関数または関数の引数に関連付ける方法」を参照してください。

  • デザインタイムの検証に加え、LOV値セットを使用して、IF/THENルールのテストおよびアクションで式の入力時にリストに表示されるオプションを提供できます。詳細は、「値セットを使用してテスト式のオプションを指定する方法」を参照してください。

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

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

値リスト値セットでは、その値セットの値または範囲のタイプおよびリストを指定できます。詳細は、「値リスト値セットに関する必知事項」を参照してください。

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

  1. ルール・デザイナで、「値セット」ナビゲーション・タブを選択します。
  2. 図3-9に示すように、「値セットの作成」アイコンの横にあるリストから「値セット」を選択します。

    図3-9 値リスト・グローバル値セットの追加

    図3-9の説明が続きます
    「図3-9 値リスト・グローバル値セットの追加」の説明
  3. 値セットの「編集」ボタンをクリックし、「値セットの編集」ダイアログを表示します。
  4. 「値セットの編集」ダイアログの「名前」列に名前を入力します。

    値セット名が、いずれのファクト・エイリアスとも同じではないことを確認します。これにより、次に類似した検証エラーが発生します。

    RUL-05006: The fact type "Rating" has the same alias as an unrelated value set.
    
  5. 「データ型」列で、リストからデータ型を選択します。
  6. 「説明」に入力します。
  7. 図3-10に示すように、「編集」ボタンをクリックし、値を追加します。

    図3-10 「値セットの編集」ダイアログ

    図3-10の説明が続きます
    「図3-10 「値セットの編集」ダイアログ」の説明
  8. 追加する値ごとに、次のように実行します。
    • 「値」フィールドに値を入力します。LOV値のStringタイプの値では、3回クリックすると文字列全体を選択できます。これにより、文字列を入力できます。ルール・デザイナによって、引用符なしで同じエイリアスが追加されます。

      値セットの「値セット」ダイアログを編集して、値セットのリスト内の値の順序を変更できます。「上に移動」または「下に移動」ボタンをクリックして、順序を変更します。

    • 「エイリアス」フィールドに別名を入力します。

      エイリアスの指定方法の詳細は、「範囲リスト・グローバル値セットの定義方法」を参照してください。

    • 値が許可された値の場合は、「アクションで許可済」フィールドのチェック・ボックスを選択します。

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

    • 「説明」フィールドに説明を入力します。

  9. 必要に応じて値セットの「作成」ボタンをクリックし、値をさらに追加します。
  10. 「値セットの編集」ウィンドウで「OK」をクリックします。

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

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

範囲リスト値セットでは、その値セットの値または範囲のタイプおよびエンドポイントを指定できます。詳細は、「範囲値セットに関する必知事項」を参照してください。

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

  1. ルール・デザイナで、「値セット」ナビゲーション・タブを選択します。
  2. 「値セットの作成」ボタンの横にあるリストから「範囲値セット」を選択します。
  3. 「データ型」フィールドをダブルクリックします。これによって「値セットの編集」ダイアログが表示されます。「名前」フィールドに値セットの名前を入力します。
  4. 「データ型」フィールドで、リストから値セットに適したデータ型を選択します。
  5. 「作成」を繰り返しクリックして、値セットに必要な数の値または範囲を追加します。

    この手順では、3つの値を追加します。デフォルト値から始めます。デフォルトを変更した後、次の値が存在するようになります。

    • 1000より大きい

    • 500以上1000以下

    • 500未満

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

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

    この例では、最初の値に1000を入力します。

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

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

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

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

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

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

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

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

  10. 値リストのリスト内を下に移動し、後続の値ごとに、、手順6以降を繰り返します。第2の値の場合、エンドポイント値500を入力します。
  11. 「値セットの編集」ダイアログで「OK」をクリックします。

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

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

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

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

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

    次の例に、列挙Statusを含む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ファクトを作成します。詳細は、「XMLファクトの使用」を参照してください。
  3. 「値セット」ナビゲーション・タブをクリックし、列挙値を選択して値セットを表示します。インポートされるStatus列挙値は、XSD指定された値を持つ値としてインポートされることに注意してください。

    値セットの「値セット」ダイアログを編集して、列挙値セットの値の順序を変更できます。「上に移動」または「下に移動」ボタンをクリックして、順序を変更します。

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

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

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

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

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

    次のコード例に、列挙OrderSizeを含むRejectPurchaseItem.javaクラスを示します。

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

    値セットの「値セット」ダイアログを編集して、列挙タイプ値セットの値の順序または範囲を変更できます。「上に移動」または「下に移動」ボタンをクリックして、順序を変更します。

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

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

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

図3-11は、値リストを使用した色を指定する値セットのルール・デザイナでの値セット定義を示しています。

図3-11 値リストを使用した値セット定義

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

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

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

表3-3 LOV値セットに対してサポートされているタイプ

説明

Javaプリミティブ型

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

String

String型が含まれます。

Time、DateTime、Date

現行ロケールのTime, DateTime, and Dateタイプが含まれます。

注意:

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

3.6.6 範囲値セットに関する必知事項

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

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

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

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

表3-4 範囲値に対してサポートされているタイプ

説明

選択したプリミティブ型

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

Time、DateTime、Date

現行ロケールのTime, DateTime, and Dateタイプが含まれます。

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

  • 論理演算子: 正または負の無限大に関する範囲を指定します。たとえば、>=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))のような無効な値を使用するアクションを作成しようとした場合に、デザインタイムの検証警告が提供されるためです。詳細は、「値セットをルールのオプション値の制約として使用する方法」を参照してください。

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

3.6.8 値に関する必知事項

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

RUL-05833: Invalid characters "2.2" in 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-12に示す例を参照してください。

    図3-12 プロパティの値セットの定義

    図3-12の説明が続きます
    「図3-12 プロパティの値セットの定義」の説明
  4. 「ファクトの編集」ページで「OK」をクリックします。

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

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

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

  1. Rules Designerで、「関数」タブを選択します。
  2. 編集する関数を選択します。これにより、選択された関数について、関数の引数および関数本体が表示されます。
  3. 「関数」表の「値セット」の下でセルを選択し、使用する値セットをリストから選択します。図3-13に示す例を参照してください。

    図3-13 関数の戻り値に対する値セットの定義

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

3.7.2.1 値セットを関数の引数に関連付ける方法

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

  1. Rules Designerで、「関数」ナビゲーション・タブを選択します。
  2. 編集する関数を選択します。これにより、選択された関数について、関数の引数および関数本体が表示されます。
  3. 「関数」表の「引数」領域で、適切な引数を選択します。
  4. 指定されている引数に対して「値セット」の下でセルを選択し、使用する値セットをリストから選択します。

3.7.3 値セットをグローバル値に関連付ける方法

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

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

  1. Rules Designerで、「グローバル」ナビゲーション・タブを選択します。
  2. 編集対象のグローバル値を選択します。
  3. 「グローバル」表の「値セット」の下で、適切なグローバル値のセルを選択し、グローバル値に関連付ける値セットをリストから選択します。図3-14に示す例を参照してください。

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

図3-14の説明が続きます
「図3-14 グローバル値に対する値セットの定義」の説明