トレーニング
取り消し
取り消し関数を使用すると、ビジネス ルール エンジンの作業メモリからオブジェクトを削除できます。 ここでは、ルール エンジンの作業メモリからさまざまな種類のエンティティを取り消す操作に関係する動作について説明します。
.NET オブジェクトは、取り消し関数を使用してポリシーで 取り消 されます。 この関数は、ビジネス ルール Composer で Functions ボキャブラリ項目として使用できます。(アセンブリやメソッドではなく) クラスを [取り消し ] パラメーターにドラッグします。
注意
メソッドを [取り消 し] 関数にドラッグすると、エンジンは メソッドから返されたオブジェクトを取り消そうとします。
.NET オブジェクトを取り消すと、ルール エンジンの作業メモリからそのオブジェクトが削除され、次に示される影響を受けます。
述語でオブジェクトを使用しているルールでは、議題にアクションが存在する場合、議題からアクションを削除します。
オブジェクトを使用している議題のアクションは、議題から削除されます。
注意
議題の上位にある他のアクションは、 取り消 し関数が呼び出される前に既に実行されている可能性があります。
オブジェクトがエンジンによって評価されなくなります。
エンジンにアサートされた元の TypedXmlDocument を取り消すか、親 XmlDocument のノードから作成された子 TypedXmlDocumentの 1 つを取り消すことができます。
次の XML を例として使用すると、注文に関連付けられている TypedXmlDocument を取り消すか、orderline に関連付けられている TypedXmlDocumentの一方または両方を取り消すことができます。
<order>
<orderline customer="Joe" linenumber="001">
<product name="router" quantity="10" cost="550" />
</orderline>
<orderline customer="Jane" linenumber="002">
<product name="switch" quantity="1" cost="300" />
</orderline>
</order>
注文オブジェクトを取り消すには、スキーマの最上位のノードを XML スキーマ ファクト ペインにドラッグします。 このノードは ".xsd" で終わり、ドキュメント要素ノードではなくドキュメント ルート ノードを表します。最初の TypedXmlDocument を参照する "/" セレクターがあります。 親 TypedXmlDocument が取り消されると、TypedXmlDocument に関連付けられているすべての TypedXmlDocument インスタンス (ポリシーで使用されるセレクターに基づいて Assert 関数を呼び出して作成されたすべての TypedXmlDocument) が動作メモリから削除されます。
個々の子 TypedXmlDocument (つまり orderline) のみを取り消すには、このノードを [XML スキーマ] ペインから [取り消し ] 関数にドラッグします。 すべての TypedXmlDocumentは、XML ツリー階層の上に表示される TypedXmlDocument ではなく、最初にアサートされた最上位レベルの TypedXmlDocument に関連付けられていることに注意してください。 たとえば、product は orderline オブジェクトの下の TypedXmlDocument です。したがって、これは Orderline TypedXmlDocument ではなく TypedXmlDocument の順序に関連付 けられます。 ほとんどのインスタンスで、この区別は重要ではありません。 ただし、注文オブジェクトを取り消すと、Orderline オブジェクトと Product オブジェクトも取り消されます。 Orderline オブジェクトを取り消すと、そのオブジェクトだけが取り消されます。Product オブジェクトは取り消されません。
エンジンは、TypedXmlDocumentが最初にアサートされたときに作成されたオブジェクト インスタンス ( TypedXmlDocument ) でのみ動作し、追跡します。 ポリシーのセレクターを使用して選択されたノードへの兄弟ノードなど、追加のノードを作成した場合、 TypedXmlDocumentが作成されてアサートされない限り、これらのノードはルールで評価されません。 これらの新しい下位レベルの TypedXmlDocuments をアサートすると、ルールで評価されますが、最上位レベルの TypedXmlDocument にはそれらの知識がありません。 最上位レベルの TypedXmlDocument が取り消されると、新しい個別にアサートされた TypedXmlDocuments isl は自動的に取り消されません。 その結果、新しいノードが作成された場合、通常は完全な XmlDocument を取り消して再評価するのが最も簡単です。
TypedXmlDocument クラスは、アクションの一部としてカスタム .NET メンバー内で呼び出すことができる多くの便利なメソッドをサポートしています。 これには、TypedXmlDocument または親 TypedXmlDocument に関連付けられている XmlNode を取得する機能が含まれます。
個別の TypedDataRowまたは TypedDataTable 全体を取り消すことができます。 テーブルを取り消す場合、含まれるすべての行が作業メモリから取り消されます。
TypedDataTable 全体を取り消すには、ヘルパー関数を使用して TypedDataRow の Parent プロパティにアクセスする必要があります。次に例を示します。
Retract(MyHelper.GetTypedDataTable(TypedDataRow))
上記のアクションでは、テーブルを TypedDataRow にドラッグします。 GetTypedDataTable では、TypedDataRow.Parent の値を返します。
TypedXmlDocuments と同様に、TypedDataTableをアサートした後に同じ DataTable に対して追加の新しい TypedDataRow をアサートした場合、それらは個々のエンティティとして扱われ、TypedDataTable を取り消しても、これらの追加の TypedDataRowは取り消されません。 TypedDataTableがアサートされたときに格納されている TypedDataRow のみが取り消されます。
DataConnection が取り消されると、DataConnection によって構築されたクエリを介してデータベースから取得されたすべての TypedDataRowは、作業メモリから取り消されます。 DataConnection 自体も取り消されます。つまり、DataConnection (つまり、他の述語またはアクションで DataConnection を使用して) TypedDataRowが取得されなくなります。
DataConnection を使用する場合、個々の TypedDataRow に対する取り消し操作により、エンジンは不整合な状態になります。 したがって、DataConnection に関連付けられている個々の TypedDataRowでは操作を実行できません。 テーブルを ( DataConnection パラメーターを使用して) 取り消 し関数にドラッグすると、 DataConnection が取り消されます。