共用方式為


從另一個原則叫用原則

您可以使用下列其中一種方法,從另一個原則 (父原則) 叫用原則 (子原則):

  • 直接從父原則呼叫 Policy.Execute 方法

  • 從父原則呼叫協助程式 .NET 元件的方法,以包裝 Policy.Execute 方法

    使用第二種方法的優點是您可以將前置處理和後置處理常式代碼新增至 Policy.Execute 方法。 例如,您可以在這個包裝函式方法中從子原則建立所需的任何事實。 下面幾節將提供每一個方法的範例。

直接從父原則叫用 Policy.Execute 方法

本節提供使用 Policy.Execute 方法直接從父原則叫用子原則的高階步驟。

將 Policy.Execute 動作加入到父原則

下列程式具有將 Policy.Execute 方法新增為動作的步驟,可將 XML 檔當做事實傳遞至子原則的父原則。

若要將 Policy.Execute 方法當做動作加入到原則
  1. 在 [事實總管] 視窗中,按一下 [.NET 類別] 索引標籤

  2. 以滑鼠右鍵按一下 [.NET 元件],然後按一下 [ 流覽]。

  3. [.NET 元件] 清單中選取[Microsoft.RuleEngine],然後按一下 [確定]。

  4. 展開 [原則]。

  5. [執行 (物件事實]) 或 [ 執行 (物件事實]、[IRuleSetTrackingInterceptor trackingInterceptor]) 拖曳至 [THEN] 窗格。

  6. 按一下 [XML 架構] 節點。

    注意

    在這個案例中,當做事實提交給父原則的 XML 文件會當做事實傳遞給子原則。 您可以改為叫用會針對子原則建立事實的 .NET 方法。

  7. 以滑鼠右鍵按一下 [架構],然後按一下 [ 流覽]。

  8. 選取您想要傳遞為事實的 XML 檔的架構,然後按一下 [ 開啟]。

  9. Schema name.xsd > 拖曳 <Policy.Execute方法的第一個引數,將傳遞至父原則做為事實的 XML 檔傳遞給子原則。

  10. 如果您使用不採用IRuleSetTrackingInterceptor做為第二個引數的Execute方法,請略過下列步驟。

  11. 按一下 [.NET 類別] 索引標籤

  12. Microsoft.RuleEngine中的DebugTrackingInterceptor拖曳至Policy.Execute方法的第二個引數。

    注意

    如果您執行此動作,用戶端必須將 DebugTrackingInterceptor 類別的實例當作事實傳遞至父原則,進而將實例當作事實傳遞至子原則。 您可以改為拖曳 DebugTrackingInterceptor 類別的建構函式,以便為您自動建立實例。

修改叫用父原則的用戶端應用程式

叫用父原則的用戶端會使用子原則名稱做為參數來建立 Policy 類別的實例,並將它當做事實傳遞給父原則以及其他事實。 下列範例程式碼將說明這個動作:

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 類別

若要建立公用程式類別
  1. 建立 .NET 類別庫專案,然後將類別加入此專案中。

  2. 新增靜態方法,以呼叫 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();  
    }   
    
  3. 請確定 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 協調流程,您可能需要將程式碼放在 運算式 圖形中建立事實,然後將事實當做參數傳遞至 呼叫規則 圖形。