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

前
 
次
 

4 ルールセットとルールの使用

この章では、ルールセットと呼ばれるOracle Business Rulesデータ・モデル要素について説明します。ルールセットは、1つ以上のルールおよびデシジョン表をグループ化するために使用します。ディクショナリ、ネスト・テスト、拡張ツリー・モードのルール、式ビルダーの使用方法についても説明します。

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

詳細は、第1.1.5項「ルールセットとは」を参照してください。

4.1 ルールセットとルールの使用の概要

ビジネス・ルールを使用すると、次のようにビジネスに関する重要なデシジョンおよびポリシーを定義できます。

Oracle Business Rulesでは、次の2つの方法でルールを使用できます。

この章では、IF/THENルールの使用について説明します。デシジョン表の詳細は、第5章「デシジョン表の使用」を参照してください。

4.2 ルールセットの使用

ルールセットは、ルールおよびデシジョン表の実行単位となります。また、ルールの共有単位でもあり、ルールはルールセットに属します。複数のルールセットを順番に実行できます。この処理は、ルール・フローと呼ばれます。順序はルールセット・スタックによって決まります。この順序は、スタック上でルールセットをプッシュおよびポップするルール・アクションによって操作できます。ルールセットでは、そこに含まれるルールの起動順序を指定するために、ルールの優先度が適用されます。また、ルールセットは、ルールセットが常にアクティブであること、またはルールセットが日時の範囲や開始日時または終了日時に基づいて制限されることを識別する、有効日指定も提供します。

4.2.1 ルールセットの作成方法

ルールおよびデシジョン表はすべて、ルールセット内に作成されます。ルールセットにより、ルールとデシジョン表が1つの実行単位として編成されます。

ルールセットを作成する手順は、次のとおりです。

  1. Rules Designerで、「ルールセット」ナビゲーション・タブにナビゲートします。

  2. 「ルールセットの作成」アイコンをクリックします。「ルールセットの作成」ダイアログが表示されます。

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

  4. 図4-1に示すように、「説明」フィールドに説明を入力します。

    図4-1 ルールセットの追加

    図4-1の説明が続きます
    「図4-1 ルールセットの追加」の説明

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

4.2.2 ルールセットの有効日の設定方法

有効日のサポートにより、ルールセット、ルールまたはデシジョン表の開始日と終了日を指定できます。ルールセットの場合、有効日では、ルールセット内のルールおよびデシジョン表が有効な日付の範囲を定義します。有効日の詳細は、第4.9項「日付ファクトの使用、日付関数および有効日の指定」を参照してください。

ルールセットの有効日を設定する手順は、次のとおりです。

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

  2. 図4-2に示すように、ルールセット名の横にあるナビゲーション・アイコンをクリックしてルールセット情報を開き、ルールセットの「名前」「説明」および「有効日」フィールドを表示します。

    図4-2 「有効日」フィールドが表示されているルールセット

    図4-2の説明が続きます
    「図4-2 「有効日」フィールドが表示されているルールセット」の説明

  3. 「有効日」エントリを選択します。図4-3に示すように、「有効日の設定」ダイアログが表示されます。

    図4-3 「有効日の設定」ダイアログの使用

    図4-3の説明が続きます
    「図4-3 「有効日の設定」ダイアログの使用」の説明

  4. 「有効日の設定」ダイアログを使用して、ルールセットの有効日を指定します。「日付の設定」アイコンをクリックすると、「開始」および「終了」フィールドのデータ入力に役立つカレンダが表示されます。

4.2.3 フィルタを使用してルールセット内で一致するルールを表示する方法

ルールセット内のルール数が増加するにつれて、ルール・リストのナビゲートが困難になる可能性があります。ルール・デザイナに対して、ルール・リストをフィルタして必要なルールのみを表示するように指示できます。たとえば、アクティブなルールのみ、または検証警告のあるルールのみを表示できます。

ルール作成の詳細は、第4.3項「ルールの使用」を参照してください。

フィルタを使用してルールセット内で一致するルールを表示する手順は、次のとおりです。

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

  2. ルールのフィルタ設定を表示するには、図4-4に示すように、ルールセット名の横にある「フィルタ問合せの表示」をクリックします。

    図4-4 ルールセット内のフィルタ問合せの表示

    図4-4の説明が続きます
    「図4-4 ルールセット内のフィルタ問合せの表示」の説明

  3. 図4-5に示すように、「フィルタ問合せ」フィールドで「<テストの挿入>」をクリックしてデフォルトのテストを挿入します。

    図4-5 デフォルトのフィルタ問合せテストの挿入

    図4-5については周囲のテキストで説明しています。
  4. デフォルトのテストを構成します。

    この場合、図4-6に示すように、「<オペランド>」をクリックすると、表4-1に示すルール固有のオプションから選択できます。

    表4-1 ルールのフィルタ問合せのオペランド

    オペランド 説明

    name

    ルール名と照合します。

    description

    ルールの説明と照合します。

    priority

    ルールの優先度と照合します。詳細は、第4.5.5項「ルールの優先度の設定方法」を参照してください。

    start date

    ルール開始日と照合します。詳細は、第4.9.2項「ルールの有効日の設定方法」を参照してください。

    end date

    ルール終了日と照合します。詳細は、第4.9.2項「ルールの有効日の設定方法」を参照してください。

    minutes until start date

    ルール開始日までの指定の時間(分)と照合します。詳細は、第4.9.2項「ルールの有効日の設定方法」を参照してください。

    minutes until end date

    ルール終了日までの指定の時間(分)と照合します。詳細は、第4.9.2項「ルールの有効日の設定方法」を参照してください。

    days until start date

    ルール開始日までの指定の日数と照合します。詳細は、第4.9.2項「ルールの有効日の設定方法」を参照してください。

    days until end date

    ルール終了日までの指定の日数と照合します。詳細は、第4.9.2項「ルールの有効日の設定方法」を参照してください。

    years until start date

    ルール開始日までの指定の年数と照合します。詳細は、第4.9.2項「ルールの有効日の設定方法」を参照してください。

    years until end date

    ルール終了日までの指定の年数と照合します。詳細は、第4.9.2項「ルールの有効日の設定方法」を参照してください。

    is active

    ルールがアクティブかどうかと照合します。詳細は、第4.5.3項「アクティブ・オプションの選択方法」を参照してください。

    is valid

    ルールに検証警告があるかどうかと照合します。詳細は、第4.4.2項「ルール検証」を参照してください。

    referenced fact types

    1つ以上のファクト・タイプと照合します。


    図4-6 フィルタ問合せのオペランド

    図4-6の説明が続きます
    「図4-6 フィルタ問合せのオペランド」の説明

    詳細は、第4.3.2項「ルールでのテストの定義方法」を参照してください。

  5. 演算子を選択し、比較演算子を選択します。たとえば、「name」の場合は、オペランド・リストから「startsWith」を選択できます。

  6. フィルタ・テストの右の比較オペランドを入力します。たとえば、文字列Customerを入力します。

  7. フィルタ問合せが完成した後、フィルタをルールセット内のルールに適用できます。

    1. フィルタを適用するには、「フィルタ・オン」チェック・ボックスを選択します。

      ルール・デザイナでは、図4-7に示すように、フィルタ問合せに一致するルールのみが表示されます。

      図4-7 「フィルタ・オン」オプションによるルールセットでのフィルタ問合せの有効化

      図4-7の説明が続きます
      「図4-7 「フィルタ・オン」オプションによるルールセットでのフィルタ問合せの有効化」の説明

    2. フィルタ問合せを無効化するには、「フィルタ・オン」チェック・ボックスの選択を解除します。

      ルールセット内のすべてのルールが表示されます。

    3. フィルタ問合せを削除するには、対象のフィルタ問合せを選択し、[Del]を押すか「フィルタのクリア」アイコンをクリックします。

4.2.4 リストからコンポーネント値を選択するときのオート・コンプリートの使用

ルール・デザイナを使用すると、ビジネス・ルールの次のコンポーネントの値を簡単に設定できます。

  • 条件

  • オペランド

  • アクション

これらのコンポーネントを編集するには、Rules Editorでそのコンポーネントをクリックして、ドロップダウン・リストまたはツリーから必要な値を選択します。リストの最上部にあるテキスト領域に、必要な値の名前を入力することもできます。テキストの入力を開始すると、図4-8のように、オプションのリストがフィルタされます。

図4-8 オート・コンプリート機能の使用

図4-8については周囲のテキストで説明しています。

この図では、入力したテキストで始まるオプションのみが表示されています。

4.3 ルールの使用

ファクトを処理し、Oracle Business Rulesで処理できる暫定的な結論を取得するためのビジネス・ルールを作成します。ルールセット内にルールを作成するため、ルールを使用する前にルールセットを作成する必要があります(または、デフォルトのルールセットを使用します)。ルールセット作成の詳細は、第4.2項「ルールセットの使用」を参照してください。

デザイン中のルールは容易にテストでき、アプリケーションにデプロイする必要がありません。詳細については、第8.1.5項「Oracle Business Rules関数によるデシジョン関数のテスト方法」を参照してください。

ルールの使用時には、ルール・デザイナによるルール検証が役立ちます。検証ログ・ウィンドウを表示するには、「検証」アイコンをクリックするか、または「表示」「ログ」を選択して、「ビジネス・ルール検証」タブを選択します。これにより、不正または不完全なルールに関する警告が表示されます。ルールをテストまたはデプロイする前に、すべての警告を修正する必要があります。ルール検証の詳細は、第4.4.2項「ルール検証」を参照してください。

ルールセット内のルール数が増加するにつれて、ルール・リストをフィルタして必要なルールのみを表示するようにルール・デザイナを構成できます。詳細は、第4.2.3項「フィルタを使用してルールセット内で一致するルールを表示する方法」を参照してください。

4.3.1 ルールの追加方法

ルールを作成するには、まずルールをルールセットに追加してから、テストとアクションを挿入します。アクションはパターン一致と関連しています。実行時に、ルールの「IF」領域にあるテストが一致すると、Rules Engineにより「THEN」のアクションがアクティブ化され、ルールに関連付けられているアクションの実行が準備されます。

ルール・デザイナでは、デフォルトで一致したファクトごとにルールが起動するルールを作成できます。同じファクト・タイプが2回以上一致するか、まったく一致しないという他のオプションを有効化するには、「拡張モード」を選択します。拡張モードおよび詳細設定の表示の詳細は、第4.5項「ルールおよびデシジョン表での詳細設定の使用」を参照してください。

