다음을 통해 공유


Microsoft 규칙 작성기를 사용하여 규칙 집합에서 고급 작업 수행(미리 보기)

적용 대상: Azure Logic Apps(표준)

Important

이 기능은 미리 보기로 제공되고 Microsoft Azure 미리 보기의 추가 사용 약관이 적용됩니다.

이 가이드에서는 Microsoft 규칙 작성기에서 규칙 집합에 대해 수행할 수 있는 고급 작업에 대해 설명합니다.

필수 조건

  • Microsoft 규칙 작성기를 다운로드하여 설치합니다.

  • 작업하려는 규칙 집합이 포함된 XML 파일입니다.

규칙 집합 버전 복사

기존 규칙 집합 버전의 복사본을 만들 수 있지만 다른 버전 번호로 만들 수 있습니다.

  1. Microsoft 규칙 작성기를 엽니다. RuleSet 탐색기 창에서 규칙 집합 버전의 바로 가기 메뉴를 열고 복사를 선택합니다.

  2. 규칙 집합의 바로 가기 메뉴를 열고 RuleSet 버전 붙여넣기를 선택합니다.

    Microsoft 규칙 작성기는 복사된 버전과 동일한 요소를 사용하지만 숫자가 다른 새 규칙 집합 버전을 만듭니다.

    참고 항목

    규칙 집합에 팩트를 제공하는 데 사용되는 .NET 어셈블리를 업데이트하는 경우 해당 어셈블리에 대한 규칙 집합 버전의 참조를 업데이트해야 합니다. 자세한 내용은 .NET 어셈블리 참조 업데이트를 참조 하세요.

빈 규칙 집합 버전 만들기

규칙 집합 버전에 규칙을 추가한 후 다른 번호로 빈 규칙 집합 버전을 새로 만들고 나중에 작업할 수 있도록 해당 버전을 저장할 수 있습니다.

  1. Microsoft 규칙 작성기를 엽니다. 규칙 집합의 바로 가기 메뉴에서 새 버전 추가를 선택합니다.

    Microsoft 규칙 작성기는 다른 숫자로 빈 규칙 집합 버전을 새로 만듭니다.

  2. 새 규칙 집합 버전의 바로 가기 메뉴를 열고 저장을 선택합니다.

이제 다른 규칙 집합 버전의 규칙을 복사하여 새 버전에 붙여넣을 수 있습니다.

규칙 집합에 팩트 형식 전달

규칙 집합에 대한 반환 형식을 직접 지정할 수는 없지만 다음 유형의 팩트 중 하나를 규칙 집합에 전달하고 규칙 집합에서 팩 true 트 값을 변경하거나 false규칙 집합이 실행된 후 속성 또는 요소/열의 값을 확인할 수 있습니다.

  • 형식이 있는 속성 Boolean 이 있는 .NET 개체
  • 형식이 있는 요소가 Boolean 있는 XML 문서

규칙 집합에 대한 팩트 검색기 설정

규칙 집합과 함께 팩트 검색기를 사용하는 경우 자주 변경되지 않는 팩트를 저장하여 호스트 애플리케이션의 첫 번째 실행 주기 전에 저장할 수 있습니다. 이렇게 하면 스토리지에서 이러한 팩트를 검색하고, 캐싱을 위해 규칙 엔진에 한 번 표시하고, 여러 실행 주기 동안 다시 사용할 수 있습니다. 자세한 내용은 빌드 팩트 작성자 및 검색기를 참조 하세요.

규칙 집합과 팩트 검색기를 연결하는 방법에는 두 가지가 있습니다.

  • Microsoft 규칙 작성기에서 규칙 집합 버전에 대한 팩트 검색기를 수동으로 선택합니다.

  • 개체를 사용하여 프로그래밍 방식으로 수행합니다 RuleSetExecutionConfiguration .

참고 항목

하나의 팩트 검색기 구현만 규칙 집합 버전과 연결할 수 있습니다.

규칙 집합에 대한 팩트 검색기를 수동으로 선택

  1. Microsoft 규칙 작성기를 엽니다. RuleSet 탐색기에서 팩트 검색기에 연결하려는 규칙 집합 버전을 선택합니다.

  2. 속성 창에서 FactRetriever 속성 행을 선택한 다음 줄임표 단추(...)를 선택하여 기존 팩트 검색기 개체를 찾아 선택합니다.

    참고 항목

    속성 창에서 FactRetriever선택할 때까지 줄임표 단추(...)가 나타나지 않습니다.

