Dela via


Utföra avancerade uppgifter på regeluppsättningar med Microsoft Rules Composer (förhandsversion)

Gäller för: Azure Logic Apps (Standard)

Viktigt!

Den här funktionen är i förhandsversion och omfattas av kompletterande användningsvillkor för Förhandsversioner av Microsoft Azure.

Den här guiden beskriver mer avancerade åtgärder som du kan utföra på regeluppsättningar i Microsoft Rules Composer.

Förutsättningar

  • Ladda ned och installera Microsoft Rules Composer.

  • XML-filen som innehåller den regeluppsättning som du vill arbeta med.

Kopiera en regeluppsättningsversion

Du kan skapa en kopia av en befintlig regeluppsättningsversion men med ett annat versionsnummer.

  1. Öppna Microsoft Rules Composer. I fönstret RuleSet Explorer öppnar du regeluppsättningsversionens snabbmeny och väljer Kopiera.

  2. Öppna regeluppsättningens snabbmeny och välj Klistra in RegelUppsättningsversion.

    Microsoft Rules Composer skapar en ny regeluppsättningsversion med samma element som den kopierade versionen men med ett annat tal.

    Kommentar

    Om du uppdaterar .NET-sammansättningen som används för att ge fakta till regeluppsättningen måste du uppdatera regeluppsättningsversionens referenser till den sammansättningen. Mer information finns i Uppdatera .NET-sammansättningsreferenser.

Skapa en tom regeluppsättningsversion

När du har lagt till regler i en regeluppsättningsversion kan du skapa en ny tom regeluppsättningsversion med ett annat nummer och spara den versionen så att du kan arbeta med senare.

  1. Öppna Microsoft Rules Composer. På regeluppsättningens snabbmeny väljer du Lägg till ny version.

    Microsoft Rules Composer skapar en ny tom regeluppsättningsversion med ett annat nummer.

  2. Öppna den nya regeluppsättningsversionens snabbmeny och välj Spara.

Nu kan du kopiera regler från andra regeluppsättningsversioner och klistra in dem i den nya versionen.

Skicka faktatyper till en regeluppsättning

Även om du inte direkt kan ange en returtyp för en regeluppsättning kan du skicka någon av följande typer av fakta till regeluppsättningen, låta regeluppsättningen ändra värdet för fakta till true eller falseoch sedan kontrollera värdet för egenskapen eller elementet/kolumnen när regeluppsättningen har körts:

  • Ett .NET-objekt som har en egenskap med Boolean typen
  • Ett XML-dokument som har ett element med Boolean typ

Konfigurera en faktahämtning för en regeluppsättning

När du använder en faktahämtare med regeluppsättningen kan du lagra fakta som inte ofta ändras så att det före värdprogrammets första körningscykel. På så sätt kan du hämta dessa fakta från lagringen, presentera dem en gång för regelmotorn för cachelagring och återanvända dem under flera körningscykler. Mer information finns i Skapa faktaskapare och hämtningar.

Du har två sätt att associera en faktahämtare med en regeluppsättning:

  • Välj en faktahämtare manuellt för en regeluppsättningsversion i Microsoft Rules Composer.

  • Programmatiskt med hjälp av objektet RuleSetExecutionConfiguration .

Kommentar

Du kan bara associera en implementering av faktahämtning med en regeluppsättningsversion.

Välj en faktahämtare manuellt för en regeluppsättning

  1. Öppna Microsoft Rules Composer. I RuleSet Explorer väljer du den regeluppsättningsversion som du vill associera med faktahämtningen.

  2. I fönstret Egenskaper väljer du egenskapen FactRetriever och väljer sedan ellipsknappen (...) för att hitta och välja ett befintligt faktaåterhämtningsobjekt.

    Kommentar

    Ellipsknappen (...) visas inte förrän du väljer raden FactRetriever i fönstret Egenskaper.

Anropa en underordnad regeluppsättning från en överordnad regeluppsättning