ルールセットにルールを追加する手順は、次のとおりです。

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

  2. 「表示」フィールドで「IF/THENルール」を選択します。

  3. 「追加」をクリックしてルールを追加します。たとえば、図4-9に示すように、「追加」をクリックしてRule_1というルールを追加します。

    図4-9 ルールセットへのルールの追加

    図4-9の説明が続きます
    「図4-9 ルールセットへのルールの追加」の説明

4.3.2 ルールでのテストの定義方法

ルール内でテストを作成するには、ファクトに対する条件を追加します。たとえば、年間消費額プロパティを持つCustomerOrderサンプル・ファクトを使用し、顧客に関連付けられている年間消費額に基づいて、顧客の注文が高額消費に関連付けられているかどうかを判別するテストを追加できます。バケット・セットを使用して、ルール内のテストおよびアクションの値を制限できます。詳細は、第4.11項「ルールにおけるオプション値の制約としてのバケット・セットの使用」を参照してください。

図4-10に、このサンプル・ルールを示します。

図4-10 ルールへのテストの追加

図4-10の説明が続きます
「図4-10 ルールへのテストの追加」の説明

実行時には、このルールが処理される際に、Rules Engineにより、一致するファクトを検索するように定義したルール・パターン・テストを基準にしてファクトがチェックされます。このサンプル・ルールRule_1の場合、ファクトが一致すると、Rules Engineによりファクトが変更されて、値プロパティが「High」に変更されます。

ルール内でテストを定義する手順は、次のとおりです。

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

  2. 「表示」フィールドで「IF/THENルール」(Rules Designerのデフォルト)を選択します。

  3. 使用するルールを追加または選択します。たとえば、Rule_1を選択します。

  4. 「Rule_1」「IF」領域で、「<テストの挿入>」を選択します。

  5. テストの場合、図4-11に示すように、ルールの「IF」領域には左<オペランド>と右<オペランド>が含まれています。

    図4-11 左オペランドと右オペランドを使用するルール・テスト

    図4-11の説明が続きます
    「図4-11 左オペランドと右オペランドを使用するルール・テスト」の説明

  6. テストでは、左オペランドを値で置き換えます。

    そのためには、左の「<オペランド>」を選択します。図4-12に示すように、テキスト入力領域とリストが表示されます。

    図4-12 ルール内のテストの左オペランドの構成

    図4-12の説明が続きます
    「図4-12 ルール内のテストの左オペランドの構成」の説明

    1. 値を入力するには、リストを使用して、値オプションから項目を選択します。

      オプションを表示するには、「一覧で表示」を選択して単一リストを使用する方法と、「ツリー表示」を選択し、ナビゲータを使用する方法があります。

    2. リテラル値を入力するには、値をテキスト入力領域に入力して[Enter]を押します。

      対応するオペランドのタイプと一致する値を入力する必要があります。たとえば、テストIF CustomerOrder.annualSpending > <operand>の場合、<operand>に有効な値は、CustomerOrderフィールドのannualSpendingのタイプと一致する必要があります。

  7. テストでは、表示される演算子を必要な論理演算子で置き換えるか、またはデフォルト(==)を受け入れます。そのためには、デフォルトの==演算子を選択します。フィールドとリストが表示されます。左オペランドのデータ型に応じて、リストには追加の演算子が含まれる場合もあります。たとえば、文字列をテストする場合、左側でStringオペランドを選択すると、図4-13に示すように、追加のString演算子(startsWithおよびequalsIgnoreCaseなど)が使用できるようになります。

    図4-13 ルール内のString演算子の構成

    図4-13の説明が続きます
    「図4-13 ルール内のString演算子の構成」の説明

    同様に、左オペランドと右オペランドの間の論理条件をテストするには、図4-14に示すように、論理演算子==(等号)、!=(等しくない)、>(より大きい)、>=(以上)、<(より小さい)、<=(以下)から1つ選択します。演算子の詳細は、付録B「Oracle Business Rulesの組込みクラスと関数」を参照してください。

    図4-14 ルール内のテストの演算子の構成

    図4-14の説明が続きます
    「図4-14 ルール内のテストの演算子の構成」の説明

  8. テストでは、右オペランドを値で置き換えます。

    <オペランド>プレースホルダを、オペランドに使用できるように構成します。

    たとえば、図4-15に示すように、テキスト入力領域に2000と入力し、[Enter]または[Return]を押します。

    図4-15 ルール内のテストの右オペランドの構成

    図4-15の説明が続きます
    「図4-15 ルール内のテストの右オペランドの構成」の説明

4.3.3 Oracle Business Rulesテスト変数に関する必知事項

Oracle Business Rulesテスト変数を使用すると、ルールおよびデシジョン表の条件やアクションで発生する冗長な式を短縮できます。変数およびその値は、インラインのビジネス条件定義と表現されることがあります。テスト変数は、インライン・エイリアスとも呼ばれます。

テスト変数を挿入するオプションは、ルール条件セクションの<insert test>の横にリストとして表示されます。ルール条件の定義の一部として、複雑な式、数学式または関数に対するコールアウトを表す変数を定義できます。

たとえば、SongというXMLファクトがあり、composerという属性にsizeという関数があるとします。この属性を参照するときには、Song.composer.size()を毎回使用するのではなく、次のように単純な変数を定義できます。

lo = Song.composer.size()

これ以降、テストでは、式の一部にloを使用できます。簡単なものから複雑な式まで、あらゆる式にすることが可能です。たとえば、関数の本体で、<insert action>をクリックすると、使用可能なオプションの一部として式を表示できます。

図4-16は、テスト変数を表示しています。

図4-16 ルールのテスト変数

図4-16の説明が続きます
「図4-16 ルールのテスト変数」の説明

インライン・エイリアスを定義したら、それ以降のテスト条件では、オペランドのリスト内でインライン・エイリアスを使用できます。インライン・エイリアスの範囲は、そのインライン・エイリアスが定義された特定のルールにおけるそれ以降のテストに制限されます。ネスト・テストの場合でもインライン・エイリアスを使用できます。ネスト・テストは、そのエイリアスを定義したベース・テストの一部だからです。このことは、ネスト・テスト内で定義するすべてのテストにあてはまります。インライン・エイリアスの範囲は、ベース・テストとそのネスト・テストの条件に対して制限されるだけでなく、そのルールのアクションに対しても制限されます。インライン・エイリアスがネスト・テストの条件の一部として定義され、メインのテスト条件の一部としては定義されていない場合でも、このエイリアスは、メインのネスト・テスト内部または外部のそれ以降のすべてのテスト条件に対して使用できます。

ただし、ネストされていないテスト内部でインライン・エイリアスを定義した場合は、このインライン・エイリアスの範囲は、ネストされていないテスト内部のそれ以降のテストのみに制限され、ネストされていないテストの外部のどのテストにも制限されません。

インライン・エイリアスは、If-Thenルールとデシジョン表のどちらでも使用できます。デシジョン表では、拡張モードで、パターンを表示または非表示にしたり、<insert pattern>をクリックしてパターンを入力できます。パターンを挿入したら、テストを挿入できます。標準モードでは、テストを表示または非表示にしたり、<insert test>をクリックしてテストを入力できます。

4.3.4 ルールでの範囲テストの定義方法

ルール内で範囲テストを作成するには、ファクトに対する条件を追加します。たとえば、年間消費額プロパティを持つCustomerOrderサンプル・ファクトを使用し、顧客の注文額が上位の範囲と下位の範囲のどちらに該当するかを判別するテストを追加できます。

次にこのサンプル・ルールの概要を示します。

IF  
     CustomerOrder.annualSpending between 100 and 2000
THEN
     Modify CustomerOrder.value = "Normal"

実行時には、このルールが処理される際に、Rules Engineにより、一致するファクトを検索するように定義したルール・パターン・テストを基準にしてファクトがチェックされます。

ルール内で範囲テストを定義する手順は、次のとおりです。

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

  2. 「表示」フィールドで「IF/THENルール」(Rules Designerのデフォルト)を選択します。

  3. 使用するルールを追加または選択します。たとえば、Rule_1を選択します。

  4. 「Rule_1」「IF」領域で、「<テストの挿入>」を選択します。

  5. 図4-17に示すように、ルールの「IF」領域のテストには左<オペランド>と右<オペランド>が含まれています。

    図4-17 左オペランドと右オペランドを使用するルール・テスト

    図4-17の説明が続きます
    「図4-17 左オペランドと右オペランドを使用するルール・テスト」の説明

  6. 範囲テストでは、左オペランドを値で置き換えます。

    そのためには、左の「<オペランド>」を選択します。図4-18に示すように、テキスト入力領域とリストが表示されます。

    図4-18 ルールへのテストの左オペランドの追加

    図4-18の説明が続きます
    「図4-18 ルールへのテストの左オペランドの追加」の説明

    1. 値を入力するには、リストを使用して、値オプションから項目を選択します。

      オプションを表示するには、「一覧で表示」を選択して単一リストを使用する方法と、「ツリー表示」を選択し、ナビゲータを使用する方法があります。

    2. リテラル値を入力するには、値をテキスト入力領域に入力して[Enter]を押します。対応するオペランドのタイプと一致する値を入力する必要があります。

      たとえば、テストIF CustomerOrder.annualSpending > <operand>の場合、<operand>に有効な値は、CustomerOrderフィールドのannualSpendingのタイプと一致する必要があります。

  7. 範囲テストでは、between演算子を選択します。そのためには、デフォルトの==演算子を選択します。テキスト入力領域とリストが表示されます。図4-19に示すように、「between」を選択します。

    図4-19 ルール内の範囲テストの演算子の構成

    図4-19の説明が続きます
    「図4-19 ルール内の範囲テストの演算子の構成」の説明

    これにより、図4-20に示すように、さらに2つの<オペランド>プレースホルダが追加されます。

    図4-20 範囲テストのbetween演算子

    図4-20の説明が続きます
    「図4-20 範囲テストのbetween演算子」の説明

  8. 図4-21に示すように、<オペランド>プレースホルダをオペランドに使用できるように構成します。

    図4-21 ルール内の範囲テストのオペランドの構成

    図4-21の説明が続きます
    「図4-21 ルール内の範囲テストのオペランドの構成」の説明

    このテストがtrueになるのは、左端のオペランド(CustomerOrder.annualSpending)が値100および2000の間にある場合です。

4.3.5 ルールでのセット・テストの定義方法

