규칙 및 규칙 집합과 함께 사용할 팩트 작성자 및 검색기 빌드(미리 보기)
적용 대상: Azure Logic Apps(표준)
Important
이 기능은 미리 보기로 제공되고 Microsoft Azure 미리 보기의 추가 사용 약관이 적용됩니다.
비즈니스 규칙 개발 및 테스트 중에 사용할 규칙 엔진에 대한 팩트를 만들려면 엔진에 .NET 개체 배열을 제공하는 팩트 작성자를 빌드할 수 있습니다. 장기 또는 느리게 변경되는 팩트를 실행 중 평가 규칙에 삽입하는 팩트 검색기를 빌드할 수도 있습니다.
이 방법 가이드에서는 사용할 Azure Logic Apps 규칙 엔진 프로젝트에 대한 팩트 작성자 및 팩트 검색기를 빌드하는 방법을 보여 줍니다.
팩트 작성자 빌드
팩트 인스턴스를 만들려면 IFactCreator 인터페이스 및 해당 메서드인 CreateFacts 및 GetFactTypes를 구현합니다. 첫 번째 팩트 작성자에 대한 .NET 어셈블리(DLL 파일)를 빌드한 후 Microsoft 규칙 작성기에서 규칙 집합 테스트 기능에서 어셈블리를 선택할 수 있습니다. 자세한 내용은 테스트 규칙 집합을 참조 하세요.
다음 예제에서는 샘플 팩트 작성자 구현을 보여줍니다.
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;
}
}
팩트 검색기 빌드
팩트 검색기는 표준 메서드를 구현하고 일반적으로 엔진이 규칙 집합을 실행하기 전에 규칙 엔진에 장기적이고 느리게 변경되는 팩트를 제공하는 데 사용하는 .NET 개체입니다. 엔진은 이러한 사실을 캐시하고 여러 실행 주기 동안 사용합니다. 팩트 리트리버가 팩트(fact retriever)를 처음 제출한 다음, 필요한 경우에만 메모리에서 팩트 업데이트를 합니다. 규칙 엔진을 호출할 때마다 팩트를 제출하는 대신 팩트를 처음 제출한 다음 필요한 경우에만 메모리의 팩트를 업데이트하는 팩트 검색기를 만듭니다.
규칙 엔진에 팩트 인스턴스를 제공하려면 IFactRetriever 인터페이스 및 UpdateFacts 메서드를 구현합니다. 그런 다음 이 구현을 사용하여 런타임에 팩트를 가져오도록 규칙 집합 버전을 설정할 수 있습니다. 그런 다음 규칙 집합 버전은 모든 실행 주기에서 UpdateFacts 메서드를 호출 합니다 .
필요에 따라 팩트 검색기 구성 요소에서 IFactRemover 인터페이스를 구현할 수 있습니다. 그런 다음 규칙 엔진은 규칙 집합이 삭제될 때 IFactRemover 인터페이스에서 UpdateFactsAfterExecution이라는 메서드를 호출할 수 있습니다. 이렇게 하면 데이터베이스 변경 내용을 커밋하거나 규칙 엔진의 작업 메모리에서 개체 인스턴스를 철회하는 등의 실행 후 작업을 수행할 수 있습니다.
다음 작업을 수행하는 데 필요한 애플리케이션별 논리를 사용하여 팩트 검색기를 디자인할 수 있습니다.
필요한 데이터 원본에 연결합니다.
데이터를 엔진에 장기 팩트로 어설션합니다.
엔진에 새 장기 팩트 인스턴스를 새로 고치거나 어설션하는 논리를 지정합니다.
엔진은 해당 값이 업데이트될 때까지 후속 실행 주기에서 처음에 어설션되고 캐시된 값을 사용합니다.
팩트 검색기 구현은 검색자가 factsHandleIn 개체와 함께 사용할 수 있는 토큰과 유사한 개체를 반환하여 기존 팩트를 업데이트할지 또는 새 사실을 어설션할지 여부를 결정합니다. 규칙 집합 버전이 처음으로 팩트 검색기를 호출하는 경우 factsHandleIn 개체는 항상 null로 설정되지만 팩트 검색기가 실행을 완료한 후 반환 개체의 값을 사용합니다.
다음 샘플 코드는 팩트 검색기 구현을 사용하여 .NET 및 XML 팩트를 어설션하는 방법을 보여줍니다.
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;
}
}
}
다음 기능을 포함하려면 사용자 고유의 코드 구현을 작성합니다.
장기 팩트를 업데이트할 시기를 결정합니다.
어떤 규칙 엔진 인스턴스가 어떤 장기 팩트를 사용하는지 추적합니다.
규칙 집합에 대한 팩트 검색기 지정
규칙 집합 버전에 대한 팩트 검색기를 설정하려면 Microsoft 규칙 작성기에서 Fact Retriever 속성을 설정하거나 다음 예제와 같이 "MyAssembly"라는 어셈블리에서 "MyFactRetriever"라는 클래스를 사용하는 고유한 코드를 작성할 수 있습니다.
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;
참고 항목
RuleEngineComponentConfiguration 생성자의 첫 번째 매개 변수로 "MyAssembly"와 같은 간단한 제네릭 어셈블리 이름을 사용하는 경우 규칙 엔진은 애플리케이션 폴더에서 어셈블리를 찾습니다.