Condividi tramite


Controllo del concatenamento diretto

Il concatenamento diretto è una funzionalità molto potente che consente alle regole atomiche di essere assemblate in set di regole senza dover definire, o persino conoscere, le dipendenze fra le regole. Esistono tuttavia alcuni scenari in cui il writer della regola desidera essere in grado di fornire più controllo sul comportamento di concatenamento, in particolare per limitare il concatenamento che si verifica. Ciò consente al modeler della regola di eseguire le operazioni seguenti:

  • Limitare l'esecuzione ripetitiva di regole in grado di comportare risultati non corretti.

  • Migliorare le prestazioni.

  • Impedire cicli runaway.

Windows Workflow Foundation offre due proprietà per semplificare questo livello di controllo:

Entrambi questi valori possono essere impostati nell'editor RuleSet.

Proprietà ChainingBehavior

La proprietà ChainingBehavior dell'oggetto RuleSet può essere impostata su tre valori: Full, UpdateOnly o None.

  • L'opzione Full è l'impostazione predefinita e fornisce il comportamento appena descritto.

  • L'opzione UpdateOnly disattiva il concatenamento implicito e quello basato sugli attributi e impone che il concatenamento si verifichi solo per le istruzioni Update esplicite. Ciò consente di determinare in modo completo quali regole comportano la rivalutazione. In genere questa opzione viene utilizzata per evitare dipendenze cicliche che provocano riesecuzioni eccessive (o persino runaway) oppure per ottimizzare le prestazioni mediante l'eliminazione delle rivalutazioni di regola che non sono necessarie a garantire la completezza funzionale dell'oggetto RuleSet.

  • L'ultima opzione disponibile è None. Se si seleziona questa opzione, il motore valuta le regole in modo rigorosamente lineare. Ogni regola viene valutata solo una volta e secondo l'ordine di priorità. Le regole con priorità più elevata possono influire sulle regole con priorità più bassa, ma l'inverso non è vero in quanto in questo caso non si verifica alcun concatenamento. Pertanto, questa opzione si utilizza quando le priorità vengono assegnate esplicitamente, a meno che fra le regole non esista alcuna dipendenza.

Proprietà ReevaluationBehavior

La proprietà ReevaluationBehavior dell'oggetto Rule presenta due valori possibili: Always e Never.

  • L'opzione Always è l'impostazione predefinita e fornisce il comportamento discusso in precedenza, ovvero che la regola viene sempre rivalutata in base al concatenamento causato dalle azioni di altre regole.

  • L'opzione Never, invece, disattiva questa rivalutazione. La regola viene valutata una sola volta, ma se prima ha eseguito un'azione non viene rivalutata. In altre parole, se la regola è stata valutata in precedenza e pertanto ha eseguito le relative azioni Then o Else, non viene rivalutata. Tuttavia, l'esecuzione di un insieme vuoto di azioni nelle azioni Then o Else non indica che una regola è stata eseguita.

In genere, questa proprietà viene utilizzata a livello di regola per impedire il ciclo continuo infinito causato da dipendenze che la regola presenta nelle proprie azioni o in altre regole. Ad esempio, la regola seguente crea un proprio ciclo infinito e per soddisfare i requisiti funzionali della regola non occorre eseguire la rivalutazione:

IF this.shippingCharge < 2.5 AND this.orderValue > 100
THEN this.shippingCharge = 0

In alternativa, se la regola deve essere rivalutata esclusivamente quando il campo OrderValue viene modificato, l'utente può impostare il comportamento di concatenamento dell'oggetto RuleSet in modo da eseguire il concatenamento solo quando si eseguono istruzioni Update esplicite e affinché tali istruzioni Update vengano quindi aggiunte alle azioni pertinenti della regola. Naturalmente, l'utente può aggiungere un predicato a questa regola che verifica se il valore di ShippingCost non è già 0. Tuttavia, i controlli di concatenamento consentono agli utenti di definire regole personalizzate basate sui requisiti aziendali anziché sui dettagli di valutazione.

Funzione Halt

Infine, è possibile aggiungere una funzione Halt come azione della regola. A tale scopo, digitare "Halt" nelle caselle di azione Then o Else dell'editor. Ciò consente di interrompere immediatamente l'esecuzione dell'oggetto RuleSet e quindi di restituire il controllo al codice chiamante. Naturalmente, l'utilità di questa funzione non si limita necessariamente agli scenari di controlli di concatenamento. Un oggetto RuleSet che presenta un obiettivo funzionale specifico, ad esempio, può utilizzare una funzione Halt per cortocircuitare l'esecuzione quando l'obiettivo è stato raggiunto.

Vedere anche

Riferimenti

ChainingBehavior
ReevaluationBehavior
RuleHaltAction
RuleUpdateAction
RuleSet

Concetti

Utilizzo di RuleSet in flussi di lavoro
Valutazione delle regole di RuleSet

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.