ルール内でセット・テストを作成するには、ファクトに対する条件を追加します。たとえば、ライン品目プロパティを持つCustomerOrderサンプル・ファクトを使用し、ライン品目が任意の製品セットに属しているかどうかを判別するテストを追加できます。

次にこのサンプル・ルールの概要を示します。

IF  
     CustomerOrder.lineItem.sku in 12345, 43255, 76348
THEN
     Modify CustomerOrder.value = "High"

実行時には、このルールが処理される際に、Rules Engineにより、一致するファクトを検索するように定義したルール・パターン・テストを基準にしてファクトがチェックされます。

ルール内でセット・テストを定義する手順は、次のとおりです。

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

  2. 「表示」フィールドで「IF/THENルール」(Rules Designerのデフォルト)を選択します。

  3. 使用するルールを追加または選択します。たとえば、Rule_1を選択します。

  4. 「Rule_1」「IF」領域で、「<テストの挿入>」を選択します。

  5. 図4-11に示すように、ルールの「IF」領域のテストには左<オペランド>と右<オペランド>が含まれています。

    図4-22 左オペランドと右オペランドを使用するルール・テスト

    図4-22の説明が続きます
    「図4-22 左オペランドと右オペランドを使用するルール・テスト」の説明

  6. セット・テストでは、左オペランドを値で置き換えます。

    そのためには、左の「<オペランド>」を選択します。図4-23に示すように、テキスト入力領域とリストが表示されます。

    図4-23 ルールへのテストの左オペランドの追加

    図4-23の説明が続きます
    「図4-23 ルールへのテストの左オペランドの追加」の説明

    1. 値を入力するには、リストを使用して、値オプションから項目を選択します。

      オプションを表示するには、「一覧で表示」を選択して単一リストを使用する方法と、「ツリー表示」を選択し、ナビゲータを使用する方法があります。

    2. リテラル値を入力するには、値をテキスト入力領域に入力して[Enter]を押します。

  7. セット・テストでは、in演算子を使用します。そのためには、デフォルトの==演算子を選択します。テキスト入力領域とリストが表示されます。図4-24に示すように、「in」を選択します。

    図4-24 ルール内のセット・テストの演算子の構成

    図4-24の説明が続きます
    「図4-24 ルール内のセット・テストの演算子の構成」の説明

    これにより、図4-25に示すように、さらに2つの<オペランド>プレースホルダがカンマ区切りリスト形式で追加され、<挿入>プレースホルダも追加されます。

    図4-25 セット・テストのin演算子

    図4-25の説明が続きます
    「図4-25 セット・テストのin演算子」の説明

    リストに別のオペランドを追加するには、「<挿入>」をクリックします。

    リストからオペランドを削除するには、オペランドを右クリックして「テスト式の削除」を選択します。

  8. 図4-26に示すように、<オペランド>プレースホルダをオペランドに使用できるように構成します。

    図4-26 ルール内のセット・テストのオペランドの構成

    図4-26の説明が続きます
    「図4-26 ルール内のセット・テストのオペランドの構成」の説明

    このテストがtrueになるのは、左端のオペランド(CustomerOrder.lineItem.sku)の値が12345、43255または76348の場合です。

4.3.6 ルールでのアクションの定義方法

ルールを作成するには、テストおよびアクションを挿入します。アクションはパターン一致と関連しています。ルールの「IF」領域にあるテストが一致すると、Rules Engineにより「THEN」のアクションがアクティブ化され、ルールに関連付けられているアクションの実行が準備されます。

アクションを追加する場合は、表4-2に示すいずれかのフォームのアクションを使用します。表4-2に示す各フォームでは、ルール・デザイナが表示するオプションは状況依存なので、使用するリストおよび項目の数は、追加するアクション、およびアクションの入力中の選択内容に応じて異なる可能性があります。表4-2には基本のアクションが示されています。拡張モードでは追加のアクションを使用できます。拡張モードの詳細は、第4.5項「ルールおよびデシジョン表での詳細設定の使用」を参照してください。

表4-2 ルール・アクションのオプション

アクション・フォーム 説明

Assert New

新規ファクトのアサート

Modify

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

Retract

ファクトの取消し

Call

関数のコール

If, else, elseif, for, while

条件アクション


ルール内でアクションを定義する手順は、次のとおりです。

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

  2. ルールの「THEN」領域で、「<アクションの挿入>」を選択します。図4-27に示すように、「アクションの追加」リストが表示されます。

    図4-27 ルールへのModifyアクションの追加

    図4-27の説明が続きます
    「図4-27 ルールへのModifyアクションの追加」の説明

  3. 「アクションの追加」リストで、追加するアクションのタイプを選択します。たとえば、「modify」を選択します。テキスト領域にアクション名を入力することもできます。テキストの入力を開始すると、使用可能な選択肢のリストが自動的にフィルタされます。この機能は、使用可能なオプションの数が多い場合に便利です。

    ここに示すように、assertcallmodifyの範囲の必要なアクションを、ifelseelseifwhileforif (advanced)while (advanced)のような条件アクションにも追加できます。

  4. 「THEN」領域で、「<ターゲット>」を選択してオプション・リストを表示します。図4-28に示すように、「customerOrder」を選択します。

    図4-28 ルールへのModifyアクションの追加とターゲットの選択

    図4-28の説明が続きます
    「図4-28 ルールへのModifyアクションの追加とターゲットの選択」の説明

  5. <プロパティの追加>」を選択します。「プロパティ」ダイアログが表示されます。

  6. 図4-29に示すように、「プロパティ」ダイアログで、「値」列に"High"と(二重引用符を含めて)入力し、[Enter]を押します。

    図4-29 ルールへのModifyアクションのプロパティと値の追加

    図4-29の説明が続きます
    「図4-29 ルールへのModifyアクションのプロパティと値の追加」の説明

  7. 「プロパティ」ダイアログで、「閉じる」をクリックします。図4-30に示すように、ルールが表示されます。

    図4-30 テストとアクションが追加されたルール

    図4-30の説明が続きます
    「図4-30 テストとアクションが追加されたルール」の説明

4.3.7 ルール・アクションに関する必知事項

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

4.3.8 Oracle Business Rulesのパフォーマンス・チューニングに関する必知事項

ほとんどの場合、ルールを記述する際にパフォーマンスに注意を払う必要はありません。ただし、ルールのパフォーマンスを向上および最大化するのに役立つヒントがありますので、必要に応じて利用してください。

Oracle Business Rulesのパフォーマンス・チューニングの詳細は、『Oracle Fusion Middlewareパフォーマンスおよびチューニング・ガイド』の「Oracle Business Rulesパフォーマンス・チューニング」を参照してください。

4.4 ディクショナリの検証

ディクショナリを変更すると、ルール・デザイナではディクショナリ検証が実行されます。ルールまたはデシジョン表の使用時には、ルール・デザイナによる検証が役立ちます。検証ログ・ウィンドウを表示するには、「検証」アイコンをクリックするか、または「表示」→「ログ」を選択して、「ビジネス・ルール検証」タブを選択します。これにより、不正または不完全なルールに関する警告が表示されます。ルールをテストまたはデプロイする前に、すべての警告を修正する必要があります。

ディクショナリが無効な場合、ルール・デザイナでは警告メッセージのリストが生成されて関連ディクショナリ・オブジェクトがリスト表示されます。検証メッセージ情報は、ディクショナリ・オブジェクトの検索と問題の解決に使用できます。また、検証警告のあるオブジェクトには、図4-31に示すように検証インディケータ(赤い波線による下線)のフラグが付きます。

図4-31 ログと画面に波線による下線で表示された検証警告

図4-31の説明が続きます
「図4-31 ログと画面に波線による下線で表示された検証警告」の説明

ディクショナリが無効な場合は、そのディクショナリを保存できます。ただし、RL Languageを生成できるのは、有効でルール・デザイナの検証ログに警告が表示されないディクショナリの場合のみです。

検証ログでは、各検証メッセージに次の情報が含まれています。

検証ログの表示中に、項目を選択し、右クリックしてリストから「エディタでオブジェクトを選択して強調表示」を選択すると、カーソルが移動し、ディクショナリ・オブジェクトが選択されます。一部の検証警告の場合、この機能を使用できないことに注意してください。

4.4.1 データ・モデル検証

ディクショナリを変更すると、ルール・デザイナではディクショナリ検証が実行されます。ルール・デザイナにより警告メッセージが表示された場合、検証ログには、検証警告の原因となったディクショナリ・オブジェクトの検索に役立つメッセージが含まれています。たとえば、次の文字列は、警告がRLFact_1というデータ・モデル・オブジェクトから発生していることを示しています。また、問題はtest_intというプロパティにあります。

CarRental/Data Model/RLFact_1/test_int/Expression

表4-3に、検証メッセージで指定されたディクショナリ・オブジェクト名の各部を示します。

表4-3 検証ログ内のデータ・モデルのディクショナリ・プロパティ

名前 説明

CarRental

ディクショナリ名

Data Model

ディクショナリ内のデータ・モデル・コンポーネント

RLFact_1

データ・モデル内の要素名

test_int

指定された要素内のプロパティ名

Expression

プロパティの式部分


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

4.4.2 ルール検証

「検証」アイコンをクリックすると、Rules Designerにより検証ログが表示されます。ルールを初めて追加すると、図4-32のような検証警告が表示されます。

図4-32 ルール検証メッセージ

図4-32の説明が続きます
「図4-32 ルール検証メッセージ」の説明

ルールに関する検証メッセージのディクショナリ・オブジェクト名部分には、検証警告に関連するルールセット、ルールおよびルール内の領域を識別できるように詳細が含まれています。たとえば、次のディクショナリ・オブジェクト指定は問題を示しています。

OracleRules1/Ruleset_2/Rules_1/Pattern[1]

検証メッセージでは、ルールのディクショナリ・オブジェクト名に1から始まる索引が使用されます。したがって、最初のパターンはPattern[1]です。

ルールを検証するのみでなく、デザイン時にルール・デザイナでテストすることもできます。詳細については、第8.1.5項「Oracle Business Rules関数によるデシジョン関数のテスト方法」を参照してください。

4.4.3 デシジョン表の検証

「検証」アイコンをクリックすると、Rules Designerにより検証ログが表示されます。デシジョン表を初めて追加すると、図4-33のような検証警告が表示されます。

図4-33 デシジョン表の検証メッセージ

図4-33の説明が続きます
「図4-33 デシジョン表の検証メッセージ」の説明

