Criteri avanzatiAdvanced Policy

Questo esempio estende l'esempio di criterio semplice.This sample extends the Simple Policy sample. Oltre alle regole di sconto residenziale e sconto aziendale dell'esempio di criterio semplice, sono state aggiunte molte nuove regole.In addition to the residential discount and business discount rules from the Simple Policy example, several new rules have been added.

Viene aggiunta una regola per valori elevati, che consente uno sconto maggiore per gli ordini di alto valore.A high-value rule is added, which provides a bigger discount for high-value orders. Viene fornito un valore di priorità minore rispetto alle due regole precedenti che sovrascriverà il campo dello sconto e avrà la precedenza rispetto a entrambe le regole di sconto residenziale e aziendale.It is given a priority value less than the previous two rules so that it will overwrite the discount field and take precedence over both the residential and business discount rules.

Viene aggiunta una regola di calcolo del totale, che calcola il totale in base al livello di sconto.A calculate total rule is also added, which computes the total based on the discount level. Viene mostrato come fare riferimento a un metodo definito sull'attività del flusso di lavoro e come usare le azioni else.It shows how to reference a method defined on the workflow activity, as well as how to use else actions. Questa regola dimostra anche il comportamento mutevole, dal momento che verrà valutata a ogni modifica del campo di sconto.This rule also demonstrates chaining behavior since it will be evaluated anytime the discount field changes. Inoltre, viene mostrata l'attribuzione del metodo con RuleWriteAttribute sul metodo CalculateTotal.Furthermore, method attributing is shown with the RuleWriteAttribute on the CalculateTotal method. Ciò fa in modo che regole con impatto (ErrorTotalRule) vengano rivalutate ogni qualvolta il metodo viene eseguito.This causes impacted rules (ErrorTotalRule) to be re-evaluated whenever the method gets executed.

L'ultima regola aggiunta rileva gli errori (in questo caso il Totale inferiore a 0).The last rule added is one that detects errors (in this case, Total less than 0). Se si verifica tale condizione, l'esecuzione del criterio verrà interrotta.If this occurs, the policy execution is halted.

Infine, vengono aggiunte le chiamate a Console.Writeline come azioni a ogni regola in modo da fornire più visibilità all'esecuzione della regola, dimostrando allo stesso tempo che è possibile accedere a metodi statici sui tipi a cui viene fatto riferimento.Finally, Console.Writeline calls are added as actions to each rule to provide more visibility into rule execution, while also showing that it is possible to access static methods on referenced types. È anche possibile usare il rilevamento per ottenere visibilità nelle regole eseguite.You could also use tracking to get visibility into the rules that are executed.

Le regole usate in questo esempio sono:The rules used in this sample are:

ResidentialDiscountRule:ResidentialDiscountRule:

IF OrderValue > 500 AND CustomerType = ResidentialIF OrderValue > 500 AND CustomerType = Residential

THEN Discount = 5%THEN Discount = 5%

BusinessDiscountRule:BusinessDiscountRule:

IF OrderValue > 10000 AND CustomerType = BusinessIF OrderValue > 10000 AND CustomerType = Business

THEN Discount = 10%THEN Discount = 10%

HighValueDiscountRule:HighValueDiscountRule:

IF OrderValue > 20000IF OrderValue > 20000

THEN Discount = 15%THEN Discount = 15%

TotalRule:TotalRule:

IF Discount > 0IF Discount > 0

THEN CalculateTotal(OrderValue, Discount)THEN CalculateTotal(OrderValue, Discount)

ELSE Total = OrderValueELSE Total = OrderValue

ErrorTotalRule:ErrorTotalRule:

Se totale < 0IF Total < 0

THEN Error = "Fired ErrorTotalRule"; HaltTHEN Error = "Fired ErrorTotalRule"; Halt

La valutazione e l'esecuzione delle regole può essere inoltre visualizzata tramite traccia e rilevamento.Rule evaluation and execution can also be seen through tracing and tracking.

Per compilare l'esempioTo build the sample

  1. Aprire la soluzione in Visual Studio 2010Visual Studio 2010.Open the solution in Visual Studio 2010Visual Studio 2010.

  2. Premere CTRL+MAIUSC+B per compilare la soluzione,Build the solution by pressing CTRL+SHIFT+B.

  3. Eseguire la soluzione senza debug premendo CTRL+F5.Run the solution without debugging by pressing CTRL+F5.

Per eseguire l'esempioTo run the sample

  • Nella finestra del prompt dei comandi di SDK eseguire il file con estensione exe nella cartella AdvancedPolicy\bin\debug (oppure nella cartella AdvancedPolicy\bin per la versione Visual Basic dell'esempio), collocata sotto la cartella principale dell'esempio.In the SDK Command Prompt window, run the .exe file in the AdvancedPolicy\bin\debug folder (or the AdvancedPolicy \bin folder for the Visual Basic version of the sample), which is located below the main folder for the sample.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your computer. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing:

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al Windows Communication Foundation (WCF) e gli esempi di Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Questo esempio si trova nella directory seguente.This sample is located in the following directory:

<InstallDrive>:\WF_WCF_Samples\WF\Basic\Rules\Policy\AdvancedPolicy

Vedere ancheSee Also

RuleSet
PolicyActivity
Criteri sempliciSimple Policy