Använd någon av följande metoder för den här uppgiften:

  • Ruleset.Execute Anropa metoden direkt från den överordnade regeluppsättningen.

  • Från den överordnade regeluppsättningen anropar du en metod för en .NET-hjälpkomponent som omsluter Ruleset.Execute metoden.

    Med den andra metoden kan du lägga till kod för förbearbetning och efterbearbetning i Ruleset.Execute metoden. Du kan till exempel skapa alla fakta som krävs från den underordnade regeluppsättningen i den här omslutningsmetoden. Följande avsnitt innehåller ett exempel för varje metod.

Anropa metoden Ruleset.Execute direkt från den överordnade regeluppsättningen

Det här avsnittet innehåller övergripande steg för att anropa den underordnade regeluppsättningen direkt från den överordnade regeluppsättningen Ruleset.Execute med hjälp av metoden . Följande procedur visar stegen för att lägga Ruleset.Execute till metoden som en åtgärd i den överordnade regeluppsättningen som skickar ett XML-dokument som ett faktum till den underordnade regeluppsättningen.

Kommentar

I det här exempelscenariot skickas ett XML-dokument som ett faktum till den överordnade regeluppsättningen. Det här dokumentet skickas som ett faktum till den underordnade regeluppsättningen. Du kan dock anropa en .NET-metod som skapar fakta för den underordnade regeluppsättningen i stället.

  1. Öppna Microsoft Rules Composer. I fönstret Faktautforskaren väljer du fliken .NET-klasser .

  2. Öppna snabbmenyn för .NET-sammansättningar och välj Bläddra.

  3. I listan .NET-sammansättningar väljer du Microsoft.RuleEngine och sedan OK.

  4. Expandera Regeluppsättning och dra antingen Execute(Object facts) eller Execute(Object facts, IRuleSetTrackingInterceptor trackingInterceptor) till fönstret THEN .

  5. Välj noden XML-scheman, öppna snabbmenyn för Scheman och välj Bläddra.

  6. Välj schemat för DET XML-dokument som du vill skicka som ett fakta och välj sedan Öppna.

  7. Om du vill skicka XML-dokumentet som skickas till den överordnade regeluppsättningen som ett faktum till den underordnade regeluppsättningen drar du <schema-name.xsd> till det första argumentet i metoden Ruleset.Execute.

  8. Om du använder metoden Execute som inte tar IRuleSetTrackingInterceptor som det andra argumentet hoppar du över följande steg.

  9. Välj fliken .NET-klasser och dra DebugTrackingInterceptor i Microsoft.RuleEngine till det andra argumentet i metoden Ruleset.Execute.

    Kommentar

    Om du utför den här åtgärden måste klienten skicka en instans av klassen DebugTrackingInterceptor som ett faktum till den överordnade regeluppsättningen, som sedan skickar instansen som ett faktum till den underordnade regeluppsättningen. I stället kan du dra konstruktorn för klassen DebugTrackingInterceptor så att instansen skapas automatiskt åt dig.

Ändra klientprogrammet som anropar den överordnade regeluppsättningen

Klienten som anropar den överordnade regeluppsättningen skapar en instans av klassen Ruleset med namnet på den underordnade regeluppsättningen som en parameter och skickar den instansen som ett faktum till den överordnade regeluppsättningen tillsammans med andra fakta. Följande exempelkod illustrerar den här åtgärden:

DebugTrackingInterceptor dti = new DebugTrackingInterceptor("RulesetTracking.txt");
Ruleset Ruleset = new Ruleset("ParentRuleset");
object[] facts = new object[3];
facts[0] = txd;
facts[1] = new Ruleset("ChildRuleset");
facts[2] = new DebugTrackingInterceptor("RulesetTracking2.txt");
Ruleset.Execute(facts, dti);
Ruleset.Dispose();

Om klienten är en BizTalk-orkestrering kan du behöva placera koden i en uttrycksform för att skapa fakta och sedan skicka fakta som parametrar till formen Samtalsregler .

Anropa en .NET-omslutningsmetod från den överordnade regeluppsättningen

I det här avsnittet beskrivs de övergripande stegen för att anropa en .NET-metod som omsluter anropet till metoden Ruleset.Execute från den överordnade regeluppsättningen.