デシジョン表に関する検証メッセージのディクショナリ・オブジェクト名部分には、デシジョン表のうち検証警告に関連する領域を識別できるように詳細が含まれています。たとえば、次のディクショナリ・オブジェクト指定は、デシジョン表の最初のアクション行と最初のアクション・セルに問題があることを示します。

OR1/Ruleset_1/DecisionTable_1/Action[1]/Action Cell[1]

検証メッセージでは、デシジョン表オブジェクトのディクショナリ・オブジェクト名に1から始まる索引が使用されます。たとえば、「条件」領域の第1行の第1条件セルを示すメッセージは次のようになります。

OracleRules1/Ruleset_1/DecisionTable_2/Condition[1]/Condition Cell[1]

この指定は、図4-34に示すように、デシジョン表の「条件」領域のうち、第1行にあるラベルR1が付いたルールの条件セルを示しています。

図4-34 条件セルに警告のあるデシジョン表

図4-34の説明が続きます
「図4-34 条件セルに警告のあるデシジョン表」の説明

4.4.4 ディクショナリの検証方法

ディクショナリを変更すると、ルール・デザイナではディクショナリ検証が実行されます。

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

  1. Rules Designerで、「検証」アイコン(チェックマーク)をクリックします。

  2. メッセージ領域から「ビジネス・ルール検証」ログを選択します。

  3. 検証ログの表示中に、項目を選択し、右クリックしてリストから「エディタでオブジェクトを選択して強調表示」を選択すると、カーソルが移動し、ディクショナリ・オブジェクトが選択されます。一部の検証警告の場合、この機能を使用できないことに注意してください。

4.5 ルールおよびデシジョン表での詳細設定の使用

ルールおよびデシジョン表の詳細設定では、詳細オプションを提供する機能を使用できます。これらのオプションは、すべてのOracle Business Rulesユーザーに必要なものではありません。次の機能が含まれます。

4.5.1 ルールまたはデシジョン表の詳細設定の表示と非表示を切り替える方法

Rules Designerでは、各ルール名およびデシジョン表名の横に「詳細設定の表示」または「詳細設定の非表示」アイコンがあり、詳細設定の表示と非表示を切り替えることができます。

ルールまたはデシジョン表の詳細設定の表示と非表示を切り替える手順は、次のとおりです。

  1. 詳細設定を表示するルールセット選択します。

  2. 「表示」フィールドのリストから、「IF/THENルール」を選択するか、またはデシジョン表を選択します。

    1. 詳細設定を表示するには、図4-35に示すように、ルール名の横にある「詳細設定の表示」をクリックします(ルール名Rule_1の横に、選択されているアイコンがあります)。

      図4-35 ルールの詳細設定の表示

      図4-35の説明が続きます
      「図4-35 ルールの詳細設定の表示」の説明

    2. 詳細設定を非表示にするには、図4-36に示すように、ルール名の横にある「詳細設定の非表示」をクリックします(ルール名Rule_1の横に、選択されているアイコンがあります)。

      図4-36 ルールの詳細設定の非表示

      図4-36の説明が続きます
      「図4-36 ルールの詳細設定の非表示」の説明

4.5.2 拡張モード・オプションの選択方法

その他のパターン一致オプションおよびその他のアクションを提供するルールまたはデシジョン表機能を使用するには、「拡張モード」を選択します。詳細は、第4.7項「拡張モードのルールの使用」を参照してください。

拡張モード・オプションを選択する手順は、次のとおりです。

  1. 拡張モードを設定するルールまたはデシジョン表を選択します。

  2. ルール名またはデシジョン表名の横にある「詳細設定の表示」アイコンをクリックします(第4.5.1項「ルールまたはデシジョン表の詳細設定の表示と非表示を切り替える方法」を参照)。

  3. 図4-37に示すように、「拡張モード」を選択します。

    図4-37 拡張モード・オプションの設定

    図4-37の説明が続きます
    「図4-37 拡張モード・オプションの設定」の説明

4.5.3 アクティブ・オプションの選択方法

Oracle Business Rulesには、ルールまたはデシジョン表がアクティブであるか非アクティブであるかを指定する機能が組み込まれています。アクティブ・オプションは有効日に関係なく設定され、前に指定した有効日を変更または削除せずに設定できます。「アクティブなルール」が選択されていない場合、ルールはRules Designerによって検証されません。

アクティブ・オプションを選択する手順は、次のとおりです。

  1. 「アクティブなルール」オプションを設定するルールまたはデシジョン表を選択します。

  2. ルール名またはデシジョン表名の横にある「詳細設定の表示」アイコンをクリックします(第4.5.1項「ルールまたはデシジョン表の詳細設定の表示と非表示を切り替える方法」を参照)。

  3. 「アクティブなルール」を選択します。

4.5.4 論理オプションの選択方法

「論理」オプションが選択されているルールセットまたはデシジョン表では、生成されるRL Language内のルールで論理プロパティを使用するように指定されています。論理プロパティを使用すると、ルールを起動するファクトとルールによりアサートされるファクト間の論理的な依存関係を有効化または無効化できます。

論理プロパティが有効化されているルールでは、ルール内のアクション・ブロックによってアサートされた全ファクトが、ルール条件内で一致したファクトに依存します。ルールの条件が適用されなくなるなど、ルール条件で参照されていたファクトに変更があると、ルール条件によってアサートされたファクトは自動的に取り消されます。論理プロパティの詳細は、『Oracle Fusion Middleware Oracle Business Rulesランゲージ・リファレンス・ガイド』を参照してください。

ルールセットとデシジョン表の「論理」オプションを使用すると、ルールセットまたはデシジョン表内のルールに関連して生成されたRL Languageに対する論理プロパティを有効化または無効化できます。デフォルトでは、「論理」オプションは選択されません。

論理オプションを選択する手順は、次のとおりです。

  1. 「論理」オプションを設定するルールまたはデシジョン表を選択します。

  2. ルール名またはデシジョン表名の横にある「詳細設定の表示」アイコンをクリックします(第4.5.1項「ルールまたはデシジョン表の詳細設定の表示と非表示を切り替える方法」を参照)。

  3. 「論理」を選択します。

4.5.5 ルールの優先度の設定方法

ルールまたはデシジョン表の優先度を設定できます。表4-4に示すように事前定義済の名前が付いた優先度のリストから選択する方法と、正または負の整数を入力して独自の優先度レベルを指定する方法があります。ルールセット内では、優先度の高いルールが実行されてから、優先度の低いルールが実行されます。デフォルトの優先度はmedium(整数値0)です。

表4-4 優先度文字列と値のマッピング

名前付き優先度 整数値

最高

3000

より高い

2000

1000

中(デフォルトの優先度)

0

-1000

より低い

-2000

最低

-3000


ルールの優先度を設定する手順は、次のとおりです。

  1. 優先度を設定するルールまたはデシジョン表を選択します。

  2. ルール名またはデシジョン表名の横にある「詳細設定の表示」アイコンをクリックします(第4.5.1項「ルールまたはデシジョン表の詳細設定の表示と非表示を切り替える方法」を参照)。

  3. 「優先度」フィールドで、優先度値を指定します。

    1. 名前付きの優先度を指定するには、図4-38に示すように、「優先度」ドロップダウン・リストから選択します。

      図4-38 事前定義済の名前付き優先度の選択

      図4-38の説明が続きます
      「図4-38 事前定義済の名前付き優先度の選択」の説明

    2. 整数による優先度を指定するには、図4-39に示すように、「優先度」フィールドをクリックして正または負の整数値を入力し、[Enter]を押します。

      図4-39 ユーザー定義の数値優先度の選択

      図4-39の説明が続きます
      「図4-39 ユーザー定義の数値優先度の選択」の説明

4.5.6 有効日の指定方法

ルールセット、ルールまたはデシジョン表の有効日を指定できます。

有効日を指定する手順は、次のとおりです。

  1. 有効日を設定するルールまたはデシジョン表を選択します。

  2. ルール名またはデシジョン表名の横にある「詳細設定の表示」アイコンをクリックします(第4.5.1項「ルールまたはデシジョン表の詳細設定の表示と非表示を切り替える方法」を参照)。

  3. 「有効日」フィールドを選択します。「有効日の設定」ダイアログが表示されます。

  4. 「有効日の設定」ダイアログを使用して有効日を設定します。

有効日の使用の詳細は、第4.9項「日付ファクトの使用、日付関数および有効日の指定」および第4.2.2項「ルールセットの有効日の設定方法」を参照してください。

4.6 ネスト・テストの使用

ルールまたはデシジョン表では、ネスト・テスト機能を使用して、さらに複雑なテストを作成できます。

4.6.1 ネスト・テストの使用方法

ネスト・テストを使用する手順は、次のとおりです。

  1. ネスト・テストを使用するルールを選択します。

  2. 「IF」領域でテストを選択します。これにより、テストはハイライトされたボックスで囲まれます。

  3. 図4-40に示すように、テストを選択した状態で、右クリックしてリストを表示します。

    図4-40 ルールへのネスト・テストの追加

    図4-40の説明が続きます
    「図4-40 ルールへのネスト・テストの追加」の説明

  4. ネスト・テストを追加するには、リストで「前に挿入」または「後ろに挿入」を選択して、次に「ネスト・テスト」を選択します。図4-41に、ネスト・テストを示します。

    図4-41 ルールに追加されたネスト・テスト

    図4-41の説明が続きます
    「図4-41 ルールに追加されたネスト・テスト」の説明

4.7 拡張モードのルールの使用

Oracle Business Rulesでは、次のOracle Business Rules機能のサポートを追加する詳細なルールを作成できる機能が提供されます。

詳細は、第4.7.5項「拡張モードのルールに関する必知事項」を参照してください。

4.7.1 拡張モードのパターン一致オプションの使用方法

拡張モードのパターン一致オプションでは、ルールの起動時期を指定します。表4-5に、使用可能なオプションを示します。

表4-5 拡張モードのパターン一致オプション

オプション 説明

次の各ケース

これは、デフォルトのパターン一致オプションです。一致が存在するたびに(一致するすべてのケースで)ルールを起動する必要があります。

次のケースがある

このオプションでは、一致が1つ以上存在する場合にルールの起動が1つ選択されます。

次のケースがない

この値では、一致がない場合にルールを1回起動するように指定します。

集計

このオプションでは、すべての一致に集計関数を適用するように指定します。詳細は、第4.7.4項「拡張モードの集計条件の使用方法」を参照してください。


