Skapa faktaskapare och hämtningar som ska användas med regler och regeluppsättningar (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.
Om du vill skapa fakta som regelmotorn kan använda under utveckling och testning av affärsregler kan du skapa en faktaskapare som ger motorn en matris med .NET-objekt. Du kan också skapa en faktahämtning som infogar långsiktiga eller långsamt ändrade fakta i dina regler för utvärdering under körningen.
Den här instruktionsguiden visar hur du skapar en faktaskapare och faktahämtare för ditt Azure Logic Apps Rules Engine-projekt att använda.
Skapa en faktaskapare
Om du vill skapa dina faktainstanser implementerar du IFactCreator-gränssnittet och dess metoder, CreateFacts och GetFactTypes. När du har skapat .NET-sammansättningen (DLL-filen) för din första faktaskapare kan du välja sammansättningen från funktionen för regeluppsättningstestning i Microsoft Rules Composer. Mer information finns i Testregleruppsättningar.
I följande exempel visas ett exempel på implementering av faktaskapare:
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;
}
}
Skapa en faktahämtning
En faktahämtning är ett .NET-objekt som implementerar standardmetoder och vanligtvis använder dem för att tillhandahålla långsiktiga och långsamt föränderliga fakta till regelmotorn innan motorn kör regeluppsättningen. Motorn cachelagrar dessa fakta och använder dem över flera körningscykler. Faktahämtningen skickar det faktum första gången och uppdaterar sedan det faktum i minnet endast när det behövs. I stället för att skicka ett faktum varje gång du anropar regelmotorn skapar du faktahämtning som skickar det första gången och uppdaterar sedan fakta i minnet endast när det behövs.
Om du vill tillhandahålla faktainstanser till regelmotorn implementerar du gränssnittet IFactRetriever och metoden UpdateFacts . Du kan sedan konfigurera din regeluppsättningsversion för att använda den här implementeringen för att ta in fakta vid körning. Din regeluppsättningsversion anropar sedan metoden UpdateFacts vid varje körningscykel.
Du kan också implementera IFactRemover-gränssnittet på en faktaåterhämtningskomponent. Regelmotorn kan sedan anropa metoden UpdateFactsAfterExecution från IFactRemover-gränssnittet när regeluppsättningen tas bort. På så sätt kan du utföra allt arbete efter körningen, till exempel genom att utföra eventuella databasändringar eller återkalla objektinstanser från regelmotorns arbetsminne.
Du kan utforma faktahämtningen med den programspecifika logik som krävs för att utföra följande uppgifter:
Anslut till de datakällor som krävs.
Bekräfta data som långsiktiga fakta i motorn.
Ange logiken för att uppdatera eller bekräfta nya långsiktiga faktainstanser i motorn.
Motorn använder de initialt bekräftade och cachelagrade värdena på efterföljande körningscykler tills dessa värden uppdateras.
Implementeringen av fact retriever returnerar ett objekt som är analogt med en token som hämtaren kan använda med objektet factsHandleIn för att avgöra om befintliga fakta ska uppdateras eller om nya fakta ska bekräftas. När en regeluppsättningsversion anropar fact retriever för första gången , är objektet factsHandleIn alltid inställt på null, men tar på sig returobjektets värde när faktahämtningen har slutfört körningen.
Följande exempelkod visar hur du hävdar .NET- och XML-fakta med hjälp av en implementering av faktahämtning:
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;
}
}
}
Om du vill inkludera följande funktioner skriver du din egen kodimplementering:
Ta reda på när du ska uppdatera de långsiktiga fakta.
Spåra den regelmotorinstans som använder de långsiktiga fakta.
Ange en faktahämtning för en regeluppsättning
Om du vill konfigurera fact retriever för din regeluppsättningsversion kan du antingen ange egenskapen Fact Retriever i Microsoft Rules Composer eller skriva din egen kod enligt följande exempel, som använder en klass med namnet "MyFactRetriever" i sammansättningen med namnet "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;
Kommentar
Om du använder ett enkelt generiskt sammansättningsnamn, till exempel "MyAssembly", som den första parametern för konstruktorn RuleEngineComponentConfiguration , letar regelmotorn efter sammansättningen i programmappen.