Partager via


Se rétracter

Vous pouvez utiliser la fonction De retrait pour supprimer les objets de la mémoire de travail du moteur de règles métiers. Les paragraphes suivants décrivent le comportement associé à la retrait d’entités de différents types de la mémoire de travail du moteur de règles.

Objets .NET

Un objet .NET est retiré dans une stratégie à l’aide de la fonction De retrait . Cette fonction est disponible dans le compositeur de règles d’entreprise en tant qu’élément de vocabulaire Functions : faites glisser la classe (pas l’assembly ou la méthode) dans le paramètre De retrait .

Remarque

Si vous faites glisser une méthode dans la fonction Retract, le moteur essaie de retirer l’objet renvoyé par cette méthode.

Le retrait 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 retirées de l'ordre du jour, si elles existent.

  • Les actions de l’agenda qui utilisent les objets sont supprimées de celui-ci.

    Remarque

    D’autres actions plus haut dans l’ordre du jour ont peut-être déjà été exécutées avant l’appel de la fonction De retrait .

  • L’objet n’est plus évalué par le moteur.

TypedXmlDocument

Vous pouvez soit retirer le TypedXmlDocument d’origine qui a été inséré dans le moteur, soit retirer l’un des TypedXmlDocument enfants créés à partir d’un nœud du XmlDocument parent.

À l’aide du code XML suivant, vous pouvez soit retirer le TypedXmlDocument associé à l’ordre, soit l’un ou les deux TypedXmlDocuments associés à la ligne de commande.

<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 retirer l'objet de commande, vous devez faire glisser le nœud supérieur du schéma dans le volet de 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 de document) ; il a un sélecteur « / » qui fait référence à l’initial TypedXmlDocument. Lorsque le type TypedXmlDocument parent est retiré, toutes les instances TypedXmlDocument associées au TypedXmlDocument (tous les types TypedXmlDocumentcréés par l’appel de 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 enfant TypedXmlDocument individuel (c’est-à-dire une ligne de commande), vous pouvez faire glisser ce nœud du volet Schémas XML dans la fonction Rétracter. Il est important de noter que tous les types TypedXmlDocumentsont associés au TypedXmlDocument de niveau supérieur qui a été initialement déclaré, et non avec le TypedXmlDocument qui apparaît au-dessus de la hiérarchie de l’arborescence XML. Par exemple, le produit est un TypedXmlDocument en dessous de l’objet orderline ; par conséquent, il serait associé à l’ordre TypedXmlDocument, et non à l’orderline TypedXmlDocument. Dans la plupart des cas, cette distinction n’est pas importante. Toutefois, si vous retirez l'objet de commande, les objets de la ligne de commande et du produit sont également retirés. Si vous retirez l’objet orderline, seul cet objet est retiré, et non l’objet produit.

Le moteur fonctionne uniquement avec et effectue le suivi des instances d’objet (TypedXmlDocuments) qu’il a créées lors de l’assertion initiale de TypedXmlDocument . Si vous créez des nœuds supplémentaires( par exemple, des nœuds frères à un nœud sélectionné par le biais d’un sélecteur dans la stratégie), ces nœuds ne sont pas évalués dans les règles, sauf si les nœuds TypedXmlDocumentsont créés et déclarés pour eux. L’assertion de ces nouveaux TypesdXmlDocuments de niveau inférieur les amène à être évalués dans des règles, mais le TypedXmlDocument de niveau supérieur n’a pas connaissance d’eux. Lorsque le TypedXmlDocument de niveau supérieur est retiré, le nouveau TypedXmlDocumentdéclaré indépendamment 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éasser le xmlDocument complet.

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.

Table de Données Typées

Vous pouvez retirer des TypedDataRow individuels ou l’intégralité de la TypedDataTable. Si vous rétractez une table, toutes les lignes contenues sont retraites 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 de TypedDataRow.Parent.

Comme avec les TypedXmlDocuments, si vous affirmez des TypedDataRows supplé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 TypedDataRows supplémentaires. Seuls les TypedDataRow contenus dans le TypedDataTable lorsque celui-ci a été affirmé sont retirés.

DataConnection

Lorsqu’une DataConnection est retirée, tous les TypesdDataRowrécupérés à partir 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 TypedDataRow ne sera récupéré par le DataConnection (autrement dit, à l’aide du DataConnection dans des prédicats ou actions).

Lors de l'utilisation d'une DataConnection, toute opération de rétractation 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 types TypedDataRowindividuels associés à une DataConnection. Si vous faites glisser la table (à l’aide du paramètre DataConnection ) dans la fonction De retrait , vous retirerez DataConnection.

Voir aussi

Fonctions de contrôle du moteur