Partage via


Créer des créateurs et des extracteurs de faits à utiliser avec des règles et des ensembles de règles (préversion)

S’applique à : Azure Logic Apps (Standard)

Important

Cette fonctionnalité est en préversion et est soumise aux conditions d’utilisation supplémentaires des préversions de Microsoft Azure.

Pour créer des faits pour votre moteur de règles à utiliser pendant le développement et les tests de règles métier, vous pouvez créer un créateur de faits, qui fournit à votre moteur un tableau d’objets .NET. Vous pouvez également créer un extracteur de faits qui insère des faits à long terme ou peu changeants dans vos règles pour l’évaluation pendant l’exécution.

Ce guide pratique montre comment créer un créateur de faits et un extracteur de faits pour votre projet de moteur de règles Azure Logic Apps à utiliser.

Créer un créateur de faits

Pour créer vos instances de faits, implémentez l’interface IFactCreator et ses méthodes, CreateFacts et GetFactTypes. Après avoir généré l’assembly .NET (fichier DLL) pour votre premier créateur de faits, vous pouvez le sélectionner à partir de la fonctionnalité de test d’ensemble de règles dans Microsoft Rules Composer. Pour plus d’informations, consultez Tester les ensembles de règles.

L’exemple suivant montre un exemple d’implémentation de créateur de faits :

public class MyFactCreator : IFactCreator
{
    private object[] myFacts;
    public MyFactCreator()
    {
    }

    public object[] CreateFacts ( RuleSetInfo rulesetInfo )
    {
        myFacts = new object[1];
        myFacts.SetValue(new MySampleBusinessObject(),0);
        return myFacts;
    }

    public Type[] GetFactTypes (RuleSetInfo rulesetInfo)
    {
       return null;
    }
}

Créer un extracteur de faits

Un extracteur de faits est un objet .NET qui implémente des méthodes standard et les utilise généralement pour fournir des faits à long terme et peu changeants au moteur de règles avant que le moteur n’exécute l’ensemble de règles. Le moteur met en cache ces faits et les utilise pendant plusieurs cycles d'exécution. L’extracteur de faits soumet le fait la première fois, puis met à jour le fait en mémoire uniquement si nécessaire. Au lieu de soumettre un fait chaque fois que vous appelez le moteur de règles, créez un extracteur de faits qui soumet le fait la première fois, puis le met à jour dans la mémoire uniquement si nécessaire.

Pour fournir des instances de faits à votre moteur de règles, implémentez l’interface IFactRetriever et la méthode UpdateFacts. Vous pouvez ensuite configurer la version de votre ensemble de règles pour utiliser cette implémentation afin d’apporter des faits au moment de l’exécution. Votre version de l’ensemble de règles appelle ensuite la méthode UpdateFacts à chaque cycle d’exécution.

Si vous le souhaitez, vous pouvez implémenter l’interface IFactRemover sur un composant d’extracteur de faits. Le moteur de règles peut ensuite appeler la méthode nommée UpdateFactsAfterExecution à partir de l’interface IFactRemover lorsque l’ensemble de règles est supprimé. Ainsi, vous pouvez effectuer des tâches post-exécution, telles que la validation des modifications de base de données ou le retrait d’instances d’objet de la mémoire de travail du moteur de règles.

Vous pouvez concevoir votre extracteur de faits avec la logique spécifique à l’application requise pour effectuer les tâches suivantes :

  1. Vous connecter aux sources de données requises.

  2. Déclarer les données comme faits à long terme dans le moteur.

  3. Spécifier la logique permettant d’actualiser ou d’affirmer de nouvelles instances de faits à long terme dans le moteur.

    Le moteur utilise les valeurs initialement déclarées et mises en cache sur les cycles d’exécution suivants tant que ces valeurs ne sont pas mises à jour.

L’implémentation d’extracteur de faits retourne un objet analogue à un jeton que l’extracteur peut utiliser avec l’objet factsHandleIn afin de déterminer s’il faut mettre à jour les faits existants ou déclarer de nouveaux faits. Lorsqu’une version d’ensemble de règles appelle l’extracteur de faits pour la première fois, l’objet factsHandleIn est toujours défini sur une valeur nulle, mais il prend la valeur de l’objet retourné une fois l’exécution de l’extracteur de faits terminée.

L'exemple de code suivant montre comment déclarer les faits .NET et XML en utilisant une implémentation d’extracteur de faits :

using System;
using System.Xml;
using System.Collections;
using Microsoft.Azure.Workflows.RuleEngine;
using System.IO;
using System.Data;
using System.Data.SqlClient;
namespace MyApplication.FactRetriever
{
    public class myFactRetriever:IFactRetriever
    {
        public object UpdateFacts(RuleSetInfo rulesetInfo, RuleEngine engine, object factsHandleIn)
        {
            object factsHandleOut;
            if (factsHandleIn == null)
            {
                // Create .NET object instances.
                bookInstance = new Book();
                magazineInstance = new Magazine();

                // Create XML object instance.
                XmlDocument xd = new XmlDocument();

                // Load the XML document.
                xd.Load(@"..\myXMLInstance.xml");

                // Create and instantiate a TypedXmlDocument class instance.
                TypedXmlDocument doc = new TypedXmlDocument("mySchema",xd1);

                engine.Assert(bookInstance);
                engine.Assert(magazineInstance);
                engine.Assert(doc);
                factsHandleOut = doc;
            }
            else
                factsHandleOut = factsHandleIn;
                return factsHandleOut;
        }
    }
}

Pour inclure les fonctionnalités suivantes, écrivez votre propre implémentation de code :

  • Déterminez quand mettre à jour les faits à long terme.

  • Identifiez quelle instance du moteur de règles utilise quels faits à long terme.

Spécifier un extracteur de faits pour un ensemble de règles

Pour configurer l’extracteur de faits pour la version de votre ensemble de règles, vous pouvez soit définir la propriété Fact Retriever dans Microsoft Rules Composer, soit écrire votre propre code, comme indiqué dans l’exemple suivant, qui utilise une classe nommée « MyFactRetriever » dans l’assembly nommé « MyAssembly » :

RuleEngineComponentConfiguration fr = new RuleEngineComponentConfiguration("MyAssembly", "MyFactRetriever");
RuleSet rs = new RuleSet("ruleset");

// Associate the execution configuration with a ruleset version.
RuleSetExecutionConfiguration rsCfg = rs.ExecutionConfiguration;
rsCfg.FactRetriever = factRetriever;

Remarque

Si vous utilisez un nom d’assembly générique simple, tel que « MyAssembly », comme premier paramètre pour le constructeur RuleEngineComponentConfiguration, le moteur de règles recherche l’assembly dans le dossier d’application.