Appel d'une stratégie à partir d'une autre
Vous pouvez appeler une stratégie (enfant) à partir d'une autre stratégie (parent) à l'aide de l'une des méthodes suivantes :
Appel de la méthode Policy.Execute directement à partir de la stratégie parente
Appel d’une méthode d’un composant .NET d’assistance qui encapsule la méthode Policy.Execute à partir de la stratégie parente
L’avantage de l’utilisation de la deuxième méthode est que vous pouvez ajouter du code de prétraitement et de post-traitement à la méthode Policy.Execute . Par exemple, vous pouvez créer les faits requis à partir de la stratégie enfant de cette méthode de wrapper. Les sections suivantes fournissent un exemple pour chaque méthode.
Appel de la méthode Policy.Execute directement à partir de la stratégie parent
Cette section présente les étapes générales permettant d’appeler la stratégie enfant à partir de la stratégie parente directement à l’aide de la méthode Policy.Execute .
Ajout de l'action Policy.Execute à la stratégie parent
La procédure suivante comporte des étapes permettant d’ajouter la méthode Policy.Execute en tant qu’action à la stratégie parente qui transmet un document XML en tant que fait à la stratégie enfant.
Pour ajouter la méthode Policy.Execute en tant qu'action à une stratégie
Dans la fenêtre Faits Explorer, cliquez sur l’onglet Classes .NET.
Cliquez avec le bouton droit sur Assemblys .NET, puis cliquez sur Parcourir.
Sélectionnez Microsoft.RuleEngine dans la liste Assemblys .NET , puis cliquez sur OK.
Développez Stratégie.
Faites glisser Execute(Object facts) ou Execute(Object facts, IRuleSetTrackingInterceptor trackingInterceptor) vers le volet THEN.
Cliquez sur le nœud Schémas XML .
Notes
Dans cet exemple de scénario, un document XML qui est envoyé en tant que fait à la stratégie parent l'est également à la stratégie enfant. Vous pouvez à la place appeler une méthode .NET qui crée les faits pour la stratégie enfant.
Cliquez avec le bouton droit sur Schémas, puis cliquez sur Parcourir.
Sélectionnez le schéma du document XML que vous souhaitez transmettre en tant que fait, puis cliquez sur Ouvrir.
Faites glisser <Schema name.xsd> vers le premier argument de la méthode Policy.Execute pour passer le document XML qui est passé à la stratégie parente en tant que fait à la stratégie enfant.
Si vous utilisez la méthode Execute qui n’utilise pas IRuleSetTrackingInterceptor comme deuxième argument, ignorez les étapes suivantes.
Cliquez sur l’onglet Classes .NET .
Faites glisser DebugTrackingInterceptor dans Microsoft.RuleEngine vers le deuxième argument de la méthode Policy.Execute .
Notes
Si vous effectuez cette action, le client doit passer un instance de la classe DebugTrackingInterceptor en tant que fait à la stratégie parente, qui à son tour transmet le instance en tant que fait à la stratégie enfant. Au lieu de cela, vous pouvez faire glisser le constructeur de la classe DebugTrackingInterceptor afin que le instance soit automatiquement créé pour vous.
Modification de l'application client appelant la stratégie parent
Le client qui appelle la stratégie parente crée un instance de la classe Policy avec le nom de stratégie enfant en tant que paramètre et le transmet en tant que fait à la stratégie parente avec d’autres faits. L'exemple de code suivant illustre cette action :
DebugTrackingInterceptor dti = new DebugTrackingInterceptor("PolicyTracking.txt");
Policy policy = new Policy("ParentPolicy");
object[] facts = new object[3];
facts[0] = txd;
facts[1] = new Policy("ChildPolicy");
facts[2] = new DebugTrackingInterceptor("PolicyTracking2.txt");
policy.Execute(facts, dti);
policy.Dispose();
Si le client est une orchestration BizTalk, vous devrez peut-être placer le code pour créer des faits dans une forme Expression , puis passer les faits en tant que paramètres à la forme Règles d’appel .
Appel d'une méthode de wrapper .NET à partir de la stratégie parent
Cette section présente les étapes générales pour appeler une méthode .NET qui encapsule l’appel à la méthode Policy.Execute à partir de la stratégie parente.
Création de la classe d'utilitaire .NET
Pour créer la classe d'utilitaire
Créez un projet de bibliothèque de classes .NET, puis ajoutez une classe à celui-ci.
Ajoutez une méthode statique qui appelle la méthode Policy.Execute pour appeler la stratégie dont le nom est passé en tant que paramètre, comme indiqué dans l’exemple de code suivant :
public static void Execute(string policyName, TypedXmlDocument txd) { DebugTrackingInterceptor dti = new DebugTrackingInterceptor("PolicyTracking.txt"); Policy policy = new Policy("ParentPolicy"); object[] facts = new object[3]; facts[0] = txd; facts[1] = new Policy("ChildPolicy"); facts[2] = new DebugTrackingInterceptor("PolicyTracking2.txt"); policy.Execute(facts, dti); policy.Dispose(); }
Vérifiez que la clé de Registre StaticSupport est définie sur 1 ou 2. Pour plus d’informations sur la clé de Registre, consultez Appel de membres statiques d’une classe.
Notes
Vous pouvez utiliser une méthode d'instance à la place d'une méthode statique. Si vous utilisez une méthode d'instance, souvenez-vous que le client doit envoyer une instance de la classe d'assistance .NET en tant que fait à la stratégie parent.
Modification de l'application client
Le client appelle la stratégie parent, et celle-ci appelle la méthode d'assistance qui a sont tour appelle la stratégie enfant. L'exemple de code pour le client se présente comme suit :
facts[0] = txd;
facts[1] = new PolicyExecutor(txd);
//call the first or parent policy
Policy policy = new Policy(policyName);
DebugTrackingInterceptor dti = new DebugTrackingInterceptor("PolicyTracking.txt");
policy.Execute(facts, dti);
policy.Dispose();
Notes
Si vous utilisez une méthode d'instance, le client doit créer une instance de la classe d'assistance .NET et l'envoyer en tant que fait à la stratégie parent.
Notes
Si le client est une orchestration BizTalk, vous devrez peut-être placer le code pour créer des faits dans une forme Expression , puis passer les faits en tant que paramètres à la forme Règles d’appel .