拡張モードのパターン一致オプションを使用する手順は、次のとおりです。

  1. パターン一致オプションを使用するルールまたはデシジョン表を選択します。

  2. ルール名またはデシジョン表名の横にある「詳細設定の表示」アイコンをクリックします(第4.5.1項「ルールまたはデシジョン表の詳細設定の表示と非表示を切り替える方法」を参照)。

  3. 「拡張モード」を選択します。

  4. 図4-42に示すように、テスト・パターンを右クリックして「囲む」を選択します。

    図4-42 「囲む」オプション

    図4-42の説明が続きます
    「図4-42 「囲む」オプション」の説明

    図4-43に示すように、「囲む」ダイアログが表示されます。

    図4-43 「囲む」ダイアログ

    図4-43の説明が続きます
    「図4-43 「囲む」ダイアログ」の説明

  5. 「囲む」ダイアログからパターン・ブロック・オプションを選択し、「OK」をクリックします。

    図4-44に示すように、パターンはデフォルトの「(次の各ケース)」を使用してネスト・パターンで囲まれます。

    図4-44 デフォルトのパターン一致オプション: 「次の各ケース」

    図4-44の説明が続きます
    「図4-44 デフォルトのパターン一致オプション: 「次の各ケース」」の説明

  6. 図4-45に示すように、デフォルトの「(次の各ケース)」オプションを選択し、リストから必要なパターン一致オプションを選択します。

    図4-45 詳細パターン一致オプションの追加

    図4-45の説明が続きます
    「図4-45 詳細パターン一致オプションの追加」の説明

4.7.2 拡張モードの一致したファクト名の使用方法

ルールまたはデシジョン表内で一致したファクト名のフィールド(パターンのバインド変数)を使用すると、1つのルールで同じタイプの複数インスタンスをテストできます。一致したファクト名を使用すると、一致したファクトについて一時的な名前を入力してテストで使用できます。たとえば、図4-46に示すルールでは、一致する帽子品目が注文に1つ以上含まれている場合に靴品目に割引が適用されるルールでの、パターンのバインド変数の使用を示しています。

図4-46 パターンのバインド変数を使用するルール

図4-46の説明が続きます
「図4-46 パターンのバインド変数を使用するルール」の説明

たとえば、図4-47に示すように、顧客の注文で重複している品目を検索するためのルールを作成できます。この例は、ルールでの一致の使用を示しています。

図4-47 注文で重複している品目を検索するルール

図4-47の説明が続きます
「図4-47 注文で重複している品目を検索するルール」の説明

拡張モードの一致したファクト名を使用する手順は、次のとおりです。

  1. 一致したファクト名を追加するルールまたはデシジョン表を選択します。

  2. ルール名の横にある「詳細設定の表示」アイコンをクリックします(第4.5.1項「ルールまたはデシジョン表の詳細設定の表示と非表示を切り替える方法」を参照)。

  3. 「拡張モード」を選択します。

  4. 「<ファクト・タイプ>」を選択し、リストからファクト・タイプを入力します。

  5. 図4-48に示すように、表示される一致したファクト名を選択し、必要に応じて変更します。たとえば、一致したファクト名Order$LineItem1を入力して[Enter]を押します。

    図4-48 一致したファクトの変数名の追加

    図4-48の説明が続きます
    「図4-48 一致したファクトの変数名の追加」の説明

  6. 図4-49に示すように、ルールを作成します。一致したファクト名をオペランドとして選択できることに注意してください。オペランド「LineItem1」および「LineItem2」を必要に応じて選択し、ルールを作成します。

    図4-49 一致したファクト変数名のオペランドとしての選択

    図4-49の説明が続きます
    「図4-49 一致したファクト変数名のオペランドとしての選択」の説明

図4-49では、テストによって次の行がチェックされます。

RL.get fact ID(Order$LineItem1) > RL.get fact ID(Order$LineItem2)

Order$LineItemという単一のインスタンスが、Order$LineItemファクト・タイプと一致するどのパターンとも一致しないようにします。異なるインスタンスの異なる組合せに対してルールが実行されないように、「>」が必要になります。詳細は、付録C「自己結合を正しく表現するにはどうすればよいですか。」を参照してください。

4.7.3 拡張モードのアクション・フォームの使用方法

拡張モードでルールを作成する場合、ルール・デザイナでは表4-6に示す使用可能なアクションのリストが表示されます。表4-6に示す各フォームについて、ルール・デザイナで表示されるオプションは状況依存です。このため、アクション・タイプを使用するときに表示されるリストおよび項目の数は状況依存であり、追加するアクション、およびアクションの入力中の選択内容に応じて異なります。

表4-6 拡張モードのアクション・オプション

アクション・フォーム 説明

Assert

ファクトのアサート

Assert Tree

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

Assert New

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

Assign

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

Assign New

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

Expression

式を実行します。

Call

関数をコールします。

For

Javaに類似したOracle RLにはforループがあります。forループには、変数とコレクションを持つ型が含まれています。型と変数により、ループ内で使用されるコレクション値を保持するループ変数が定義されます。コレクションは、ループ変数に適切な型のコレクションとして評価される式です。forループを使用すると、任意のコレクションを繰り返すことができます。

return、throwまたはhaltによってアクション・ブロックを終了できます。

If

if elseアクションを使用する場合、テストがtrueのときは、最初にアクション・ブロックを実行します。テストがfalseのときは、オプションのelse部分を実行します。これは別のifアクションやアクション・ブロックである場合もあります。Javaと異なり、Oracle RLにはアクション・ブロックが必要であり、単一のセミコロンの終了アクションは許可されていません。

Modify

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

Retract

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

Return

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

rl

入力したOracle RL式を使用します。

synchronized

Javaと同様に、synchronizedアクションは複数のスレッドのアクションを同期化する際に役立ちます。synchronizedアクション・ブロックを使用すると、指定したオブジェクトのロックを取得してからアクション・ブロックを実行し、次にロックを解放できます。

throw

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

try

Oracle RLのtry、catchおよびfinallyは、構文もセマンティクスもJavaに類似しています。catch句またはfinally句が1つ以上必要です。

while

テストがtrueの間にアクション・ブロックを実行します。return、throwまたはhaltによってアクション・ブロックを終了できます。


拡張モードのアクション・フォームを使用する手順は、次のとおりです。

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

  2. ルールまたはデシジョン表を選択または追加します。

  3. ルールまたはデシジョン表で、ルールまたはデシジョン表名の横にある「詳細設定の表示」アイコンをクリックします(第4.5.1項「ルールまたはデシジョン表の詳細設定の表示と非表示を切り替える方法」を参照)。

  4. 「拡張モード」を選択します。

  5. 挿入領域が表示された状態で、ルールの「THEN」領域で、「<アクションの挿入>」を選択します。図4-50に示すように、アクション・リストが表示されます。

    図4-50 拡張モードのルールへのアクションの追加

    図4-50の説明が続きます
    「図4-50 拡張モードのルールへのアクションの追加」の説明

  6. リストで、追加するアクションを選択します。

    たとえば、「assign new」を選択します。

  7. 「THEN」領域で、アクションの状況依存パラメータを選択し、適切な値を入力します。

4.7.4 拡張モードの集計条件の使用方法

拡張モードでルールを作成する際に、ルール・デザイナではパターン一致集計オプションがサポートされます。1つのみのファクトではなく複数のファクトに基づくルール条件を記述する場合に、集計を使用できます。複数のファクトにわたるビューが条件に含まれている場合は、集計関数を使用します。

表4-7に、使用可能な集計関数を示します。

表4-7 拡張モードのルール用の集計関数

関数 説明

count

一致するファクトのカウント。

average

一致するファクトの平均。

maximum

一致するファクトの最大値。

minimum

一致するファクトの最小値。

sum

一致するファクトの合計。

collection

一致するファクトのリストを作成します。


たとえば、次のような特別な注文を指定するルールを記述します。

IF 
   an order has more than 5 line items whose price is above a certain value
THEN 
   the order requires manual approval

5つの明細品目は複数のファクトにわたる場合があります。そのため、count集計関数を使用して、このサンプルの特別な注文規則を記述できます。

集計関数を使用する場合、次の手順を実行します。

  • パターンにaggregateを選択します。

  • 表4-7に示すリストから関数を入力します。

  • 値を入力するか、または状況依存メニューから選択します。

    • <variable>: 集計値の名前。

    • <expression> 集計する値(driver.age.など)。選択した集計関数がcount関数の場合、<expression>は使用しません。

たとえば、図4-51に示すように、赤色のすべての明細品目のコストの合計を計算できます。

図4-51 赤色合計コスト・ルールでの集計関数の使用

図4-51の説明が続きます
「図4-51 赤色合計コスト・ルールでの集計関数の使用」の説明

拡張モードの集計を使用する手順は、次のとおりです。

  1. 集計関数を使用するルールまたはデシジョン表を選択または作成します。

  2. ルール名またはデシジョン表名の横にある「詳細設定の表示」アイコンをクリックします(第4.5.1項「ルールまたはデシジョン表の詳細設定の表示と非表示を切り替える方法」を参照)。

  3. 「拡張モード」を選択します。

  4. 使用するファクト・タイプを入力します。

  5. 「<パターンの挿入>」を選択してパターンを追加します。

  6. 新規のパターンを選択します。

  7. パターンを右クリックして「囲む」を選択します。「囲む」ダイアログが表示されます。

  8. 「囲む」ダイアログで、パターン・ブロックを選択します。詳細は、第4.7.1項「拡張モードのパターン一致オプションの使用方法」を参照してください。

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

  10. パターンで、最初のフィールドを選択します。デフォルトでは、このフィールドには図4-52に示すように「(次の各ケース)」が含まれています。

    図4-52 詳細パターン一致オプションの追加

    図4-52の説明が続きます
    「図4-52 詳細パターン一致オプションの追加」の説明

  11. aggregateオプションを選択します。図4-53に示すように、集計用の状況依存フィールドが追加されます。

    図4-53 ルールでの集計関数の使用

    図4-53の説明が続きます
    「図4-53 ルールでの集計関数の使用」の説明

  12. 「<関数>」をクリックし、リストから関数を選択します。

  13. 条件で、「<ファクト・タイプ>」をクリックし、リストからファクト・タイプを選択します。

  14. 「<式>」をクリックし、リストから式を選択します。

  15. ルール・デザイナでは、デフォルトで集計パターンの作成時に変数名が作成されます。作成中のルールに必要な場合は、デフォルトの変数名を置き換える変数名を入力します。図4-54に、集計を使用して完成したルールを示します。この例では、わかりやすくするためにルールには変数名total_costおよびitem_xが表示されています。

    図4-54 ルール内で完成した集計関数

    図4-54の説明が続きます
    「図4-54 ルール内で完成した集計関数」の説明

  16. 必要に応じてその他のテストを入力します。この例では、図4-55に示すように、赤色の品目のテストを入力します。

