再アサート
再アサートとは、エンジンの作業メモリに既に存在するオブジェクトに対して Assert 関数を呼び出すということです。 reassert コマンドは、オブジェクトに対して retract コマンドを発行し、続けて assert コマンドを発行することと同じです。
最初にオブジェクトが取り消され、述語またはアクション内でオブジェクトを使用しているルールの議題に関するアクションが削除されます。 オブジェクトは作業メモリにアサートされ、新たにアサートされたオブジェクトとして評価されます。 したがって、述語内でオブジェクトを使用するルールが再評価され、そのアクションが議題に適切に追加されます。 以前に true に評価され、アクションで オブジェクトのみを使用したルールでは、アクションが議題に再追加されます。
最上位レベル の TypedXmlDocument (TXD) が再アサートされると、最上位レベル の TXDが最初にアサートされたときに作成される子 TXD は、子 TXDの状態に応じて動作が異なります。 新しい子ノードまたはダーティ子ノードの場合、その少なくとも 1 つのフィールドがルール アクション、アサート、または再アサート アクションを使用してポリシーで変更されたことを意味します。 ダーティではない既存の子ノードは、作業メモリに残されます。 次の例は、親ノードが再アサートされたときの子ノードの動作を説明する簡単なシナリオです。
現在作業メモリに 3 つの TXDがあるとします。 P、 C1、 C2、 C3 です。 P は最上位レベルの TXD であり、親ノードです。各子ノードには、フィールド x が含 まれています。
P
C1 (C1.x = 1)
C2 (C2.x = 1)
C3 (C3.x = 1)
次に、ルール アクションの結果として、次の操作が実行されたと仮定します。
C2 のフィールド (x) の値が更新されます。
C3 は、ユーザー コードを使用して削除されます。
ユーザー コードを使用して、追加の子ノード D が P に追加されます。
注意
エンジンが関知しない操作によってビジネス ルール エンジンがノードをダーティであると識別することはありません。 たとえば、外部アプリケーション内でプログラムによってノードが追加、削除、または変更された場合です。
作業メモリ内のオブジェクトの新しい表現は次のようになります。
P
C1 (C1.x = 1)
C2 (C2.x = 0)
D
次に、P を再評価 します。次の点は、子ノードの動作をまとめたものです。
ノード C2 は、フィールドの更新後にダーティになったため、再アサートされます。
ノード C3は、ワーキングメモリから取り消される。
ノード D は、動作中のメモリにアサートされます。
ノード C1 は、 P が再アサートされる前に更新されていないため、作業メモリ内で変更されません。
TypedDataRow で Reassert が発行された場合、その行は取り消され、ワーキング メモリにアサートされます。 TypedDataTable で Reassert が発行された場合、関連付けられているすべての TypedDataRowが取り消され、アサートされます。
DataConnection を介して取得されたすべての TypedDataRowは取り消されます。 その後、 DataConnection を使用するすべての述語が再評価され、 DataConnection が再クエリされ、関連する TypedDataRowが作成されます。