부모 규칙 집합에서 자식 규칙 집합 호출

이 작업의 경우 다음 방법 중 하나를 사용합니다.

  • Ruleset.Execute 부모 규칙 집합에서 직접 메서드를 호출합니다.

  • 부모 규칙 집합에서 메서드를 래핑하는 도우미 .NET 구성 요소의 메서드를 Ruleset.Execute 호출합니다.

    두 번째 메서드를 사용하면 메서드에 전처리 및 후처리 코드를 Ruleset.Execute 추가할 수 있습니다. 예를 들어 이 래퍼 메서드 내의 자식 규칙 집합에서 필요한 모든 팩트를 만들 수 있습니다. 다음 섹션에서는 각 메서드에 대한 예제를 제공합니다.

부모 규칙 집합에서 직접 Ruleset.Execute 메서드를 호출합니다.

이 섹션에서는 메서드를 사용하여 Ruleset.Execute 부모 규칙 집합에서 직접 자식 규칙 집합을 호출하는 개략적인 단계를 제공합니다. 다음 절차에서는 XML 문서를 자식 규칙 집합에 팩트로 전달하는 부모 규칙 집합에 메서드를 작업으로 추가하는 Ruleset.Execute 단계를 보여 줍니다.

참고 항목

이 샘플 시나리오에서는 XML 문서가 부모 규칙 집합에 팩트로 제출됩니다. 이 문서는 자식 규칙 집합에 팩트로 전달됩니다. 그러나 자식 규칙 집합에 대한 팩트를 만드는 .NET 메서드를 대신 호출할 수 있습니다.

  1. Microsoft 규칙 작성기를 엽니다. 팩트 탐색기 창에서 .NET 클래스 탭을 선택합니다.

  2. .NET 어셈블리바로 가기 메뉴를 열고 찾아보기를 선택합니다.

  3. .NET 어셈블리 목록에서 Microsoft.RuleEngine을 선택한 다음 확인을 선택합니다.

  4. 규칙 집합을 확장하고 Execute(Object facts) 또는 Execute(Object facts, IRuleSetTrackingInterceptor trackingInterceptor)를 THEN 창으로 끌어옵니다.

  5. XML 스키마 노드를 선택하고 스키마의 바로 가기 메뉴를 열고 찾아보기를 선택합니다.

  6. 팩트로 전달할 XML 문서의 스키마를 선택한 다음 열기를 선택합니다.

  7. 부모 규칙 집합에 팩트로 전달되는 XML 문서를 자식 규칙 집합에 전달하려면 schema-name.xsd를 Ruleset.Execute 메서드의 첫 번째 인수로 끌어<옵니다.>

  8. IRuleSetTrackingInterceptor를 두 번째 인수로 사용하지 않는 Execute 메서드를 사용하는 경우 다음 단계를 건너뜁니다.

  9. .NET 클래스 탭을 선택하고 Microsoft.RuleEngineDebugTrackingInterceptor를 Ruleset.Execute 메서드의 두 번째 인수로 끕 니다.

    참고 항목

    이 작업을 수행하는 경우 클라이언트는 DebugTrackingInterceptor 클래스의 인스턴스를 부모 규칙 집합에 팩트로 전달한 다음 인스턴스를 자식 규칙 집합에 팩트로 전달해야 합니다. 대신, 인스턴스가 자동으로 생성되도록 DebugTrackingInterceptor 클래스의 생성자를 끌 수 있습니다.

부모 규칙 집합을 호출하는 클라이언트 애플리케이션 수정

부모 규칙 집합을 호출하는 클라이언트는 자식 규칙 집합 이름을 매개 변수로 사용하여 Ruleset 클래스의 인스턴스를 만들고 다른 사실과 함께 해당 인스턴스를 부모 규칙 집합에 팩트로 전달합니다. 다음 샘플 코드에서는 이 작업을 보여 줍니다.

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();

클라이언트가 BizTalk 오케스트레이션인 경우 팩트를 만들려면 코드를 식 셰이프에 배치한 다음, 팩트를 호출 규칙 셰이프에 매개 변수로 전달해야 할 수 있습니다.

부모 규칙 집합에서 .NET 래퍼 메서드 호출

