Condividi tramite


Richiamo di un criterio da un altro criterio

È possibile richiamare un criterio (figlio) da un altro criterio (padre) mediante uno dei metodi seguenti:

  • Chiamata del metodo Policy.Execute direttamente dal criterio padre

  • Chiamata di un metodo di un componente .NET helper che esegue il wrapping del metodo Policy.Execute dai criteri padre

    Il vantaggio dell'uso del secondo metodo è che è possibile aggiungere codice di pre-elaborazione e post-elaborazione al metodo Policy.Execute . È ad esempio possibile creare i fact necessari dal criterio figlio in questo metodo wrapper. Nelle sezioni seguenti viene fornito un esempio per ogni metodo.

Richiamo del metodo Policy.Execute direttamente dal criterio padre

Questa sezione presenta i passaggi di alto livello per richiamare direttamente i criteri figlio dai criteri padre usando il metodo Policy.Execute .

Aggiunta dell'azione Policy.Execute al criterio padre

La procedura seguente prevede la procedura per aggiungere il metodo Policy.Execute come azione ai criteri padre che passano un documento XML come fatto ai criteri figlio.

Per aggiungere il metodo Policy.Execute come azione a un criterio
  1. Nella finestra Esplora fatti fare clic sulla scheda Classi .NET .

  2. Fare clic con il pulsante destro del mouse su Assembly .NET e quindi scegliere Sfoglia.

  3. Selezionare Microsoft.RuleEngine nell'elenco Assembly .NET e quindi fare clic su OK.

  4. Espandere Criteri.

  5. Trascinare Execute(Object facts) o Execute(Object facts, IRuleSetTrackingInterceptor trackingInterceptor) nel riquadro THEN.

  6. Fare clic sul nodo XML Schemas .

    Nota

    In questo scenario di esempio un documento XML inviato come fact al criterio padre viene passato come fact al criterio figlio. È invece possibile richiamare un metodo .NET in grado di creare i fact per il criterio figlio.

  7. Fare clic con il pulsante destro del mouse su Schemi e quindi scegliere Sfoglia.

  8. Selezionare lo schema per il documento XML che si desidera passare come fatto e quindi fare clic su Apri.

  9. Trascinare <Il nome> schema.xsd nel primo argomento del metodo Policy.Execute per passare il documento XML passato al criterio padre come fatto ai criteri figlio.

  10. Se si usa il metodo Execute che non accetta IRuleSetTrackingInterceptor come secondo argomento, ignorare i passaggi seguenti.

  11. Fare clic sulla scheda Classi .NET .

  12. Trascinare DebugTrackingInterceptor in Microsoft.RuleEngine al secondo argomento del metodo Policy.Execute .

    Nota

    Se si esegue questa azione, il client deve passare un'istanza della classe DebugTrackingInterceptor come fatto al criterio padre, che a sua volta passa l'istanza come fatto ai criteri figlio. È invece possibile trascinare il costruttore della classe DebugTrackingInterceptor in modo che l'istanza venga creata automaticamente.

Modifica dell'applicazione client che richiama il criterio padre

Il client che richiama il criterio padre crea un'istanza della classe Policy con il nome dei criteri figlio come parametro e lo passa come fatto al criterio padre insieme ad altri fatti. Nell'esempio di codice seguente viene illustrata questa azione:

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

Se il client è un'orchestrazione BizTalk, potrebbe essere necessario inserire il codice per creare fatti in una forma espressione e quindi passare i fatti come parametri alla forma Regole di chiamata .

Richiamo del metodo wrapper .NET dal criterio padre

In questa sezione vengono illustrati i passaggi di alto livello per richiamare un metodo .NET che esegue il wrapping della chiamata al metodo Policy.Execute dal criterio padre.

Creazione della classe di utilità .NET

Per creare la classe di utilità
  1. Creare un progetto Libreria di classi .NET e aggiungervi una classe.

  2. Aggiungere un metodo statico che chiama il metodo Policy.Execute per richiamare il criterio il cui nome viene passato come parametro, come illustrato nel codice di esempio seguente:

    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. Assicurarsi che la chiave del Registro di sistema StaticSupport sia impostata su 1 o 2. Per altre informazioni sulla chiave del Registro di sistema, vedere Richiamare membri statici di una classe.

    Nota

    È possibile utilizzare un metodo di istanza anziché un metodo statico. Ricordare che se si utilizza un metodo di istanza, il client deve passare un'istanza della classe .NET di supporto come fact al criterio padre.

Modifica dell'applicazione client

Il client richiama il criterio padre e il criterio padre richiama il metodo di supporto che richiama il criterio figlio. Nell'esempio seguente è riportato il codice per il client.

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

Nota

Nel caso di metodo di istanza, il client deve creare un'istanza della classe .NET di supporto e passarla come fact al criterio padre.

Nota

Se il client è un'orchestrazione BizTalk, potrebbe essere necessario inserire il codice per creare fatti in una forma espressione e quindi passare i fatti come parametri alla forma Regole di chiamata .