図4-55 赤色合計コスト・ルールでの集計関数の使用

図4-55の説明が続きます
「図4-55 赤色合計コスト・ルールでの集計関数の使用」の説明

4.7.5 拡張モードのルールに関する必知事項

「拡張モード」のルールを使用する際には、次のような特殊ケースに注意する必要があります。

  • 集計を使用する場合、アクションにはパターン変数が表示されません。パターン変数は、「(次の各ケース...)」パターンを使用する場合のアクション・リストにのみ表示されます。したがって、「集計」、「次のケースがある」パターンまたは「次のケースがない」パターンには、パターン変数を表示できません。

  • 「拡張モード」を選択すると、詳細パターン一致などの詳細オプションをルールで使用しているかぎり、「拡張モード」は選択状態のままで非アクティブ(グレー表示)になっています。「拡張モード」の選択を解除するには、拡張モード機能を削除するか、または元に戻す必要があります(拡張モードではないルールを作成することからやり直し、その後で拡張モードのルールを削除するほうが容易な場合があります)。

拡張モード・オプションの選択を解除する手順は、次のとおりです。

  1. 「拡張モード」の選択を解除するルールまたはデシジョン表を選択します。

  2. ルール名またはデシジョン表名の横にある「詳細設定の表示」アイコンをクリックします(第4.5.1項「ルールまたはデシジョン表の詳細設定の表示と非表示を切り替える方法」を参照)。

  3. ルールの状態を考慮します。

    • ルールを簡素化して「拡張モード」オプションを有効化(「拡張モード」アイコンがグレー表示でなくなり有効になる)できる場合は、ルールを簡素化して、「拡張モード」が有効になったら、「拡張モード」の選択を解除します。

    • 「元に戻す」を使用して「拡張モード」ルールを作成するために使用した手順を元に戻し、ルールを「拡張モード」ではない状態にできる場合は、この方法を使用してルールを簡素化します。

    • ルールを簡素化できない場合は、ルールを削除して再作成します。

4.8 ツリー・モードのルールの使用

ツリー・モードのルールを使用すると、親子関係にマップされるネストされた要素が存在するマスター・ディテール階層を容易に使用できます。

4.8.1 ツリー・モードのルールの概要

ツリー・モードのルールを説明するには、例を使用すると有用です。ビジネス・プロセスおよびルールを使用して小売発注書(PO)を処理するアプリケーション部分のライフサイクルについて考えます。発注書には、PO全体に適用される取引条件を含むヘッダーがあります。POには、出荷先のリストも含まれています。各宛先には、住所、宛先の住所に出荷される品目のリストおよび出荷のリストが含まれています。

すべての品目のステータスが出荷済または取消し済である場合に、POが完全に出荷済であるとする、というビジネス・ルールについて考えます。

図4-56に、POの例のサンプルXMLスキーマ表現を示します。POのXML文書はツリー構造になっています。これにより、POの自然な表現が可能になります。たとえば、PO自体は最上位レベルの文書要素であり、宛先は品目要素および出荷要素を含むネストされた要素です。出荷要素にも、注文された品目を参照する品目要素が含まれています。ステータスには、有効な値のリストがあります。

図4-56 ツリー・モードのルールのサンプルのPOスキーマ

図4-56の説明が続きます
「図4-56 ツリー・モードのルールのサンプルのPOスキーマ」の説明

例4-1に、図4-56で示したサンプルの発注書のXMLスキーマを示します。

例4-1 サンプルの発注書(PO)のスキーマ

<?xml version= '1.0' encoding= 'UTF-8' ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.example.org"
targetNamespace="http://www.example.org"
     elementFormDefault="qualified">
    <xsd:element name="PO">
        <xsd:annotation>
            <xsd:documentation>A sample element</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="header">
                    <xsd:complexType>
                        <xsd:attribute name="status" type="Status"/>
                        <xsd:attribute name="order-date" type="xsd:date"/>
                        <xsd:attribute name="customer-value"/>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="billing">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="address"/>
                            <xsd:element name="payment"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="destination" maxOccurs="unbounded">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="address"/>
                            <xsd:element name="item" maxOccurs="unbounded">
                                <xsd:complexType>
                                    <xsd:attribute name="ID"/>
                                    <xsd:attribute name="status"/>
                                    <xsd:attribute name="quantity" type="xsd:int"/>
                                    <xsd:attribute name="availability-date" type="xsd:date"/>
                                    <xsd:attribute name="qoh" type="xsd:int"/>
                                    <xsd:attribute name="price"
                                                   type="xsd:decimal"/>
                                </xsd:complexType>
                            </xsd:element>
                            <xsd:element name="shipment" minOccurs="0" maxOccurs="unbounded">
                                <xsd:complexType>
                                    <xsd:sequence>
                                        <xsd:element name="item" maxOccurs="unbounded">
                                            <xsd:complexType>
                                                <xsd:attribute name="ID"/>
                                                <xsd:attribute name="quantity"/>
                                            </xsd:complexType>
                                        </xsd:element>
                                    </xsd:sequence>
                                    <xsd:attribute name="ship-date"/>
                                    <xsd:attribute name="method"/>
                                </xsd:complexType>
                            </xsd:element>
                        </xsd:sequence>
                        <xsd:attribute name="status" type="xsd:string"/>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:simpleType name="Status">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="open"/>
            <xsd:enumeration value="partially shipped"/>
            <xsd:enumeration value="fully shipped"/>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema>

例4-2に、POスキーマのインスタンスのXMLの一部を示します。ツリー・モードのルールを使用するために、1つ以上の取引条件をテストするルールを作成でき、テストにパスした場合は1つ以上の取引条件が追加または変更されます。Oracle Business Rulesには、サンプルのPOインスタンスのようなファクト・ツリーでのエラーのないルール作成を有効化する特別なサポートがあります。

たとえば、次のように指定するPOスキーマのインスタンスのルール作成について考えます。

IF the time between the order date and the date for availability of an item is more than 30 days
THEN cancel the item

例4-2 サンプルのPOのXMLインスタンス(要約)

<PO xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.example.org ../../../../Temp/PO.xsd"
    xmlns="http://www.example.org">
  <header/>
  <billing>
    <address/>
    <payment/>
  </billing>
  <destination>
    <address/>
    <item ID="a01"/>
    <item ID="a02"/>
    <item ID="a03"/>
    <shipment>
      <item ID="a01"/>
      <item ID="a02"/>
    </shipment>
  </destination>
</PO>

4.8.1.1 ツリー・モードのルール(非拡張モード)

「拡張モード」オプションが選択されておらず、「ツリー・モード」が選択されている場合は、非拡張ツリー・モード、つまり単純ツリー・モードを使用します。このモードでは、Rules Designerにより、図4-57に示すように、ルート・ファクト・タイプを入力するROOT: 「<ファクト・タイプ>」が表示されます。

図4-57 「ツリー・モード」が選択された単純ツリー・モード・ルール

図4-57の説明が続きます
「図4-57 「ツリー・モード」が選択された単純ツリー・モード・ルール」の説明

「ツリー・モード」を選択し、「拡張モード」の選択を解除してルールを作成すると、修飾名を使用してツリー内のプロパティを参照できます。次に例を示します。

  • PO/destination/item.quantityitem.quantityに似ていますが、POのdestinationである品目のみが一致します。

  • PO$Destination$item.quantityList<item>を参照します。この参照は、非ツリー・モードから変更されていません。

単純ツリー・モードでは、選択できるのは多対多結合や集計を必要としない条件のみです。

詳細は、第4.8.2項「単純ツリー・モードのルールの作成方法」を参照してください。

4.8.1.2 拡張ツリー・モードのルール

「拡張モード」オプションが選択されており、「ツリー・モード」オプションが選択されている場合は、拡張ツリー・モードを使用します。このモードでは、Rules Designerにより、図4-58に示すように、ルート・ファクト・タイプを入力するROOT: 「<ファクト・タイプ>」が表示されます。ルール・デザイナでは、ツリー構造のファクトのパターンが表示されますが、親ファクトと子ファクトを結合する単純テストは非表示です。

図4-58 拡張ツリー・モード

図4-58の説明が続きます
「図4-58 拡張ツリー・モード」の説明

拡張ツリー・モードでは、ツリー・モードのパターン(ルート以外)は次のように表示されます。

<演算子> <変数> is a <ファクト・パス>

<ファクト・パス>は、ルートから始まる1対1および1対多関係をたどるXPathに類似したパスです。たとえば、各ファクト・パスにはPO/destinationなどの名前が付いており、POはルート・ファクト・タイプで、destinationはタイプListのプロパティです。ファクト・パス内の1対多関係は、PO/destinationのように/で示されます。

ファクト・パス内の1対1関係は、.で示されます。これは非ツリー・モードから変更されていません。たとえば、item.availabilityDateです。

拡張モードはパターンの概念を公開しており、その最も単純な形式はis aです。たとえば、p is a POではpはすべてのPOファクトと繰り返し一致し、d is a p/destinationではdpのすべてのdestinationと一致します。is aの左側は変数であり、右側はファクト・タイプまたはファクト・パスです。デフォルトでは、Oracle Business Rulesによってファクト・タイプまたはファクト・パスと等しい変数名が設定されます。たとえば、PO is a POです。パターンにはパターン・ブロックを使用することもできます。パターン・ブロックには、ブロック内でネストされたパターンおよびテストに適用される論理数量子、否定または集計があります。

詳細は、第4.8.3項「拡張ツリー・モードのルールの作成方法」を参照してください。

拡張ツリー・モードのルールを使用する場合、ルール・デザイナでは、直積を回避しながら、様々な子フォレストからの条件を同じルールに結合するために、集計パターン(有無など)を使用する必要があります。

4.8.2 単純ツリー・モードのルールの作成方法

次の手順では、例4-1で示したXMLスキーマと例4-2で示したスキーマ・インスタンスを使用して、30日間使用可能ではない品目を取り消すPOルールを作成します。

IF the time between the order date and the date for availability of an item is more than 30 days
THEN cancel the item

