다른 정책에서 정책 호출
다음 방법 중 하나를 사용하여 다른 정책(부모)에서 정책(자식)을 호출할 수 있습니다.
부모 정책에서 직접 Policy.Execute 메서드 호출
부모 정책에서 Policy.Execute 메서드를 래핑하는 도우미 .NET 구성 요소의 메서드 호출
두 번째 메서드를 사용할 경우의 장점은 Policy.Execute 메서드에 사전 처리 및 사후 처리 코드를 추가할 수 있다는 것입니다. 예를 들면 이 래퍼 메서드에서 자식 정책에 필요한 팩트를 만들 수 있습니다. 다음 섹션에서는 각 방법의 예를 보여 줍니다.
부모 정책에서 직접 Policy.Execute 메서드 호출
이 섹션에서는 Policy.Execute 메서드를 직접 사용하여 부모 정책에서 자식 정책을 호출하는 개략적인 단계를 제공합니다.
부모 정책에 Policy.Execute 액션 추가
다음 절차에는 XML 문서를 자식 정책에 팩트로 전달하는 부모 정책에 Policy.Execute 메서드를 작업으로 추가하는 단계가 있습니다.
Policy.Execute 메서드를 정책에 액션으로 추가하려면 다음을 수행하십시오.
팩트 Explorer 창에서 .NET 클래스 탭을 클릭합니다.
.NET 어셈블리를 마우스 오른쪽 단추로 클릭한 다음 찾아보기를 클릭합니다.
.NET 어셈블리 목록에서 Microsoft.RuleEngine을 선택한 다음 확인을 클릭합니다.
정책을 확장합니다.
Execute(Object facts) 또는 Execute(Object facts, IRuleSetTrackingInterceptor trackingInterceptor)를 THEN 창으로 끌어옵니다.
XML 스키마 노드를 클릭합니다.
참고
이 샘플 시나리오에서는 부모 정책에 팩트로 전송되는 XML 문서를 자식 정책에 팩트로 전달합니다. 이렇게 하는 대신 자식 정책에 팩트를 만드는 .NET 메서드를 호출할 수도 있습니다.
스키마를 마우스 오른쪽 단추로 클릭한 다음 찾아보기를 클릭합니다.
팩트로 전달할 XML 문서의 스키마를 선택한 다음 열기를 클릭합니다.
Schema name.xsd>를 Policy.Execute 메서드의 첫 번째 인수로 끌어< 부모 정책에 팩트로 전달되는 XML 문서를 자식 정책에 전달합니다.
IRuleSetTrackingInterceptor를 두 번째 인수로 사용하지 않는 Execute 메서드를 사용하는 경우 다음 단계를 건너뜁니다.
.NET 클래스 탭을 클릭합니다.
Microsoft.RuleEngine의 DebugTrackingInterceptor를 Policy.Execute 메서드의 두 번째 인수로 끌어옵니다.
참고
이 작업을 수행하는 경우 클라이언트는 DebugTrackingInterceptor 클래스의 instance 부모 정책에 팩트로 전달해야 합니다. 그러면 instance 자식 정책에 팩트로 전달됩니다. 대신 DebugTrackingInterceptor 클래스의 생성자를 끌어 instance 자동으로 만들어질 수 있습니다.
부모 정책을 호출하는 클라이언트 응용 프로그램 수정
부모 정책을 호출하는 클라이언트는 자식 정책 이름을 매개 변수로 사용하여 Policy 클래스의 instance 만들고 다른 사실과 함께 부모 정책에 팩트로 전달합니다. 다음 샘플 코드는 이 작업을 보여 줍니다.
DebugTrackingInterceptor dti = new DebugTrackingInterceptor("PolicyTracking.txt");
Policy policy = new Policy("ParentPolicy");
object[] facts = new object[3];
facts[0] = txd;
facts[1] = new Policy("ChildPolicy");
facts[2] = new DebugTrackingInterceptor("PolicyTracking2.txt");
policy.Execute(facts, dti);
policy.Dispose();
클라이언트가 BizTalk 오케스트레이션인 경우 코드를 배치하여 식 셰이프에 팩트를 만든 다음, 팩트를 호출 규칙 셰이프에 매개 변수로 전달해야 할 수 있습니다.
부모 정책에서 .NET 래퍼 메서드 호출
이 섹션에서는 부모 정책에서 Policy.Execute 메서드에 대한 호출을 래핑하는 .NET 메서드를 호출하는 개략적인 단계를 제공합니다.
유틸리티 .NET 클래스 만들기
유틸리 클래스를 만들려면 다음을 수행하십시오.
.NET 클래스 라이브러리 프로젝트를 만든 다음 프로젝트에 클래스를 추가합니다.
다음 샘플 코드와 같이 Policy.Execute 메서드를 호출하여 이름이 매개 변수로 전달되는 정책을 호출하는 정적 메서드를 추가합니다.
public static void Execute(string policyName, TypedXmlDocument txd) { DebugTrackingInterceptor dti = new DebugTrackingInterceptor("PolicyTracking.txt"); Policy policy = new Policy("ParentPolicy"); object[] facts = new object[3]; facts[0] = txd; facts[1] = new Policy("ChildPolicy"); facts[2] = new DebugTrackingInterceptor("PolicyTracking2.txt"); policy.Execute(facts, dti); policy.Dispose(); }
StaticSupport 레지스트리 키가 1 또는 2로 설정되어 있는지 확인합니다. 레지스트리 키에 대한 자세한 내용은 클래스의 정적 멤버 호출을 참조하세요.
참고
정적 메서드 대신 인스턴스 메서드를 사용할 수 있습니다. 단, 인스턴스 메서드를 사용할 경우에는 클라이언트가 부모 정책에 .NET 도우미 클래스의 인스턴스를 팩트로 전달해야 합니다.
클라이언트 응용 프로그램 수정
클라이언트가 부모 정책을 호출하고, 부모 정책은 자식 정책을 호출하는 도우미 메서드를 호출합니다. 클라이언트의 샘플 코드는 다음과 같습니다.
facts[0] = txd;
facts[1] = new PolicyExecutor(txd);
//call the first or parent policy
Policy policy = new Policy(policyName);
DebugTrackingInterceptor dti = new DebugTrackingInterceptor("PolicyTracking.txt");
policy.Execute(facts, dti);
policy.Dispose();
참고
메서드가 인스턴스 메서드인 경우, 클라이언트는 .NET 도우미 클래스의 인스턴스를 만들어 부모 정책에 팩트로 전달해야 합니다.
참고
클라이언트가 BizTalk 오케스트레이션인 경우 코드를 배치하여 식 셰이프에 팩트를 만든 다음, 팩트를 호출 규칙 셰이프에 매개 변수로 전달해야 할 수 있습니다.