Feitenmakers en -retrievers bouwen voor gebruik met regels en regelsets (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.
Als u feiten wilt maken voor uw regelengine die moet worden gebruikt tijdens het ontwikkelen en testen van bedrijfsregels, kunt u een maker van feiten bouwen, die uw engine een matrix van .NET-objecten biedt. U kunt ook een fact retriever bouwen die tijdens de uitvoering gegevens op lange termijn invoegt of langzaam wijzigt in uw regels voor evaluatie.
In deze instructiegids ziet u hoe u een maker en fact retriever bouwt voor uw Azure Logic Apps Rules Engine-project dat u kunt gebruiken.
Een maker van feiten bouwen
Als u uw feitenexemplaren wilt maken, implementeert u de IFactCreator-interface en de bijbehorende methoden, CreateFacts en GetFactTypes. Nadat u het .NET Assembly-bestand (DLL-bestand) voor uw eerste maker hebt gemaakt, kunt u de assembly selecteren in de testfunctie voor regelset in Microsoft Rules Composer. Zie Testregelsets voor meer informatie.
In het volgende voorbeeld ziet u een voorbeeld van een implementatie van een maker van feiten:
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;
}
}
Een fact retriever bouwen
Een fact retriever is een .NET-object dat standaardmethoden implementeert en deze doorgaans gebruikt voor het leveren van langdurige en langzaam veranderende feiten in de regelengine voordat de engine de regelset uitvoert. De engine slaat deze feiten op in de cache en gebruikt deze in meerdere uitvoeringscycli. De fact retriever verzendt het feit de eerste keer en werkt vervolgens het feit alleen in het geheugen bij wanneer dat nodig is. In plaats van telkens wanneer u de regelengine aanroept een feit in te dienen, maakt u een fact retriever die het feit de eerste keer verzendt en werkt u het feit vervolgens alleen bij in het geheugen wanneer dat nodig is.
Als u feitenexemplaren wilt leveren aan uw regelengine, implementeert u de IFactRetriever-interface en de UpdateFacts-methode . Vervolgens kunt u de versie van uw regelset instellen om deze implementatie te gebruiken om tijdens runtime feiten in te voeren. De versie van de regelset roept vervolgens de UpdateFacts-methode aan bij elke uitvoeringscyclus.
U kunt desgewenst de IFactRemover-interface implementeren op een fact retriever-onderdeel. De regelengine kan vervolgens de methode UpdateFactsAfterExecution aanroepen vanuit de IFactRemover-interface wanneer de regelset wordt verwijderd. Op die manier kunt u elk werk na de uitvoering uitvoeren, zoals het doorvoeren van databasewijzigingen of het intrekken van objectexemplaren uit het werkgeheugen van de regelengine.
U kunt uw fact retriever ontwerpen met de vereiste toepassingsspecifieke logica om de volgende taken uit te voeren:
Maak verbinding met de vereiste gegevensbronnen.
Bevestig de gegevens als gegevens op lange termijn in de engine.
Geef de logica op voor het vernieuwen of bevestigen van nieuwe instanties van feiten op lange termijn in de engine.
De engine maakt gebruik van de in eerste instantie bevestigde en in de cache opgeslagen waarden voor volgende uitvoeringscycli totdat deze waarden worden bijgewerkt.
De implementatie van de fact retriever retourneert een object dat vergelijkbaar is met een token dat de retriever kan gebruiken met het object factsHandleIn om te bepalen of bestaande feiten moeten worden bijgewerkt of nieuwe feiten moeten worden assertie. Wanneer een regelsetversie de fact retriever voor de eerste keer aanroept, wordt het object factsHandleIn altijd ingesteld op null, maar wordt de waarde van het retourobject ingeschakeld nadat de fact retriever de uitvoering heeft voltooid.
In de volgende voorbeeldcode ziet u hoe u .NET- en XML-feiten kunt asserteren met behulp van een implementatie van een fact retriever:
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;
}
}
}
Als u de volgende mogelijkheden wilt opnemen, schrijft u uw eigen code-implementatie:
Bepaal wanneer de gegevens op lange termijn moeten worden bijgewerkt.
Bijhouden welke instantie van de regelengine de gegevens op lange termijn gebruikt.
Een fact retriever voor een regelset opgeven
Als u een fact retriever wilt instellen voor uw regelsetversie, kunt u de eigenschap Fact Retriever instellen in de Microsoft Rules Composer of uw eigen code schrijven, zoals wordt weergegeven in het volgende voorbeeld, waarbij een klasse met de naam 'MyFactRetriever' wordt gebruikt in de assembly met de naam '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;
Notitie
Als u een eenvoudige algemene assemblynaam gebruikt, zoals 'MyAssembly', als de eerste parameter voor de RuleEngineComponentConfiguration-constructor , zoekt de regelengine naar de assembly in de toepassingsmap.