単純ツリー・モードのルールを作成する手順は、次のとおりです。

  1. ルールセット内にIF/THENルールを作成します。

    詳細は、第4.3.1項「ルールの追加方法」を参照してください。

  2. 詳細設定を表示します。

    詳細は、第4.5.1項「ルールまたはデシジョン表の詳細設定の表示と非表示を切り替える方法」を参照してください。

  3. 図4-59に示すように、「ツリー・モード」を選択します。

    図4-59 単純ツリー・モードの詳細設定

    図4-59の説明が続きます
    「図4-59 単純ツリー・モードの詳細設定」の説明

  4. ROOT:の横で、「<ファクト・タイプ>」プレースホルダをクリックし、図4-60に示すようにリストから「PO」を選択します。

    図4-60 単純ツリー・モード: ルートの構成

    図4-60の説明が続きます
    「図4-60 単純ツリー・モード: ルートの構成」の説明

  5. <テストの挿入>」を選択します。

    IF文がIF <オペランド> == <オペランド>となります。

  6. 左の「<オペランド>」を選択します。

  7. リストで、PO/destination/item.availabilityDateを選択します。

  8. 図4-61に示すように、「式ビルダー」アイコンを選択します。

    図4-61 単純ツリー・モードの式の追加

    図4-61の説明が続きます
    「図4-61 単純ツリー・モードの式の追加」の説明

  9. 「式ビルダー」ダイアログで、「式」領域に表示されている品目をコピーして削除します。

  10. 式ビルダーで、「関数」タブを選択します。

  11. ナビゲータで、「Duration」を開き、「daysbetween」関数をダブルクリックします。

  12. 図4-62に示すように、「daysbetween」の引数テンプレートを削除します。

    図4-62 式ビルダーを使用した単純ツリー・モードのルールの追加

    図4-62の説明が続きます
    「図4-62 式ビルダーを使用した単純ツリー・モードのルールの追加」の説明

  13. 「daysbetween」関数の2番目の引数として前に切り取った値を貼り付けます。

  14. 「式ビルダー」ダイアログで、「変数」タブを選択します。

  15. 「daysbetween」関数の最初の引数について、ナビゲータを使用して「PO」を開き、「header」を開いて「orderDate」をダブルクリックします。

  16. 「式ビルダー」ダイアログで「OK」をクリックします。

  17. リストで、「式」領域で[Enter]を押します。

  18. 「operator」を選択して>を入力します。

  19. 図4-63に示すように、右の「<オペランド>」を選択し、値30を入力して[Enter]を押します。

    図4-63 単純ツリー・モード: 右オペランドの値30

    図4-63の説明が続きます
    「図4-63 単純ツリー・モード: 右オペランドの値30」の説明

  20. 「<アクションの挿入>」をクリックし、リストから「modify」を選択します。

    THEN文がTHEN modify <ターゲット>となります。

  21. 「<ターゲット>」をクリックし、リストから「PO/destination/item」を選択します。THEN文は次のようになります。

    THEN modify PO/destination/item ( <add property> )
    
  22. 「<プロパティの追加>」をクリックします。「プロパティ」ダイアログが表示されます。

  23. 「プロパティ」ダイアログで、図4-64に示すように、status名に値"canceled"を入力します。

    図4-64 単純ツリー・モード: アクション

    図4-64の説明が続きます
    「図4-64 単純ツリー・モード: アクション」の説明

  24. 「プロパティ」ダイアログで、「閉じる」をクリックします。

  25. 図4-65に示すように、完成したルールが表示されます。

    図4-65 単純ツリー・モードのルールの最終的なルール

    図4-65の説明が続きます
    「図4-65 単純ツリー・モードのルールの最終的なルール」の説明

modify文では、PO/destination/itemは特定のitemインスタンス・メンバーを参照することに注意してください。

4.8.3 拡張ツリー・モードのルールの作成方法

次の手順では、例4-1に示したXMLスキーマと例4-2に示した各ファクトのインスタンスを使用して、次のような無料出荷ルールを作成します。

IF the total cost of "free shipping eligible" items to a given destination is greater than $40
THEN shipping of those items is free

拡張ツリー・モードのルールを作成する手順は、次のとおりです。

  1. ルールセット内にIF/THENルールを作成します。

    詳細は、第4.3.1項「ルールの追加方法」を参照してください。

  2. 詳細設定を表示します。

    詳細は、第4.5.1項「ルールまたはデシジョン表の詳細設定の表示と非表示を切り替える方法」を参照してください。

  3. 図4-66に示すように、「拡張モード」を選択し、「ツリー・モード」を選択します。

    図4-66 無料出荷用の拡張ツリー・モードのルール

    図4-66の説明が続きます
    「図4-66 無料出荷用の拡張ツリー・モードのルール」の説明

  4. 「<ファクト・タイプ>」プレースホルダを選択し、リストから「PO」を選択します。

  5. 図4-67に示すように、無料出荷ルールを完成します。

図4-67 拡張ツリー・モードの無料出荷ルール

図4-67の説明が続きます
「図4-67 拡張ツリー・モードの無料出荷ルール」の説明

4.8.4 ツリー・モードのルールに関する必知事項

「ツリー・モード」を選択し、ルート・ファクト・タイプを選択すると、オプション・リストには使用可能なすべてのファクト・タイプが表示されます(ルート・ファクト・タイプの子のみではありません)。これにより、ルート・ファクト・タイプの子以外にも使用可能なすべてのファクト・タイプを表示できます。選択したルート・ファクト・タイプの子のみを表示するようにオプション・リストを制限することはできません。

4.9 日付ファクトの使用、日付関数および有効日の指定

Oracle Business Rulesでは、時刻と日付の操作を容易にする機能が提供され、時刻と日付に基づいてルールがいつ有効かを決定できる有効日機能が提供されます。

表4-8に、使用可能な「有効日」のオプションを示します。

表4-8 有効日に可能な値

有効日 説明

常に有効

「開始」も「終了」も設定しないことを指定します。

開始(「終了」日付設定なし)

特定の日付から不特定の将来にかけて有効です。

終了(「開始」日付設定なし)

現在から特定の日付まで有効です。

「開始」設定と「終了」設定

2つの日付の間のみ有効です。


「常に」以外の有効日指定には、次のいずれかを使用できます。

4.9.1 現在の日付ファクトの使用方法

ルールまたはデシジョン表で現在の日付ファクトを使用できます。

CurrentDateファクトを使用する手順は、次のとおりです。

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

  2. ルールセット内のルールを選択します。

  3. 図4-68に示すように、「IF」領域で、CurrentDateファクトおよびCalendarタイプの日付メソッドを使用する条件を追加します。

    図4-68 CurrentDateファクトを使用する条件を持つルール

    図4-68の説明が続きます
    「図4-68 CurrentDateファクトを使用する条件を持つルール」の説明

4.9.2 ルールの有効日の設定方法

ルールセット、ルールまたはデシジョン表の有効開始日または有効終了日、あるいはその両方を指定できます。ルールセットの有効日を指定する方法は、第4.2.2項「ルールセットの有効日の設定方法」を参照してください。

ルールの有効日を設定する手順は、次のとおりです。

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

  2. ルールセット内のルールを選択します。

  3. 図4-69に示すように、ルール名の横にある「詳細設定の表示」をクリックします。

    図4-69 ルールの詳細設定の表示

    図4-69の説明が続きます
    「図4-69 ルールの詳細設定の表示」の説明

  4. 「有効日」フィールドを選択します。図4-70に示すように、「有効日の設定」ダイアログが表示されます。

    図4-70 ルールの有効日の設定

    図4-70の説明が続きます
    「図4-70 ルールの有効日の設定」の説明

  5. 「有効日の設定」ダイアログを使用して、ルールの有効日を指定します。「日付の設定」アイコンをクリックすると、「開始」および「終了」フィールドのデータ入力に役立つカレンダが表示されます。

  6. 「有効日の設定」ダイアログで、「OK」をクリックします。

4.9.3 有効日に関する必知事項

デフォルトでは、Oracle Business Rules Engineにより、CurrentDateファクトおよび有効日に関連付けられるクロックは暗黙的に管理され、それぞれシステム日付の値に設定されます。RL Language関数setCurrentDate()およびsetEffectiveDate()を使用すると、現在の日付および有効日を明示的に設定できます。詳細は、『Oracle Fusion Middleware Oracle Business Rulesランゲージ・リファレンス・ガイド』を参照してください。

有効開始日とは、その日からルール、デシジョン表またはルールセットがルール評価と起動に関連させることができる日のことです。したがって、ルールが有効であれば条件が満たされた場合に起動でき、ルールが有効でなければ条件が満たされるかどうかに関係なく起動しません。

有効終了日とは、その日からルール、デシジョン表またはルールセットがルール評価に関連しなくなる日のことです(有効ではないということは、ルールが起動しないということを意味します)。

有効開始日と有効終了日はデシジョン表に設定できますが、デシジョン表内のルールに対して個別に設定することはできません。

ルールとデシジョン表には、「アクティブなルール」オプションも組み込まれています。このオプションは有効日に関係なく設定され、指定の有効日を変更または削除することなく日付を有効にします。「アクティブなルール」オプションの使用の詳細は、第4.5.3項「アクティブ・オプションの選択方法」を参照してください。

ルールセットとルールセット内のルールまたはデシジョン表の両方に対して有効日が定義されている場合、その優先度は次のようになります(最上位の優先度は1です)。

  1. ルールセットの「アクティブなルール」オプションが選択されていない場合、そのエンティティのRL Languageは生成されません。

  2. ルールセットの有効日プロパティの一方または両方が選択されている場合、有効開始日と有効終了日では、ルールセット内に定義されているルールまたはデシジョン表について許可された有効日の範囲が定義されます(つまり、「有効日の設定」ダイアログでルールセットの「開始」チェック・ボックスおよび「終了」チェック・ボックスの一方または両方が選択されている場合)。

    したがって、ルールセット内のルールまたはデシジョン表について指定された有効日は、それを含んでいるルールセットによって設定された境界に違反できません。たとえば、ルールには、ルールセットについて指定された有効終了日よりも後の有効終了日を指定できません。

  3. 個別のルールまたはデシジョン表の「アクティブなルール」が選択されていない場合、そのルールまたはデシジョン表のRL Languageは生成されません。

  4. ルールセットの「有効日の設定」ダイアログの「時間」が選択されている場合、またはルールセット内のルールまたはデシジョン表についてこのオプションが選択されている場合、有効日を指定する際にはルールセット内のルールまたはデシジョン表の全インスタンスの「時間」を選択する必要があります。この場合、「両方」または「日付」が選択されている場合は、Rules Designerでは次の検証警告が表示されます。

    RUL-05742: Calendar form incompatibility detected with forms Time and DateTime.
    If the calendar form is set to Time on a rule set or any of the rules or
    decision tables within that ruleset then the calendar form for that entire
    rule set is restricted to Time.
    

