BOPFでは、決定は、特定のトリガー条件が発生するとすぐに自動的に実行される機能を提供するために使用されるビジネス・オブジェクト・ノードのエンティティーです。満たされます。ビジネスオブジェクトのノードインスタンスに加えられた変更に基づいて、内部で決定がトリガされます。トリガー条件は、決定時間と関連するノードインスタンスでの操作の変更に応じて、トランザクションサイクル中のさまざまな時点でBOPFによってチェックされます。決定ごとに、トリガー条件を形成する時点と変更の両方を指定する必要があります。変更には、ノードインスタンスの作成、更新、削除、またはロードが含まれます。決定を主に使用して、他の属性の値から派生したデータを計算できます。トリガー条件の決定された属性と決定された属性は、同じノードまたは異なるノードに属します。
例
請求書オブジェクトインスタンスの複数の製品(アイテム)の数量に変更があった場合、関連するすべての製品の金額属性(全体の価格)を再計算する必要があります。この金額を自動的に計算するには、決定を利用して請求書ビジネスオブジェクトインスタンスの標準変更プロセスを拡張する必要があります。決定は、金額フィールドの新しい値を導出することにより、請求書アイテムの作成、変更、削除、またはロードに反応することができます。このような例の場合、ソリューションは次のようになります。
請求書明細の数量を変更した後、 CALCULATE_ITEM_AMOUNT決定とCALCULATE_TOTAL_AMOUNT決定の両方のトリガ条件が満たされます。CALCULATE_ITEM_AMOUNT決定は、変更されたアイテムの金額(価格x数量)を計算しますが、 CALCULATE_TOTAL_AMOUNT決定は、すべてのアイテムの金額を請求書の合計金額に合計します。
決定時間とトリガー
問題のユースケースに応じて、BOPFはトランザクション中のいくつかのポイントで決定のトリガーをチェックします。
決定時間は、トランザクションサイクルのどの時点で、その決定のトリガー条件を評価する必要があるかを定義します。たとえば、請求額の再計算は、変更が実行された後(決定時間:変更後)に毎回実行する必要がありますが、更新されたITEMノードのインスタンスがある場合に限ります(トリガー:更新)。
次のリストは、どのトリガー操作がどの決定時間に評価されるかを示しています。
決定の依存関係
上記の例で、決定間の依存関係を定義しない場合、システムは明細金額の前に合計金額を計算する可能性があります。したがって、を指定する必要があります
CALCULATE_TOTAL_AMOUNT決定の先行としてのCALCULATE_ITEM_AMOUNT決定。
決定が別の決定の先行であるか後続であるかを指定するには、決定の依存関係を定義します。実行する決定が複数ある場合、BOPFが決定のトリガー条件をチェックするときに、決定の依存関係が考慮されます。
例
次の依存関係は、アイテムの金額が合計金額の前に計算されるように定義されています。
依存関係は、決定の実行順序を定義します。
決定間の依存関係
有効な実行順序の例は次のとおりです。
4、1、3、2、5(たとえば、決定DET 2は、常にDET 5の実行前に実行されます)
1、2、5、4、3(たとえば、DET1は常にDET2の実行前に実行されます)。
決定タイプ
決定を実行するときにどのカテゴリのノードが機能するかに応じて、2つの異なる決定タイプを使用できます。
- 一時的な決定-一時的なフィールドまたはノードのみを変更します。このような決定には、ロックは必要ありません。
- 永続的な決定-一時的および永続的なフィールドまたはノードを変更します。ここではロックが必要です。
カスタム決定クラスの実装
決定ロジックは、決定インタフェース/ BOBF/IF_FRW_DETERMINATIONを実装するABAPクラス内にカプセル化されています。
詳細:決定APIを理解する