Retract
Vous pouvez utiliser la fonction Retract pour supprimer des objets de la mémoire de travail du moteur de règles métiers. Les paragraphes suivants décrivent le comportement associé à la rétractation des entités de types différents à partir de la mémoire de travail du moteur de règles.
Un objet .NET est retiré dans une stratégie à l’aide de la fonction Retract . Cette fonction est disponible dans le Compositeur de règles métiers en tant qu’élément de vocabulaire Functions : faites glisser la classe (et non l’assembly ou la méthode) vers le paramètre Retract .
Notes
Si vous faites glisser une méthode dans la fonction Retract , le moteur tente de retirer l’objet retourné par la méthode.
La rétraction d'un objet .NET le supprime de la mémoire de travail du moteur de règles et a l'impact suivant :
Les règles qui utilisent l'objet dans un prédicat ont leurs actions supprimées de l'agenda (si des actions figurent dans l'agenda).
Des actions de l'agenda qui utilisent les objets sont supprimées de celui-ci.
Notes
D’autres actions plus haut dans l’agenda ont peut-être déjà été exécutées avant l’appel de la fonction Retract .
L'objet n'est plus évalué par le moteur.
Vous pouvez soit retirer le TypedXmlDocument d’origine qui a été déclaré dans le moteur, soit retirer l’un des TypesdXmlDocument enfants créésà partir d’un nœud du XmlDocument parent.
En utilisant le code XML suivant comme exemple, vous pouvez soit retirer le TypedXmlDocument associé à order, soit l’un ou les deux des TypesdXmlDocumentassociés à orderline.
<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>
Pour rétracter l'objet Order, vous devez faire glisser le nœud supérieur dans le volet des faits des schémas XML. Ce nœud se termine par .xsd » et représente le nœud racine du document (et non le nœud d’élément document) ; il a un sélecteur « / » qui fait référence au TypedXmlDocument initial. Lorsque le TypedXmlDocument parent est retiré, toutes les instances TypedXmlDocument associées au TypedXmlDocument (toutes les types TypedXmlDocumentcréées en appelant la fonction Assert en fonction des sélecteurs utilisés dans la stratégie) sont supprimées de la mémoire de travail.
Pour retirer uniquement un TypedXmlDocument enfant individuel (qui est une ligne de commande), vous pouvez faire glisser ce nœud à partir du volet Schémas XML vers la fonction Retract . Il est important de noter que tous les TypesdXmlDocumentsont associés au TypedXmlDocument de niveau supérieur qui a été affirmé à l’origine, et non au TypedXmlDocument qui apparaît au-dessus d’elle dans la hiérarchie de l’arborescence XML. Par exemple, product est un TypedXmlDocument sous l’objet orderline ; par conséquent, il serait associé à l’ordre TypedXmlDocument, et non à la ligne de commande TypedXmlDocument. Dans la plupart des cas, cette distinction n'est pas importante. Cependant, si vous rétractez l'objet Order, les objets Orderline et Product le sont également, et si vous rétractez l'objet Orderline, l'objet Product n'est pas rétracté.
Le moteur fonctionne avec et suit uniquement les instances d’objet (TypedXmlDocuments) qu’il a créées lors de l’affirmation initiale du TypedXmlDocument . Si vous créez des nœuds supplémentaires(par exemple, des nœuds frères à un nœud qui a été sélectionné via un sélecteur dans la stratégie), ces nœuds ne sont pas évalués dans des règles, sauf si TypedXmlDocuments sont créés et déclarés pour eux. L’affirmation de ces nouveaux TypesdXmlDocuments de niveau inférieur entraîne leur évaluation dans des règles, mais le TypedXmlDocument de niveau supérieur n’en a pas connaissance. Lorsque le TypedXmlDocument de niveau supérieur est retiré, le nouveau TypedXmlDocumentindépendant n’est pas automatiquement retiré. Par conséquent, si de nouveaux nœuds sont créés, il est généralement plus simple de retirer et de réaffirmer l’intégralité du XmlDocument.
La classe TypedXmlDocument prend en charge un certain nombre de méthodes utiles qui peuvent être appelées dans un membre .NET personnalisé dans le cadre d’une action. Il s’agit notamment de la possibilité d’obtenir le XmlNode associé au TypedXmlDocument ou au TypedXmlDocument parent.
Vous pouvez retirer un TypedDataRowindividuel ou l’intégralité de TypedDataTable. Si vous retirez une table, toutes les lignes qu'elle contient sont retirées de la mémoire de travail.
Pour retirer l’intégralité de TypedDataTable , vous devez utiliser une fonction d’assistance pour accéder à la propriété Parent sur TypedDataRow, par exemple :
Retract(MyHelper.GetTypedDataTable(TypedDataRow))
Dans l’action précédente, vous faites glisser la table dans TypedDataRow. Dans GetTypedDataTable , vous retournez la valeur TypedDataRow.Parent.
Comme avec les types TypedXmlDocument, si vous affirmez des nouveaux TypesdDataRowsupplémentaires pour le même DataTable après avoir affirmé le TypedDataTable, ils sont traités comme des entités individuelles et le retrait du TypedDataTable n’entraîne pas le retrait de ces TypesdDataRowsupplémentaires. Seuls les types TypedDataRowcontenus dans TypedDataTable lorsqu’il a été déclaré sont retirés.
Lorsqu’un DataConnection est retiré, tous les TypesdDataRowrécupérés de la base de données via la requête construite par DataConnection sont retirés de la mémoire de travail. Le DataConnection lui-même est également retiré, ce qui signifie qu’aucun autre TypedDataRowne sera récupéré via DataConnection (autrement dit, via l’utilisation de DataConnection dans d’autres prédicats ou actions).
Lors de l’utilisation d’un DataConnection, toute opération de retrait sur un TypedDataRow individuel place le moteur dans un état incohérent. Par conséquent, les opérations ne sont pas autorisées sur des TypesdDataRowindividuels associés à un DataConnection. Si vous faites glisser la table (à l’aide du paramètre DataConnection ) dans la fonction Retract , vous allez retirer dataConnection.