4.9.4 Duration、JavaDate、OracleDateおよびXMLDateメソッドの使用方法

Duration、JavaDateおよびXMLDate、OracleDateおよびOracleDuration拡張メソッドをルールまたはデシジョン表で使用できます。詳細は、付録B「Oracle Business Rulesの組込みクラスと関数」を参照してください。

Durationメソッドを使用する手順は、次のとおりです。

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

  2. ルールセット内のルールを選択します(Durationメソッドはデシジョン表で使用することもできます)。

  3. 「IF」領域で条件を追加します。

  4. ルール条件のオペランドを選択します。

  5. リストから「式ビルダー」を選択します。詳細は、第4.10項「式ビルダーの使用」を参照してください。

  6. 式ビルダーで、「関数」タブを選択します。

  7. 「式ビルダー」のナビゲータで、「Duration」フォルダを開きます。

  8. 間隔テストの必要に応じて、適切なメソッドをダブルクリックして選択および挿入します。

  9. 適切な引数をメソッドに指定します。図4-71に示す例を参照してください。

  10. 図4-72に示すように、ルールを作成できます。

図4-71 ルールでのDurationメソッドの使用

図4-71の説明が続きます
「図4-71 ルールでのDurationメソッドの使用」の説明

図4-72 Duration機能を使用するルールの追加

図4-72の説明が続きます
「図4-72 Duration機能を使用するルールの追加」の説明

4.10 式ビルダーの使用

式ビルダーを使用して、Oracle Business Rules用の式を作成したり編集できます。

4.10.1 式ビルダーの概要

Rules Designerの様々な部分から式ビルダーにアクセスできます。たとえば、「グローバルの編集 -」ダイアログや、デシジョン表内で条件を操作するときの「条件」領域、および自由形式の式を選択して拡張モードでルールとデシジョン表を入力するときなどです。

図4-73に、ルール・デザイナの式ビルダーを示します。

図4-73 ルール・デザイナの式ビルダー

図4-73の説明が続きます
「図4-73 ルール・デザイナの式ビルダー」の説明

4.10.2 式ビルダーの使用方法

式ビルダーでは、「変数」または「関数」ナビゲーション・ツリー、または「演算子」タブ、または「定数」タブで項目をダブルクリックすると、項目は「式」領域の式に挿入されます。また、「式」領域でテキストを入力して、式を直接作成または編集することもできます。

式を入力するときは、「変数」は有効な割当ターゲットであり、「定数」は有効な割当ターゲットではないことに注意してください。そのため、作成する式に追加する項目のタイプが明確ではない場合は、両方のタブを使用する必要があります。

「式」フィールド内の関数にカーソルを置き、挿入する式または関数をダブルクリックして、選択した関数の引数を指定します。たとえば、関数のカッコ内にカーソルを置いて変数を選択します。これにより、カーソル位置にある式に変数が挿入されます。

4.10.3 式の使用に関する必知事項

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では式を使用できます。式を使用することで、*+/%、およびプリミティブな数値に対してサポートされたその他の演算子(doubleintなど)や、組込みディクショナリで使用できる数値タイプIntegerLongShortFloatDouble BigDecimalBigIntegerを使用して算術計算ができます。サポートされているプリミティブな数値の詳細は、『Oracle Fusion Middleware Oracle Business Rulesランゲージ・リファレンス・ガイド』を参照してください。

式を使用すると、任意の2つの数値タイプ間でキャストを行うことができます。たとえば、(short)((BigInteger)1 + (Long)2)のようになります。例4-3は、その他の式のサンプルをいくつか示しています。

式プロセッサは型の昇格にXPath/Xqueryルールを使用します(XML Path Language (XPath) 2.0)。たとえば、BigDecimalfloat/doubleに昇格します。別方向へのタイプの昇格にはキャストが必要です(3.3などのリテラルを除く)。

例4-3 タイプとキャストを使用したアクションのサンプル式

assign new double db = 3.3
assign new BigDecimal bd = 3.3  // no cast required
assign db = bd // no cast required
assign bd = (BigDecimal)db // cast is required 

4.11 ルールにおけるオプション値の制約としてのバケット・セットの使用

値リスト・バケット・セットと範囲リスト・バケット・セットを使用して、ルール内のビジネス条件に対する制約を指定できます。これにより、ルール・デザイナを使用して、指定値が範囲外の場合や、バケット・セットで指定された候補値セットの範囲内にない場合に、可能性のあるエラーに関する検証警告を生成できます。Oracle Business Rulesでは、バケット・セットを使用して、グローバル初期値、関数の戻り値または関数の引数値の制約を指定することもできます。詳細は、第2.3項「Oracle Business Rulesグローバルの使用」および第3.7項「バケット・セットのビジネス条件との関連付け」を参照してください。

4.11.1 範囲リスト・バケット・セットをビジネス条件の制約として使用する方法

範囲リスト・バケット・セットは、関数結果以外のビジネス条件の制約として使用できます。

値リスト・バケット・セットを制約として使用する方法の詳細は、第4.11.2項「値リスト・バケット・セットをファクト・プロパティの制約として使用する方法」を参照してください。

範囲リスト・バケット・セットをファクト・プロパティの制約として使用する手順は、次のとおりです。

  1. 対象となる範囲を含んだバケット・セットを指定し、有効なすべての範囲について「アクションで許可済」を選択します。範囲を含めるには、最上部と最下部のエンドポイントについて「アクションで許可済」の選択を解除します。

  2. アプリケーションに必要な場合は「含まれるエンドポイント」を選択します。

  3. 「許可されないバケットをテストに含める」の選択を解除します。たとえば、有効な等級を定義し、100より大きい値または0より小さい値を許可しないバケット・セットの場合、バケット・セットのエンドポイントを図4-74のように定義します。

    図4-74 ファクト・プロパティの有効等級バケット・セット

    図4-74の説明が続きます
    「図4-74 ファクト・プロパティの有効等級バケット・セット」の説明

  4. このバケット・セットをビジネス条件と関連付けます。たとえば、図4-75に示すように、このバケット・セットをtest_math1に関連付けます。

    図4-75 バケット・セットとファクト・プロパティの関連付け

    図4-75の説明が続きます
    「図4-75 バケット・セットとファクト・プロパティの関連付け」の説明

これで、このファクト・プロパティを使用するテストでルールを定義すると、値が範囲外の場合に検証警告が表示されます。たとえば、図4-76に示すように、値-10の式でルールを定義すると、ルール・デザイナに検証警告が表示されます。

図4-76 関連バケット・セットの「アクションで許可済」内にないファクト・プロパティ値の使用

図4-76の説明が続きます
「図4-76 関連バケット・セットの「アクションで許可済」内にないファクト・プロパティ値の使用」の説明"

4.11.2 値リスト・バケット・セットをファクト・プロパティの制約として使用する方法

値リスト・バケット・セットをファクト・プロパティの制約として使用できます。

範囲リスト・バケット・セットを制約として使用する方法の詳細は、第4.11.1項「範囲リスト・バケット・セットをビジネス条件の制約として使用する方法」を参照してください。

値リスト・バケット・セットをファクト・プロパティの制約として使用する手順は、次のとおりです。

  1. 対象となる値を含んだLOVバケット・セットを指定し、有効なすべての値について「アクションで許可済」を選択します。詳細は、第3.6.1項「値リストのグローバル・バケット・セットの定義方法」を参照してください。

  2. otherwiseバケットについて「アクションで許可済」の選択を解除します。

  3. 「許可されないバケットをテストに含める」の選択を解除します。

  4. このバケット・セットをファクト・プロパティに関連付けます。

4.11.3 バケット・セットを使用してテスト式のオプションを指定する方法

LOVバケット・セットを使用して、式およびアクションのオプションを指定できます。

バケット・セットを使用してルール式およびアクションのオプションを指定する方法は、次のとおりです。

  1. ルール・デザイナで、ファクト・プロパティに対応するタイプのLOVバケット・セットを定義します。詳細は、第3.6.1項「値リストのグローバル・バケット・セットの定義方法」を参照してください。

  2. バケット・セットをファクト・プロパティに関連付けます。詳細は、第3.7.1項「バケット・セットをファクト・プロパティに関連付ける方法」を参照してください。

  3. 式を入力すると、ルール・デザイナにより「values options」にバケット値が表示されます。たとえば、ファクト・プロパティDriver.eye_testeyesというLOVバケット・セットに値passfailおよびglasses_requiredで関連付け、テスト式でDriver.eye_testを使用した場合、バケット値は図4-77に示すように制限されます。

    図4-77 バケット・セットを使用したルール・テスト式のオプションの指定

    図4-77の説明が続きます
    「図4-77 バケット・セットを使用したルール・テスト式のオプションの指定」の説明

4.12 ランタイム・ルールの変更内容のリポジトリからJDeveloperへのインポート

この項では、SOAコンポーザで実装されているルールに対する変更をJDeveloperにインポートする方法について説明します。

SOAコンポーザのディクショナリに変更を行った場合は、第12.10項「Oracle Business Rulesディクショナリの変更の実行時のコミット」に示すように、その変更内容をMDSリポジトリにアップロードする必要があります。ただし、これらの変更はJDeveloperでは更新されません。MDSリポジトリからJDeveloperに、変更内容を手動でインポートする必要があります。

JDeveloperに変更内容をインポートする手順は、次のとおりです。

  1. アプリケーション・ナビゲータで変更を行ったルールを選択します。

  2. 図4-78に示すように、ルール・エディタで「MDSからインポート」ボタンをクリックします。

    図4-78 MDSリポジトリからの変更内容のインポート

    図4-78については周囲のテキストで説明しています。
  3. 「SOAリソース・ブラウザ」ウィンドウが開くので、MDSリポジトリを選択します。

    図4-79 「SOAリソース・ブラウザ」でのMDSリポジトリの選択

    図4-79については周囲のテキストで説明しています。
  4. 「OK」をクリックします。

    JDeveloperで変更内容が更新され、ルール・エディタに変更内容が表示されます。