이 섹션에서는 부모 규칙 집합에서 Ruleset.Execute 메서드에 대한 호출을 래핑하는 .NET 메서드를 호출하는 개략적인 단계를 제공합니다.

유틸리티 .NET 클래스 만들기

  1. .NET 클래스 라이브러리 프로젝트를 만듭니다. 프로젝트에 클래스를 추가합니다.

  2. 다음 샘플 코드와 같이 메서드를 호출 Ruleset.Execute 하여 이름이 매개 변수로 전달되는 규칙 집합을 호출하는 정적 메서드를 추가합니다.

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

    클라이언트는 부모 규칙 집합을 호출하고, 부모 규칙 집합은 예를 들어 클라이언트에 대한 다음 샘플 코드와 같이 자식 규칙 집합을 호출하는 도우미 메서드를 호출합니다.

    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();
    

    참고 항목

    메서드가 인스턴스 메서드인 경우 클라이언트는 도우미 .NET 클래스의 인스턴스를 만들고 해당 인스턴스를 부모 규칙 집합에 팩트로 전달해야 합니다.

규칙에서 형식이 같은 여러 개체 분석

대부분의 시나리오에서는 유형에 대해 비즈니스 규칙을 작성하고 엔진이 엔진에 어설션된 형식의 각 인스턴스를 개별적으로 분석하고 작동할 것으로 예상합니다. 그러나 일부 시나리오에서는 엔진이 동일한 형식의 여러 인스턴스를 동시에 분석하려고 합니다. 예를 들어 다음 샘플 규칙은 FamilyMember 클래스의 여러 인스턴스를 사용합니다.

IF FamilyMember.Role == Father
AND FamilyMember.Role == Son
AND FamilyMember.Surname == FamilyMember.Surname
THEN FamilyMember.AddChild(FamilyMember)

규칙은 하나의 아버지가고 다른 하나는 아들여러 FamilyMember 인스턴스를 식별합니다. 인스턴스가 성과 관련된 경우 규칙은 Son 인스턴스를 Father 인스턴스의 자식 컬렉션에 추가합니다. 엔진이 각 FamilyMember 인스턴스를 별도로 분석하는 경우 이 시나리오에서 FamilyMember는 아버지 또는 아들 중 하나의 역할만 있기 때문에 규칙이 트리거되지 않습니다.

따라서 이 시나리오에서는 엔진이 규칙에서 여러 인스턴스를 함께 분석하고 규칙에서 각 인스턴스의 ID를 구분하는 방법이 필요하다는 것을 나타내야 합니다. 인스턴스 ID 필드를 사용하여 이 기능을 제공할 수 있습니다. 팩트 탐색기에서 팩트를 선택하면 속성 창에서 이 필드를 사용할 수 있습니다.

Important

인스턴스 ID 필드를 사용하도록 선택하는 경우 팩트 또는 멤버를 규칙으로 끌기 전에 해당 값을 변경해야 합니다.

인스턴스 ID 필드를 사용하면 규칙이 다시 작성됩니다. FamilyMember 클래스의 Son 인스턴스를 사용하는 규칙 인수의 경우 인스턴스 ID 값을 기본값인 0에서 1변경합니다. 인스턴스 ID 값을 0에서 변경하고 팩트 또는 멤버를 규칙 편집기로 끌면 인스턴스 ID 값이 클래스 다음 규칙에 표시됩니다. 예를 들면 다음과 같습니다.

IF FamilyMember.Role == Father
AND FamilyMember(1).Role== Son
AND FamilyMember.Surname == FamilyMember(1).Surname
THEN FamilyMember.AddChild(FamilyMember(1))

이제 아버지 인스턴스와 Son 인스턴스가 엔진에 어설션된다고 가정합니다. 엔진은 이러한 인스턴스의 다양한 조합에 대해 규칙을 평가합니다. 아버지와 아들 인스턴스의 성이 같으면 Son 인스턴스가 예상대로 아버지 인스턴스에 추가됩니다.

참고 항목

인스턴스 ID 필드는 특정 규칙 평가의 컨텍스트 내에서만 사용됩니다. 이 필드는 규칙 집합 실행에서 개체 인스턴스에 부착되지 않으며 개체 어설션에 사용되는 순서와 관련이 없습니다. 각 개체 인스턴스는 해당 형식에 대한 모든 규칙 인수에서 평가됩니다.