Udostępnij za pośrednictwem


Tworzenie twórców faktów i elementów pobierania do użycia z regułami i zestawami reguł (wersja zapoznawcza)

Dotyczy: Azure Logic Apps (Standardowa)

Ważne

Ta funkcja jest dostępna w wersji zapoznawczej i podlega dodatkowym warunkom użytkowania wersji zapoznawczej platformy Microsoft Azure.

Aby utworzyć fakty dla aparatu reguł do użycia podczas tworzenia i testowania reguł biznesowych, możesz utworzyć twórcę faktów, który udostępnia aparat tablicy obiektów platformy .NET. Możesz również utworzyć program pobierania faktów, który wstawia długoterminowe lub powoli zmieniające fakty do reguł oceny podczas wykonywania.

W tym przewodniku z instrukcjami pokazano, jak utworzyć twórcę faktów i narzędzie do pobierania faktów dla projektu aparatu reguł usługi Azure Logic Apps do użycia.

Tworzenie twórcy faktów

Aby utworzyć wystąpienia faktów, zaimplementuj interfejs IFactCreator i jego metody, CreateFacts i GetFactTypes. Po utworzeniu zestawu .NET (pliku DLL) dla pierwszego twórcy faktów możesz wybrać zestaw z funkcji testowania zestawu reguł w programie Microsoft Rules Composer. Aby uzyskać więcej informacji, zobacz Zestawy reguł testowych.

W poniższym przykładzie przedstawiono przykładową implementację twórcy faktów:

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;
    }
}

Tworzenie narzędzia pobierania faktów

Fact retriever to obiekt platformy .NET, który implementuje standardowe metody i zazwyczaj używa ich do dostarczania długoterminowych i powoli zmieniających się faktów aparatowi reguł, zanim aparat wykona zestaw reguł. Aparat buforuje te fakty i używa ich w wielu cyklach wykonywania. Moduł pobierania faktów przesyła fakt po raz pierwszy, a następnie aktualizuje fakt w pamięci tylko wtedy, gdy jest to konieczne. Zamiast przesyłać fakt za każdym razem, gdy wywołujesz aparat reguł, utwórz moduł pobierania faktów, który przesyła fakt po raz pierwszy, a następnie aktualizuje fakt w pamięci tylko wtedy, gdy jest to konieczne.

Aby dostarczyć wystąpienia faktów do aparatu reguł, zaimplementuj interfejs IFactRetriever i metodę UpdateFacts . Następnie możesz skonfigurować wersję zestawu reguł w celu użycia tej implementacji w celu wprowadzenia faktów w czasie wykonywania. Następnie wersja zestawu reguł wywołuje metodę UpdateFacts w każdym cyklu wykonywania.

Opcjonalnie możesz zaimplementować interfejs IFactRemover w składniku fact retriever. Aparat reguł może następnie wywołać metodę o nazwie UpdateFactsAfterExecution z interfejsu IFactRemover po usunięciu zestawu reguł. W ten sposób można wykonać dowolną pracę po wykonaniu, taką jak zatwierdzenie wszelkich zmian bazy danych lub wycofanie wystąpień obiektów z pamięci roboczej aparatu reguł.

Aby wykonać następujące zadania, możesz zaprojektować program pobierania faktów przy użyciu wymaganej logiki specyficznej dla aplikacji:

  1. Połącz się z wymaganymi źródłami danych.

  2. Potwierdzanie danych jako długoterminowych faktów w asilniku.

  3. Określ logikę do odświeżenia lub potwierdzenia nowych długoterminowych wystąpień faktów do aparatu.

    Aparat używa początkowo aserowanych i buforowanych wartości w kolejnych cyklach wykonywania do momentu zaktualizowania tych wartości.

Implementacja modułu pobierania faktów zwraca obiekt, który jest analogiczny do tokenu, którego program retriever może używać z obiektem factHandleIn , aby określić, czy zaktualizować istniejące fakty, czy potwierdzić nowe fakty. Gdy wersja zestawu reguł wywołuje moduł pobierania faktów po raz pierwszy, obiekt factHandleIn jest zawsze ustawiony na wartość null, ale przyjmuje wartość zwracanego obiektu po zakończeniu wykonywania przez moduł pobierania faktów.

Poniższy przykładowy kod przedstawia sposób potwierdzenia faktów dotyczących platformy .NET i XML przy użyciu implementacji elementu 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;
        }
    }
}

Aby uwzględnić następujące możliwości, napisz własną implementację kodu:

  • Ustal, kiedy zaktualizować długoterminowe fakty.

  • Śledzenie niezależnie od tego, które wystąpienie aparatu reguł używa niezależnie od faktów długoterminowych.

Określanie elementu pobierania faktów dla zestawu reguł

Aby skonfigurować moduł pobierania faktów dla wersji zestawu reguł, możesz ustawić właściwość Fact Retriever w narzędziu Microsoft Rules Composer lub napisać własny kod, jak pokazano w poniższym przykładzie, która używa klasy o nazwie "MyFactRetriever" w zestawie o nazwie "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;

Uwaga

Jeśli używasz prostej ogólnej nazwy zestawu, takiej jak "MyAssembly", jako pierwszy parametr konstruktora RuleEngineComponentConfiguration , aparat reguł szuka zestawu w folderze aplikacji.