Geavanceerde taken uitvoeren op regelsets met de Microsoft Rules Composer (preview)
Van toepassing op: Azure Logic Apps (Standard)
Belangrijk
Deze mogelijkheid is in preview en is onderworpen aan de aanvullende gebruiksvoorwaarden voor Microsoft Azure Previews.
In deze handleiding worden geavanceerdere bewerkingen beschreven die u kunt uitvoeren op regelsets in de Microsoft Rules Composer.
Vereisten
Download en installeer de Microsoft Rules Composer.
Het XML-bestand met de regelset waaraan u wilt werken.
Een regelsetversie kopiëren
U kunt een kopie van een bestaande regelsetversie maken, maar met een ander versienummer.
Open de Microsoft Rules Composer. Open in het venster RuleSet Explorer het snelmenu van de regelsetversie en selecteer Kopiëren.
Open het snelmenu van de regelset en selecteer De versie van RuleSet plakken.
De Microsoft Rules Composer maakt een nieuwe regelsetversie met dezelfde elementen als de gekopieerde versie, maar met een ander nummer.
Notitie
Als u de .NET-assembly bijwerkt die wordt gebruikt om feiten voor uw regelset op te geven, moet u de verwijzingen van de regelsetversie naar die assembly bijwerken. Zie .NET-assemblyverwijzingen bijwerken voor meer informatie.
Een lege regelsetversie maken
Nadat u regels aan een regelsetversie hebt toegevoegd, kunt u een nieuwe lege regelsetversie met een ander nummer maken en deze versie opslaan om later aan te werken.
Open de Microsoft Rules Composer. Selecteer Nieuwe versie toevoegen in het snelmenu van de regelset.
De Microsoft Rules Composer maakt een nieuwe lege regelsetversie met een ander nummer.
Open het snelmenu van de nieuwe regelsetversie en selecteer Opslaan.
U kunt nu regels kopiëren uit andere regelsetversies en deze in de nieuwe versie plakken.
Feitentypen doorgeven aan een regelset
Hoewel u een retourtype voor een regelset niet rechtstreeks kunt opgeven, kunt u een van de volgende typen feiten doorgeven aan de regelset, de regelset de waarde van het feit true
laten wijzigen in of false
, en vervolgens de waarde van de eigenschap of element/kolom controleren nadat de regelset is uitgevoerd:
- Een .NET-object met een eigenschap met
Boolean
type - Een XML-document met een element met
Boolean
type
Een fact retriever instellen voor een regelset
Wanneer u een feiten ophalen gebruikt met uw regelset, kunt u feiten opslaan die niet vaak veranderen, zodat deze vóór de eerste uitvoeringscyclus van uw hosttoepassing worden uitgevoerd. Op die manier kunt u deze feiten ophalen uit de opslag, ze eenmaal presenteren aan de regelengine voor caching en deze opnieuw gebruiken via meerdere uitvoeringscycli. Zie Makers en retrievers bouwen voor meer informatie.
U kunt een fact retriever op twee manieren koppelen aan een regelset:
Selecteer handmatig een fact retriever voor een regelsetversie in de Microsoft Rules Composer.
Programmatisch met behulp van het
RuleSetExecutionConfiguration
object.
Notitie
U kunt slechts één implementatie van een fact retriever koppelen aan een regelsetversie.
Handmatig een fact retriever voor een regelset selecteren
Open de Microsoft Rules Composer. Selecteer in RuleSet Explorer de regelsetversie die u wilt koppelen aan de fact retriever.
Selecteer in het venster Eigenschappen de eigenschapsrij FactRetriever en selecteer vervolgens de knop met het beletselteken (...) om een bestaand object voor het ophalen van feiten te zoeken en te selecteren.
Notitie
De knop met het beletselteken (...) wordt pas weergegeven als u de rij FactRetriever selecteert in het venster Eigenschappen .
Een onderliggende regelset aanroepen vanuit een bovenliggende regelset
Gebruik voor deze taak een van de volgende methoden:
Roep de
Ruleset.Execute
methode rechtstreeks aan vanuit de bovenliggende regelset.Roep vanuit de bovenliggende regelset een methode aan van een .NET-helperonderdeel waarmee de
Ruleset.Execute
methode wordt verpakt.Met de tweede methode kunt u voorverwerkings- en postverwerkingscode toevoegen aan de
Ruleset.Execute
methode. U kunt bijvoorbeeld alle feiten maken die vereist zijn op basis van de onderliggende regelset in deze wrapper-methode. De volgende secties bevatten een voorbeeld voor elke methode.
Roep de methode Ruleset.Execute rechtstreeks aan vanuit de bovenliggende regelset
Deze sectie bevat stappen op hoog niveau om de onderliggende regelset rechtstreeks vanuit de bovenliggende regelset aan te roepen met behulp van de Ruleset.Execute
methode. In de volgende procedure ziet u de stappen voor het toevoegen van de Ruleset.Execute
methode als een actie aan de bovenliggende regelset die een XML-document als een feit doorgeeft aan de onderliggende regelset.
Notitie
In dit voorbeeldscenario wordt een XML-document als een feit verzonden naar de bovenliggende regelset. Dit document wordt doorgegeven als een feit aan de onderliggende regelset. U kunt echter een .NET-methode aanroepen waarmee de feiten voor de onderliggende regelset worden gemaakt.
Open de Microsoft Rules Composer. Selecteer in het venster Feitenverkenner het tabblad .NET-klassen .
Open het snelmenu voor .NET-assembly's en selecteer Bladeren.
Selecteer Microsoft.RuleEngine in de lijst .NET-assembly's en selecteer vervolgens OK.
Vouw regelset uit en sleep Execute(Object facts) of Execute(Object facts, IRuleSetTrackingInterceptor trackingInterceptor) naar het deelvenster THEN .
Selecteer het knooppunt XML-schema's , open het snelmenu voor Schema's en selecteer Bladeren.
Selecteer het schema voor het XML-document dat u als feit wilt doorgeven en selecteer vervolgens Openen.
Als u het XML-document wilt doorgeven dat als een feit aan de onderliggende regelset wordt doorgegeven aan de bovenliggende regelset, sleept <u schema-name.xsd> naar het eerste argument in de methode Ruleset.Execute.
Als u de methode Execute gebruikt die IRuleSetTrackingInterceptor niet als tweede argument uitvoert, slaat u de volgende stappen over.
Selecteer het tabblad .NET-klassen en sleep DebugTrackingInterceptor in Microsoft.RuleEngine naar het tweede argument van de methode Ruleset.Execute .
Notitie
Als u deze actie uitvoert, moet de client een exemplaar van de klasse DebugTrackingInterceptor doorgeven als een feit aan de bovenliggende regelset, die het exemplaar vervolgens doorgeeft als een feit aan de onderliggende regelset. In plaats daarvan kunt u de constructor van de klasse DebugTrackingInterceptor slepen, zodat het exemplaar automatisch voor u wordt gemaakt.
De clienttoepassing wijzigen die de bovenliggende regelset aanroept
De client die de bovenliggende regelset aanroept, maakt een exemplaar van de klasse Ruleset met de naam van de onderliggende regelset als parameter en geeft dat exemplaar als een feit door aan de bovenliggende regelset samen met andere feiten. De volgende voorbeeldcode illustreert deze actie:
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();
Als de client een BizTalk-indeling is, moet u de code mogelijk in een expressievorm plaatsen om feiten te maken en de feiten vervolgens als parameters doorgeven aan de shape Regels aanroepen.
Een .NET-wrappermethode aanroepen vanuit de bovenliggende regelset
Deze sectie bevat de stappen op hoog niveau voor het aanroepen van een .NET-methode waarmee de aanroep naar de methode Ruleset.Execute vanuit de bovenliggende regelset wordt verpakt.
De .NET-klasse van het hulpprogramma maken
Maak een .NET-klassebibliotheekproject. Voeg een klasse toe aan het project.
Voeg een statische methode toe waarmee de
Ruleset.Execute
methode wordt aangeroepen om de regelset aan te roepen waarvan de naam wordt doorgegeven als een parameter, bijvoorbeeld zoals in de volgende voorbeeldcode wordt weergegeven: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(); }
De client roept de bovenliggende regelset aan en de bovenliggende regelset roept de helpermethode aan die de onderliggende regelset aanroept, bijvoorbeeld als de volgende voorbeeldcode voor de client laat zien:
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();
Notitie
Als de methode een instantiemethode is, moet de client een exemplaar van de .NET-klasse helper maken en dat exemplaar doorgeven als een feit aan de bovenliggende regelset.
Meerdere objecten analyseren met hetzelfde type in een regel
In veel scenario's schrijft u een bedrijfsregel op basis van een type en verwacht dat de engine afzonderlijk analyseert en reageert op elk exemplaar van het type dat in de engine wordt toegepast. In sommige scenario's wilt u echter dat de engine meerdere exemplaren met hetzelfde type tegelijk analyseert. De volgende voorbeeldregel maakt bijvoorbeeld gebruik van meerdere exemplaren van de klasse FamilyMember :
IF FamilyMember.Role == Father
AND FamilyMember.Role == Son
AND FamilyMember.Surname == FamilyMember.Surname
THEN FamilyMember.AddChild(FamilyMember)
De regel identificeert meerdere FamilyMember-exemplaren waarbij een vader en een andere een zoon is. Als de instanties zijn gerelateerd aan de achternaam, voegt de regel het Exemplaar van de Zoon toe aan een verzameling kinderen op het vaderexemplaren . Als de engine elk FamilyMember-exemplaar afzonderlijk analyseert, wordt de regel nooit geactiveerd, omdat in dit scenario de FamilyMember slechts één rol heeft: Vader of Zoon.
In dit scenario moet u dus aangeven dat de engine meerdere exemplaren samen in de regel analyseert en u een manier nodig hebt om de identiteit van elk exemplaar in de regel te onderscheiden. U kunt het veld Exemplaar-id gebruiken om deze functionaliteit te bieden. Dit veld is beschikbaar in het venster Eigenschappen wanneer u een feit selecteert in feitenverkenner.
Belangrijk
Als u ervoor kiest om het veld Exemplaar-id te gebruiken, moet u ervoor zorgen dat u de waarde ervan wijzigt voordat u een feit of lid naar een regel sleept.
Wanneer u het veld Exemplaar-id gebruikt, wordt de regel opnieuw opgebouwd. Voor deze regelargumenten die gebruikmaken van het Son-exemplaar van de klasse FamilyMember , wijzigt u de waarde exemplaar-id van de standaardwaarde van 0 in 1. Wanneer u de waarde van de instantie-id wijzigt van 0 en u het feit of lid naar de regeleditor sleept, wordt de waarde exemplaar-id weergegeven in de regel die volgt op de klasse, bijvoorbeeld:
IF FamilyMember.Role == Father
AND FamilyMember(1).Role== Son
AND FamilyMember.Surname == FamilyMember(1).Surname
THEN FamilyMember.AddChild(FamilyMember(1))
Stel nu dat een vaderexemplaren en een Zoon-instantie in de engine worden opgenomen. De engine evalueert de regel op basis van de verschillende combinaties van deze exemplaren. Ervan uitgaande dat de instantie van Vader en Zoon dezelfde achternaam hebben, wordt de instantie van de Zoon zoals verwacht toegevoegd aan het vaderexemplaren.
Notitie
Het veld Exemplaar-id wordt alleen gebruikt binnen de context van een specifieke regelevaluatie. Dit veld wordt niet aangebracht aan een objectexemplaren in de uitvoering van de regelset en is niet gerelateerd aan de volgorde die wordt gebruikt voor het asserteren van objecten. Elk objectexemplaren wordt geëvalueerd in alle regelargumenten voor dat type.