Skapa verktygets .NET-klass

  1. Skapa ett .NET-klassbiblioteksprojekt. Lägg till en klass i projektet.

  2. Lägg till en statisk metod som anropar Ruleset.Execute metoden för att anropa regeluppsättningen vars namn skickas som en parameter, till exempel som följande exempelkod visar:

    public static void Execute(string RulesetName, TypedXmlDocument txd)
    {
        DebugTrackingInterceptor dti = new   DebugTrackingInterceptor("RulesetTracking.txt");
        Ruleset Ruleset = new Ruleset("ParentRuleset");
        object[] facts = new object[3];
        facts[0] = txd;
        facts[1] = new Ruleset("ChildRuleset");
        facts[2] = new DebugTrackingInterceptor("RulesetTracking2.txt");
        Ruleset.Execute(facts, dti);
        Ruleset.Dispose();
    }
    

    Klienten anropar den överordnade regeluppsättningen och den överordnade regeluppsättningen anropar hjälpmetoden som anropar den underordnade regeluppsättningen, till exempel som följande exempelkod för klienten visar:

    facts[0] = txd;
    facts[1] = new RulesetExecutor(txd);
    
    // Call the first or parent ruleset.
    Ruleset Ruleset = new Ruleset(RulesetName);
    DebugTrackingInterceptor dti = new DebugTrackingInterceptor("RulesetTracking.txt");
    Ruleset.Execute(facts, dti);
    Ruleset.Dispose();
    

    Kommentar

    Om metoden är en instansmetod måste klienten skapa en instans av .NET-klassen för hjälpen och skicka den instansen som ett faktum till den överordnade regeluppsättningen.

Analysera flera objekt med samma typ i en regel

I många scenarier skriver du en affärsregel mot en typ och förväntar dig att motorn analyserar och agerar separat på varje instans av den typ som anges i motorn. Men i vissa scenarier vill du att motorn ska analysera flera instanser som har samma typ samtidigt. Följande exempelregel använder till exempel flera instanser av klassen FamilyMember :

IF FamilyMember.Role == Father
AND FamilyMember.Role == Son
AND FamilyMember.Surname == FamilyMember.Surname
THEN FamilyMember.AddChild(FamilyMember)

Regeln identifierar flera FamilyMember-instanser där en är en Far och en annan är en Son. Om instanserna är relaterade med efternamn lägger regeln till Son-instansen till en samling barn i Fader-instansen. Om motorn analyserar varje FamilyMember-instans separat utlöses aldrig regeln eftersom FamilyMember i det här scenariot bara har en roll, antingen Fader eller Son.

I det här scenariot måste du därför ange att motorn analyserar flera instanser tillsammans i regeln, och du behöver ett sätt att särskilja identiteten för varje instans i regeln. Du kan använda fältet Instans-ID för att tillhandahålla den här funktionen. Det här fältet är tillgängligt i fönstret Egenskaper när du väljer ett faktum i Faktautforskaren.

Viktigt!

Om du väljer att använda fältet Instans-ID kontrollerar du att du ändrar dess värde innan du drar ett faktum eller en medlem till en regel.

När du använder fältet Instans-ID återskapas regeln. För de regelargument som använder Son-instansen av klassen FamilyMember ändrar du instans-ID-värdet från standardvärdet 0 till 1. När du ändrar instans-ID-värdet från 0 och du drar fakta eller medlem till regelredigeraren visas instans-ID-värdet i regeln som följer klassen, till exempel:

IF FamilyMember.Role == Father
AND FamilyMember(1).Role== Son
AND FamilyMember.Surname == FamilyMember(1).Surname
THEN FamilyMember.AddChild(FamilyMember(1))

Anta nu att en Fader-instans och en Son-instans hävdas i motorn. Motorn utvärderar regeln mot de olika kombinationerna av dessa instanser. Förutsatt att instansen Far och Son har samma efternamn läggs Son-instansen till i Fader-instansen som förväntat.

Kommentar

Fältet Instans-ID används endast inom ramen för en specifik regelutvärdering. Det här fältet fästs inte på en objektinstans i regeluppsättningskörningen och är inte relaterat till den ordning som används för att kontrollera objekt. Varje objektinstans utvärderas i alla regelargument för den typen.