ビジネス・ルールへのロジックの適用
ビジネス・ルールの作成に役立つガイドラインを使用します。
競合しないルールの作成
-
ルールによって実行時に競合が発生しないことを確認してください。
たとえば、あるプロセスにサーバー品目タイプの履行明細を割り当てるルールxを作成し、サーバー品目ABCを別のプロセスに割り当てるルールyを作成するとします。 競合が発生する可能性があります。 サーバー品目ABCが指定されないように、ルールxを改訂する必要があります。 Oracle Business Rulesは、ルールの保存後に発生する可能性がある競合に関する詳細を提供します。
-
ルールで1つのデータ・オブジェクトを同じタイプの別のデータ・オブジェクトと比較する場合は、拡張モードを使用して2つの変数(各データ・オブジェクトを表す1つの変数)を作成します。
変数1が変数2と同じではないことを指定する必要があります。 このテストを設定します。
variable1 is not variable2
このテストを設定しない場合、Oracle Business Rulesは、適用するルールを決定するときに、variable1および変数2を使用して同じオブジェクト・インスタンスを表します。
-
各ルールが1つの結果に評価されることを確認します。 たとえば、履行タスクに2つのルールを記述する場合は、1つのルールのみがtrueと評価されるようにします。 2つのルールを記述するとします。
If Task Type = Shipment return Shipment If Task Type = Shipment and Customer = GOLD return Third Party Shipment
これらのルールは異なって見えますが、タスク・タイプが出荷で、顧客がゴールドの場合はそれぞれtrueと評価されます。 この問題を回避するには、Visual Information BuilderのIf、Then、Elseルールを記述して、ルールが相互排他であることを確認します。
Visual Information Builderでのルール・ロジックの使用
ノート
-
「エンティティを確認」。 オーダー・タイプなどの属性を入力すると、その属性を含むエンティティ(オーダー・ヘッダーなど)が属性のすぐ下に表示されます。
オーダー・ヘッダーのほとんどの属性は、オーダー明細の属性とは異なります。 たとえば、オーダー・ヘッダーにはオーダー・タイプ属性が含まれますが、オーダー明細は含まれません。 ただし、オーダー・ヘッダーとオーダー明細には類似または同一の属性が含まれます。 たとえば、オーダー・ヘッダーとオーダー明細にはそれぞれ属性出荷指示が含まれます。 ルールでオーダー・ヘッダーの出荷指示を参照する必要がある場合は、オーダー・ヘッダー・エンティティを使用していることを確認してください。
-
「リスト内」。 OR条件を記述するかわりに、属性が参照する値リストを調べるには、リストにあるを使用します。 たとえば、オーダー・タイプの値リストには、混合オーダーおよびStandardオーダーが含まれます。 リストにあるを使用しない場合は、一連のOR条件を記述する必要がある場合があります。 たとえば:
If Order Type equals Mixed Orders, or If Order Type equals Standard Orders
-
「説明を追加」。 IF文の説明はオプションです。 ただし、ルールにドリルダウンして文の目的を判断しなくても、ルール・ロジックを迅速にスキャンできます。 Then句の説明を追加することもできます。
-
「オブジェクトが空でないことを確認してください」。
ノート: ルールが値に依存し、ルールが値を含まない属性を参照する場合、エラーなどの予測できない結果で失敗する可能性があります。 たとえば:この問題を回避します。 ルールが参照する属性の値が空でないことを確認してください。Oracle Business Rulesで実行する方法の例を次に示します。
ビジュアル情報ビルダーのルール・ロジックを使用して、ルールの作成および管理を簡素化します。
ノート
-
ルールを構成します。
-
複数のルールに分散するのではなく、すべてのロジックを1つのルールに配置します。
-
複数のルールを記述するかわりに、複数のIF_THEN_ELSE文を含む1つのルールを記述します。
-
IF THEN ELSE構造を追加します。
-
ELSEの後に別のIFを追加するなど、ルールをネストします。
-
-
リストにない値を検索するには、リストの値を検索するルールを作成し、False条件を追加します。 別のルールを追加するのではなく、IF文で直接Falseを使用してNOT条件を実装します。
優先度の設定
同じビジネス要件を満たすように複数のルールを設定する場合は、優先順位を設定します。
優先度によって、オーダー管理がルールを適用するときに使用する順序が決まります。 ルールxでは優先度を中、ルールyでは高に設定したとします。 ルールxおよびyのIf文の条件がtrueと評価されるとします。 オーダー管理は、最初にオーケストレーション・プロセスにルールyを適用し、次にルールxを適用します。
詳細は、「オーケストレーション・プロセスを一時停止するためのガイドライン」を参照してください。
ルールが相互排他であることを確認
単一のルール・セット内のルールが相互に排他的であることを確認してください。
ルール・セットは、ビジネス目標を達成するために一緒に実行されるルールのグループです。 たとえば、一時停止タスクに一時停止ルールとリリース・ルールを作成するとします。 一時停止ルールとリリース・ルールは、1つのルール・セットを構成します。 Oracle Business Rulesは、ルール・セット内のすべてのルールを実行します。 ロジックの問題を回避するには、2つのルールを同時にtrueにしたり、同時にfalseにできないようにします。
If文の作成
-
ルールの記述を開始するときに、自然言語を使用する「If Then」形式を使用します。 たとえば:
If the item type is server, then add extra packing to the shipping instructions.
-
あるルールの結果によって別のルールのIf文が変更され、無限ループが発生するような依存関係を削除します。
-
様々なデータ入力の結果を考慮します。 If Then文は最も一般的な文です。 If Then Elseは拡張モードでも使用できます。
-
条件が満たされない状況をルールが処理できるように、Else句と同等のものを追加します。 処理の中断を回避するために、これは、ルールでオーケストレーション・プロセスを割り当てる場合や、処理を履行タスクにルーティングする場合に特に重要です。
-
バケット・セットを使用して、ディシジョン表のIfロジックを簡略化します。 処理のパラメータを使用して、各ルールの同じ属性に異なる値を指定します。
-
If文とThen文の同じセットを使用する複数のルールが必要な場合は、デシジョン表を使用します。
Oracle Business Rulesでのif文の作成
使用している更新に応じて、Oracle Business Rulesで様々な条件を使用します。
古い更新 |
現在の更新 |
説明 |
---|---|---|
ケースごと |
個 |
If文の条件を満たす各行について繰り返します。 |
|
少なくとも1つ |
少なくとも1つの行がIf文の条件を満たしています。 |
|
なし |
どの行もIf文の条件を満たしていません。 |
集計 |
集計 |
履行明細を履行システムに送信する前に集計します。 |