Freigeben über


Aufgabe 2: Erstellen von PolicyActivity und RuleSet

Sie haben unter Aufgabe 1: Erstellen der ConditionedActivityGroup-Aktivität dem Workflow eine ConditionedActivityGroup-Aktivität hinzugefügt, auf dem alle enthaltenen untergeordneten Aktivitäten ausgeführt werden, bis sich keine weiteren Coupons mehr in der Warteschlange befinden. Coupons werden mithilfe einer CodeActivity in der ConditionedActivityGroup entfernt.

In dieser Aufgabe fügen Sie eine einzelne PolicyActivity-Aktivität hinzu. Von dieser PolicyActivity-Aktivität wird ein RuleSet verwendet, der vier verschiedene Regeln enthält, die jedem der vier Coupontypen entsprechen. Da von der ConditionedActivityGroup-Aktivität alle Coupons aufgelistet werden, wird jede Regel ausgewertet. Falls die Auswertung der Condition der Regel true ergibt, wird die diesem Coupon zugeordnete Logik übernommen.

So erstellen Sie die PolicyActivity:

  1. Erstellen Sie in der DiscountWorkflow-Klasse eine private PolicyActivity mit dem Namen couponPolicy.

    this.couponPolicy = new System.Workflow.Activities.PolicyActivity();
    
  2. Erstellen Sie in der InitializeComponent-Methode der DiscountWorkflow-Klasse eine Instanz des PolicyActivity-Objekts, das Sie im vorherigen Schritt erstellt haben.

    Dies erfolgt nach der Zeile, in der die CanModifyActivities-Eigenschaft festgelegt ist.

    System.Workflow.Activities.Rules.RuleSetReference rulesetreference1 =
        new System.Workflow.Activities.Rules.RuleSetReference();
    
  3. Erstellen Sie eine lokale RuleSetReference-Variable in der InitializeComponent-Methode mit der Bezeichnung rulesetreference1, und erstellen Sie eine Instanz dieses Objekts.

    this.conditionedActivityGroup1.Activities.Add(this.couponPolicy);
    
  4. Fügen Sie in der InitializeComponent-Methode der Activities-Auflistung des conditionedActivityGroup1-Objekts das couponPolicy-Objekt hinzu, indem Sie die in der Activities-Eigenschaft definierte Add-Methode verwenden.

    Hinweis

    Das couponPolicy-Objekt muss vor dem removeCoupon-Objekt hinzugefügt werden. Durch die Reihenfolge, in der Sie untergeordnete Aktivitäten der ConditionedActivityGroup hinzufügen, wird die Reihenfolge ihrer Ausführung bestimmt.

    // 
    // couponPolicy
    // 
    this.couponPolicy.Name = "couponPolicy";
    rulesetreference1.RuleSetName = "RuleSet1";
    this.couponPolicy.RuleSetReference = rulesetreference1;
    
  5. Legen Sie die Name-Eigenschaft des couponPolicy-Objekts auf den Wert "couponPolicy" fest.

  6. Setzen Sie den RuleSetName des rulesetreference1-Objekts auf den Wert "RuleSet1".

    Hinweis

    Sie erstellen diesen RuleSet in der nächsten Prozedur.

  7. Legen Sie die RuleSetReference-Eigenschaft des couponPolicy-Objekts auf denselben Wert wie rulesetreference1 fest. Dadurch wird dem RuleSet, der die zum Verarbeiten der Coupons verwendeten Regeln enthält, eine PolicyActivity zugewiesen.

    this.couponPolicy.SetValue(
        System.Workflow.Activities.ConditionedActivityGroup.WhenConditionProperty
        , ruleconditionreference3);
    
  8. Rufen Sie die SetValue-Methode auf, die im couponPolicy-Objekt definiert ist, und geben Sie den WhenConditionProperty-Typ und das ruleconditionreference3-Objekt als Parameter ein.

    Hinweis

    Durch Festlegen der WhenConditionProperty der PolicyActivity-Aktivität wird gewährleistet, dass die PolicyActivity-Aktivität jedes Mal ausgeführt wird, wenn durch die ConditionedActivityGroup-Aktivität ihre untergeordneten Aktivitäten aufgelistet werden. Diese untergeordnete Aktivität wird nur einmal ausgeführt, wenn Sie keine WhenConditionProperty-Bedingung für eine untergeordnete Aktivität in einer ConditionedActivityGroup angeben.

So erstellen Sie den Coupon-RuleSet:

  1. Fügen Sie in der Datei DiscountWorkflow.rules dem RuleDefinitions-Stammelement ein neues Element mit dem Namen RuleDefinitions.RuleSets hinzu.

  2. Fügen Sie dem RuleDefinitions.RuleSets-Element ein untergeordnetes Element mit der Bezeichnung RuleSet hinzu.

  3. Fügen Sie dem im vorherigen Schritt mit dem Namen Name erstellten RuleSet-Element ein Attribut hinzu, und weisen Sie ihm den Wert "RuleSet1" zu.

  4. Fügen Sie dem in Schritt 3 mit dem Namen ChainingBehavior erstellten RuleSet-Element ein Attribut hinzu, und weisen Sie ihm den Wert "Full" zu.

  5. Fügen Sie dem in Schritt 3 mit dem Namen Description erstellten RuleSet-Element ein Attribut hinzu, und weisen Sie ihm den Wert "Coupon RuleSet" zu.

  6. Fügen Sie dem RuleSet-Element ein untergeordnetes Element mit der Bezeichnung RuleSet.Rules hinzu.

    Die Datei DiscountWorkflow.rules wird ähnlich dem folgenden Code angezeigt.

    <RuleDefinitions xmlns="https://schemas.microsoft.com/winfx/2006/xaml/workflow">
        <RuleDefinitions.Conditions>
            <!-- Conditions hidden for this example for readability -->
        </RuleDefinitions.Conditions>
        <RuleDefinitions.RuleSets>
            <RuleSet Name="RuleSet1" ChainingBehavior="Full" Description="Coupon RuleSet">
                <RuleSet.Rules>
                </RuleSet.Rules>
            </RuleSet>
        </RuleDefinitions.RuleSets>
    </RuleDefinitions>
    

So erstellen Sie die getFreeItems-Regel:

  • Kopieren Sie folgende Rule in das RuleSet.Rules-Element, das Sie in der vorherigen Prozedur erstellt haben.

    <Rule Name="getFreeItem" ReevaluationBehavior="Always" Priority="0" Description="{p5:Null}" Active="True" xmlns:p5="https://schemas.microsoft.com/winfx/2006/xaml">
        <Rule.ThenActions>
            <RuleStatementAction>
                <RuleStatementAction.CodeDomStatement>
                    <ns0:CodeAssignStatement LinePragma="{p5:Null}" xmlns:ns0="clr-namespace:System.CodeDom;Assembly=System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                        <ns0:CodeAssignStatement.Left>
                            <ns0:CodePropertyReferenceExpression PropertyName="Discount">
                                <ns0:CodePropertyReferenceExpression.TargetObject>
                                    <ns0:CodeThisReferenceExpression />
                                </ns0:CodePropertyReferenceExpression.TargetObject>
                            </ns0:CodePropertyReferenceExpression>
                        </ns0:CodeAssignStatement.Left>
                        <ns0:CodeAssignStatement.Right>
                            <ns0:CodeBinaryOperatorExpression Operator="Add">
                                <ns0:CodeBinaryOperatorExpression.Left>
                                    <ns0:CodePropertyReferenceExpression PropertyName="Discount">
                                        <ns0:CodePropertyReferenceExpression.TargetObject>
                                            <ns0:CodeThisReferenceExpression />
                                        </ns0:CodePropertyReferenceExpression.TargetObject>
                                    </ns0:CodePropertyReferenceExpression>
                                </ns0:CodeBinaryOperatorExpression.Left>
                                <ns0:CodeBinaryOperatorExpression.Right>
                                    <ns0:CodeFieldReferenceExpression FieldName="price">
                                        <ns0:CodeFieldReferenceExpression.TargetObject>
                                            <ns0:CodeIndexerExpression>
                                                <ns0:CodeIndexerExpression.Indices>
                                                    <ns0:CodePrimitiveExpression>
                                                        <ns0:CodePrimitiveExpression.Value>
                                                            <ns1:Int32 xmlns:ns1="clr-namespace:System;Assembly=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">0</ns1:Int32>
                                                        </ns0:CodePrimitiveExpression.Value>
                                                    </ns0:CodePrimitiveExpression>
                                                </ns0:CodeIndexerExpression.Indices>
                                                <ns0:CodeIndexerExpression.TargetObject>
                                                    <ns0:CodePropertyReferenceExpression PropertyName="Items">
                                                        <ns0:CodePropertyReferenceExpression.TargetObject>
                                                            <ns0:CodeThisReferenceExpression />
                                                        </ns0:CodePropertyReferenceExpression.TargetObject>
                                                    </ns0:CodePropertyReferenceExpression>
                                                </ns0:CodeIndexerExpression.TargetObject>
                                            </ns0:CodeIndexerExpression>
                                        </ns0:CodeFieldReferenceExpression.TargetObject>
                                    </ns0:CodeFieldReferenceExpression>
                                </ns0:CodeBinaryOperatorExpression.Right>
                            </ns0:CodeBinaryOperatorExpression>
                        </ns0:CodeAssignStatement.Right>
                    </ns0:CodeAssignStatement>
                </RuleStatementAction.CodeDomStatement>
            </RuleStatementAction>
        </Rule.ThenActions>
        <Rule.Condition>
            <RuleExpressionCondition Name="{p5:Null}">
                <RuleExpressionCondition.Expression>
                    <ns0:CodeBinaryOperatorExpression Operator="BooleanAnd" xmlns:ns0="clr-namespace:System.CodeDom;Assembly=System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                        <ns0:CodeBinaryOperatorExpression.Left>
                            <ns0:CodeBinaryOperatorExpression Operator="ValueEquality">
                                <ns0:CodeBinaryOperatorExpression.Left>
                                    <ns0:CodeFieldReferenceExpression FieldName="type">
                                        <ns0:CodeFieldReferenceExpression.TargetObject>
                                            <ns0:CodeMethodInvokeExpression>
                                                <ns0:CodeMethodInvokeExpression.Method>
                                                    <ns0:CodeMethodReferenceExpression MethodName="Peek">
                                                        <ns0:CodeMethodReferenceExpression.TargetObject>
                                                            <ns0:CodePropertyReferenceExpression PropertyName="Coupons">
                                                                <ns0:CodePropertyReferenceExpression.TargetObject>
                                                                    <ns0:CodeThisReferenceExpression />
                                                                </ns0:CodePropertyReferenceExpression.TargetObject>
                                                            </ns0:CodePropertyReferenceExpression>
                                                        </ns0:CodeMethodReferenceExpression.TargetObject>
                                                    </ns0:CodeMethodReferenceExpression>
                                                </ns0:CodeMethodInvokeExpression.Method>
                                            </ns0:CodeMethodInvokeExpression>
                                        </ns0:CodeFieldReferenceExpression.TargetObject>
                                    </ns0:CodeFieldReferenceExpression>
                                </ns0:CodeBinaryOperatorExpression.Left>
                                <ns0:CodeBinaryOperatorExpression.Right>
                                    <ns0:CodeFieldReferenceExpression FieldName="FreeItem">
                                        <ns0:CodeFieldReferenceExpression.TargetObject>
                                            <ns0:CodeTypeReferenceExpression Type="Microsoft.Samples.Workflow.Tutorials.RulesAndConditions.DiscountWorkflow+CouponType" />
                                        </ns0:CodeFieldReferenceExpression.TargetObject>
                                    </ns0:CodeFieldReferenceExpression>
                                </ns0:CodeBinaryOperatorExpression.Right>
                            </ns0:CodeBinaryOperatorExpression>
                        </ns0:CodeBinaryOperatorExpression.Left>
                        <ns0:CodeBinaryOperatorExpression.Right>
                            <ns0:CodeBinaryOperatorExpression Operator="GreaterThanOrEqual">
                                <ns0:CodeBinaryOperatorExpression.Left>
                                    <ns0:CodePropertyReferenceExpression PropertyName="Count">
                                        <ns0:CodePropertyReferenceExpression.TargetObject>
                                            <ns0:CodePropertyReferenceExpression PropertyName="Items">
                                                <ns0:CodePropertyReferenceExpression.TargetObject>
                                                    <ns0:CodeThisReferenceExpression />
                                                </ns0:CodePropertyReferenceExpression.TargetObject>
                                            </ns0:CodePropertyReferenceExpression>
                                        </ns0:CodePropertyReferenceExpression.TargetObject>
                                    </ns0:CodePropertyReferenceExpression>
                                </ns0:CodeBinaryOperatorExpression.Left>
                                <ns0:CodeBinaryOperatorExpression.Right>
                                    <ns0:CodePrimitiveExpression>
                                        <ns0:CodePrimitiveExpression.Value>
                                            <ns1:Int32 xmlns:ns1="clr-namespace:System;Assembly=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">5</ns1:Int32>
                                        </ns0:CodePrimitiveExpression.Value>
                                    </ns0:CodePrimitiveExpression>
                                </ns0:CodeBinaryOperatorExpression.Right>
                            </ns0:CodeBinaryOperatorExpression>
                        </ns0:CodeBinaryOperatorExpression.Right>
                    </ns0:CodeBinaryOperatorExpression>
                </RuleExpressionCondition.Expression>
            </RuleExpressionCondition>
        </Rule.Condition>
    </Rule>
    

So erstellen Sie die applyPercentageOffHighest-Regel:

  • Kopieren Sie folgende Rule in das RuleSet.Rules-Element, das Sie in der vorherigen Prozedur erstellt haben.

    <Rule Name="applyPercentageOffHighest" ReevaluationBehavior="Always" Priority="0" Description="{p5:Null}" Active="True" xmlns:p5="https://schemas.microsoft.com/winfx/2006/xaml">
        <Rule.ThenActions>
            <RuleStatementAction>
                <RuleStatementAction.CodeDomStatement>
                    <ns0:CodeAssignStatement LinePragma="{p5:Null}" xmlns:ns0="clr-namespace:System.CodeDom;Assembly=System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                        <ns0:CodeAssignStatement.Left>
                            <ns0:CodePropertyReferenceExpression PropertyName="Discount">
                                <ns0:CodePropertyReferenceExpression.TargetObject>
                                    <ns0:CodeThisReferenceExpression />
                                </ns0:CodePropertyReferenceExpression.TargetObject>
                            </ns0:CodePropertyReferenceExpression>
                        </ns0:CodeAssignStatement.Left>
                        <ns0:CodeAssignStatement.Right>
                            <ns0:CodeBinaryOperatorExpression Operator="Add">
                                <ns0:CodeBinaryOperatorExpression.Left>
                                    <ns0:CodePropertyReferenceExpression PropertyName="Discount">
                                        <ns0:CodePropertyReferenceExpression.TargetObject>
                                            <ns0:CodeThisReferenceExpression />
                                        </ns0:CodePropertyReferenceExpression.TargetObject>
                                    </ns0:CodePropertyReferenceExpression>
                                </ns0:CodeBinaryOperatorExpression.Left>
                                <ns0:CodeBinaryOperatorExpression.Right>
                                    <ns0:CodeBinaryOperatorExpression Operator="Multiply">
                                        <ns0:CodeBinaryOperatorExpression.Left>
                                            <ns0:CodeFieldReferenceExpression FieldName="price">
                                                <ns0:CodeFieldReferenceExpression.TargetObject>
                                                    <ns0:CodeIndexerExpression>
                                                        <ns0:CodeIndexerExpression.Indices>
                                                            <ns0:CodeBinaryOperatorExpression Operator="Subtract">
                                                                <ns0:CodeBinaryOperatorExpression.Left>
                                                                    <ns0:CodePropertyReferenceExpression PropertyName="Count">
                                                                        <ns0:CodePropertyReferenceExpression.TargetObject>
                                                                            <ns0:CodePropertyReferenceExpression PropertyName="Items">
                                                                                <ns0:CodePropertyReferenceExpression.TargetObject>
                                                                                    <ns0:CodeThisReferenceExpression />
                                                                                </ns0:CodePropertyReferenceExpression.TargetObject>
                                                                            </ns0:CodePropertyReferenceExpression>
                                                                        </ns0:CodePropertyReferenceExpression.TargetObject>
                                                                    </ns0:CodePropertyReferenceExpression>
                                                                </ns0:CodeBinaryOperatorExpression.Left>
                                                                <ns0:CodeBinaryOperatorExpression.Right>
                                                                    <ns0:CodePrimitiveExpression>
                                                                        <ns0:CodePrimitiveExpression.Value>
                                                                            <ns1:Int32 xmlns:ns1="clr-namespace:System;Assembly=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">1</ns1:Int32>
                                                                        </ns0:CodePrimitiveExpression.Value>
                                                                    </ns0:CodePrimitiveExpression>
                                                                </ns0:CodeBinaryOperatorExpression.Right>
                                                            </ns0:CodeBinaryOperatorExpression>
                                                        </ns0:CodeIndexerExpression.Indices>
                                                        <ns0:CodeIndexerExpression.TargetObject>
                                                            <ns0:CodePropertyReferenceExpression PropertyName="Items">
                                                                <ns0:CodePropertyReferenceExpression.TargetObject>
                                                                    <ns0:CodeThisReferenceExpression />
                                                                </ns0:CodePropertyReferenceExpression.TargetObject>
                                                            </ns0:CodePropertyReferenceExpression>
                                                        </ns0:CodeIndexerExpression.TargetObject>
                                                    </ns0:CodeIndexerExpression>
                                                </ns0:CodeFieldReferenceExpression.TargetObject>
                                            </ns0:CodeFieldReferenceExpression>
                                        </ns0:CodeBinaryOperatorExpression.Left>
                                        <ns0:CodeBinaryOperatorExpression.Right>
                                            <ns0:CodePrimitiveExpression>
                                                <ns0:CodePrimitiveExpression.Value>
                                                    <ns1:Double xmlns:ns1="clr-namespace:System;Assembly=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">0.1</ns1:Double>
                                                </ns0:CodePrimitiveExpression.Value>
                                            </ns0:CodePrimitiveExpression>
                                        </ns0:CodeBinaryOperatorExpression.Right>
                                    </ns0:CodeBinaryOperatorExpression>
                                </ns0:CodeBinaryOperatorExpression.Right>
                            </ns0:CodeBinaryOperatorExpression>
                        </ns0:CodeAssignStatement.Right>
                    </ns0:CodeAssignStatement>
                </RuleStatementAction.CodeDomStatement>
            </RuleStatementAction>
        </Rule.ThenActions>
        <Rule.Condition>
            <RuleExpressionCondition Name="{p5:Null}">
                <RuleExpressionCondition.Expression>
                    <ns0:CodeBinaryOperatorExpression Operator="ValueEquality" xmlns:ns0="clr-namespace:System.CodeDom;Assembly=System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                        <ns0:CodeBinaryOperatorExpression.Left>
                            <ns0:CodeFieldReferenceExpression FieldName="type">
                                <ns0:CodeFieldReferenceExpression.TargetObject>
                                    <ns0:CodeMethodInvokeExpression>
                                        <ns0:CodeMethodInvokeExpression.Method>
                                            <ns0:CodeMethodReferenceExpression MethodName="Peek">
                                                <ns0:CodeMethodReferenceExpression.TargetObject>
                                                    <ns0:CodePropertyReferenceExpression PropertyName="Coupons">
                                                        <ns0:CodePropertyReferenceExpression.TargetObject>
                                                            <ns0:CodeThisReferenceExpression />
                                                        </ns0:CodePropertyReferenceExpression.TargetObject>
                                                    </ns0:CodePropertyReferenceExpression>
                                                </ns0:CodeMethodReferenceExpression.TargetObject>
                                            </ns0:CodeMethodReferenceExpression>
                                        </ns0:CodeMethodInvokeExpression.Method>
                                    </ns0:CodeMethodInvokeExpression>
                                </ns0:CodeFieldReferenceExpression.TargetObject>
                            </ns0:CodeFieldReferenceExpression>
                        </ns0:CodeBinaryOperatorExpression.Left>
                        <ns0:CodeBinaryOperatorExpression.Right>
                            <ns0:CodeFieldReferenceExpression FieldName="PercentageOffHighest">
                                <ns0:CodeFieldReferenceExpression.TargetObject>
                                    <ns0:CodeTypeReferenceExpression Type="Microsoft.Samples.Workflow.Tutorials.RulesAndConditions.DiscountWorkflow+CouponType" />
                                </ns0:CodeFieldReferenceExpression.TargetObject>
                            </ns0:CodeFieldReferenceExpression>
                        </ns0:CodeBinaryOperatorExpression.Right>
                    </ns0:CodeBinaryOperatorExpression>
                </RuleExpressionCondition.Expression>
            </RuleExpressionCondition>
        </Rule.Condition>
    </Rule>
    

Der Titel der Prozedur

  • Kopieren Sie folgende Rule in das RuleSet.Rules-Element, das Sie in der vorherigen Prozedur erstellt haben.

    <Rule Name="applyPercentageOffLowest" ReevaluationBehavior="Always" Priority="0" Description="{p5:Null}" Active="True" xmlns:p5="https://schemas.microsoft.com/winfx/2006/xaml">
        <Rule.ThenActions>
            <RuleStatementAction>
                <RuleStatementAction.CodeDomStatement>
                    <ns0:CodeAssignStatement LinePragma="{p5:Null}" xmlns:ns0="clr-namespace:System.CodeDom;Assembly=System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                        <ns0:CodeAssignStatement.Left>
                            <ns0:CodePropertyReferenceExpression PropertyName="Discount">
                                <ns0:CodePropertyReferenceExpression.TargetObject>
                                    <ns0:CodeThisReferenceExpression />
                                </ns0:CodePropertyReferenceExpression.TargetObject>
                            </ns0:CodePropertyReferenceExpression>
                        </ns0:CodeAssignStatement.Left>
                        <ns0:CodeAssignStatement.Right>
                            <ns0:CodeBinaryOperatorExpression Operator="Add">
                                <ns0:CodeBinaryOperatorExpression.Left>
                                    <ns0:CodePropertyReferenceExpression PropertyName="Discount">
                                        <ns0:CodePropertyReferenceExpression.TargetObject>
                                            <ns0:CodeThisReferenceExpression />
                                        </ns0:CodePropertyReferenceExpression.TargetObject>
                                    </ns0:CodePropertyReferenceExpression>
                                </ns0:CodeBinaryOperatorExpression.Left>
                                <ns0:CodeBinaryOperatorExpression.Right>
                                    <ns0:CodeBinaryOperatorExpression Operator="Multiply">
                                        <ns0:CodeBinaryOperatorExpression.Left>
                                            <ns0:CodeFieldReferenceExpression FieldName="price">
                                                <ns0:CodeFieldReferenceExpression.TargetObject>
                                                    <ns0:CodeIndexerExpression>
                                                        <ns0:CodeIndexerExpression.Indices>
                                                            <ns0:CodePrimitiveExpression>
                                                                <ns0:CodePrimitiveExpression.Value>
                                                                    <ns1:Int32 xmlns:ns1="clr-namespace:System;Assembly=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">0</ns1:Int32>
                                                                </ns0:CodePrimitiveExpression.Value>
                                                            </ns0:CodePrimitiveExpression>
                                                        </ns0:CodeIndexerExpression.Indices>
                                                        <ns0:CodeIndexerExpression.TargetObject>
                                                            <ns0:CodePropertyReferenceExpression PropertyName="Items">
                                                                <ns0:CodePropertyReferenceExpression.TargetObject>
                                                                    <ns0:CodeThisReferenceExpression />
                                                                </ns0:CodePropertyReferenceExpression.TargetObject>
                                                            </ns0:CodePropertyReferenceExpression>
                                                        </ns0:CodeIndexerExpression.TargetObject>
                                                    </ns0:CodeIndexerExpression>
                                                </ns0:CodeFieldReferenceExpression.TargetObject>
                                            </ns0:CodeFieldReferenceExpression>
                                        </ns0:CodeBinaryOperatorExpression.Left>
                                        <ns0:CodeBinaryOperatorExpression.Right>
                                            <ns0:CodePrimitiveExpression>
                                                <ns0:CodePrimitiveExpression.Value>
                                                    <ns1:Double xmlns:ns1="clr-namespace:System;Assembly=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">0.15</ns1:Double>
                                                </ns0:CodePrimitiveExpression.Value>
                                            </ns0:CodePrimitiveExpression>
                                        </ns0:CodeBinaryOperatorExpression.Right>
                                    </ns0:CodeBinaryOperatorExpression>
                                </ns0:CodeBinaryOperatorExpression.Right>
                            </ns0:CodeBinaryOperatorExpression>
                        </ns0:CodeAssignStatement.Right>
                    </ns0:CodeAssignStatement>
                </RuleStatementAction.CodeDomStatement>
            </RuleStatementAction>
        </Rule.ThenActions>
        <Rule.Condition>
            <RuleExpressionCondition Name="{p5:Null}">
                <RuleExpressionCondition.Expression>
                    <ns0:CodeBinaryOperatorExpression Operator="ValueEquality" xmlns:ns0="clr-namespace:System.CodeDom;Assembly=System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                        <ns0:CodeBinaryOperatorExpression.Left>
                            <ns0:CodeFieldReferenceExpression FieldName="type">
                                <ns0:CodeFieldReferenceExpression.TargetObject>
                                    <ns0:CodeMethodInvokeExpression>
                                        <ns0:CodeMethodInvokeExpression.Method>
                                            <ns0:CodeMethodReferenceExpression MethodName="Peek">
                                                <ns0:CodeMethodReferenceExpression.TargetObject>
                                                    <ns0:CodePropertyReferenceExpression PropertyName="Coupons">
                                                        <ns0:CodePropertyReferenceExpression.TargetObject>
                                                            <ns0:CodeThisReferenceExpression />
                                                        </ns0:CodePropertyReferenceExpression.TargetObject>
                                                    </ns0:CodePropertyReferenceExpression>
                                                </ns0:CodeMethodReferenceExpression.TargetObject>
                                            </ns0:CodeMethodReferenceExpression>
                                        </ns0:CodeMethodInvokeExpression.Method>
                                    </ns0:CodeMethodInvokeExpression>
                                </ns0:CodeFieldReferenceExpression.TargetObject>
                            </ns0:CodeFieldReferenceExpression>
                        </ns0:CodeBinaryOperatorExpression.Left>
                        <ns0:CodeBinaryOperatorExpression.Right>
                            <ns0:CodeFieldReferenceExpression FieldName="PercentageOffLowest">
                                <ns0:CodeFieldReferenceExpression.TargetObject>
                                    <ns0:CodeTypeReferenceExpression Type="Microsoft.Samples.Workflow.Tutorials.RulesAndConditions.DiscountWorkflow+CouponType" />
                                </ns0:CodeFieldReferenceExpression.TargetObject>
                            </ns0:CodeFieldReferenceExpression>
                        </ns0:CodeBinaryOperatorExpression.Right>
                    </ns0:CodeBinaryOperatorExpression>
                </RuleExpressionCondition.Expression>
            </RuleExpressionCondition>
        </Rule.Condition>
    </Rule>
    

So erstellen Sie die applyPercentageOffLowest-Regel:

  • Kopieren Sie folgende Rule in das RuleSet.Rules-Element, das Sie in der vorherigen Prozedur erstellt haben.

    <Rule Name="applyPercentageOffLowest" ReevaluationBehavior="Always" Priority="0" Description="{p5:Null}" Active="True" xmlns:p5="https://schemas.microsoft.com/winfx/2006/xaml">
        <Rule.ThenActions>
            <RuleStatementAction>
                <RuleStatementAction.CodeDomStatement>
                    <ns0:CodeAssignStatement LinePragma="{p5:Null}" xmlns:ns0="clr-namespace:System.CodeDom;Assembly=System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                        <ns0:CodeAssignStatement.Left>
                            <ns0:CodePropertyReferenceExpression PropertyName="Discount">
                                <ns0:CodePropertyReferenceExpression.TargetObject>
                                    <ns0:CodeThisReferenceExpression />
                                </ns0:CodePropertyReferenceExpression.TargetObject>
                            </ns0:CodePropertyReferenceExpression>
                        </ns0:CodeAssignStatement.Left>
                        <ns0:CodeAssignStatement.Right>
                            <ns0:CodeBinaryOperatorExpression Operator="Add">
                                <ns0:CodeBinaryOperatorExpression.Left>
                                    <ns0:CodePropertyReferenceExpression PropertyName="Discount">
                                        <ns0:CodePropertyReferenceExpression.TargetObject>
                                            <ns0:CodeThisReferenceExpression />
                                        </ns0:CodePropertyReferenceExpression.TargetObject>
                                    </ns0:CodePropertyReferenceExpression>
                                </ns0:CodeBinaryOperatorExpression.Left>
                                <ns0:CodeBinaryOperatorExpression.Right>
                                    <ns0:CodeBinaryOperatorExpression Operator="Multiply">
                                        <ns0:CodeBinaryOperatorExpression.Left>
                                            <ns0:CodeFieldReferenceExpression FieldName="price">
                                                <ns0:CodeFieldReferenceExpression.TargetObject>
                                                    <ns0:CodeIndexerExpression>
                                                        <ns0:CodeIndexerExpression.Indices>
                                                            <ns0:CodePrimitiveExpression>
                                                                <ns0:CodePrimitiveExpression.Value>
                                                                    <ns1:Int32 xmlns:ns1="clr-namespace:System;Assembly=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">0</ns1:Int32>
                                                                </ns0:CodePrimitiveExpression.Value>
                                                            </ns0:CodePrimitiveExpression>
                                                        </ns0:CodeIndexerExpression.Indices>
                                                        <ns0:CodeIndexerExpression.TargetObject>
                                                            <ns0:CodePropertyReferenceExpression PropertyName="Items">
                                                                <ns0:CodePropertyReferenceExpression.TargetObject>
                                                                    <ns0:CodeThisReferenceExpression />
                                                                </ns0:CodePropertyReferenceExpression.TargetObject>
                                                            </ns0:CodePropertyReferenceExpression>
                                                        </ns0:CodeIndexerExpression.TargetObject>
                                                    </ns0:CodeIndexerExpression>
                                                </ns0:CodeFieldReferenceExpression.TargetObject>
                                            </ns0:CodeFieldReferenceExpression>
                                        </ns0:CodeBinaryOperatorExpression.Left>
                                        <ns0:CodeBinaryOperatorExpression.Right>
                                            <ns0:CodePrimitiveExpression>
                                                <ns0:CodePrimitiveExpression.Value>
                                                    <ns1:Double xmlns:ns1="clr-namespace:System;Assembly=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">0.15</ns1:Double>
                                                </ns0:CodePrimitiveExpression.Value>
                                            </ns0:CodePrimitiveExpression>
                                        </ns0:CodeBinaryOperatorExpression.Right>
                                    </ns0:CodeBinaryOperatorExpression>
                                </ns0:CodeBinaryOperatorExpression.Right>
                            </ns0:CodeBinaryOperatorExpression>
                        </ns0:CodeAssignStatement.Right>
                    </ns0:CodeAssignStatement>
                </RuleStatementAction.CodeDomStatement>
            </RuleStatementAction>
        </Rule.ThenActions>
        <Rule.Condition>
            <RuleExpressionCondition Name="{p5:Null}">
                <RuleExpressionCondition.Expression>
                    <ns0:CodeBinaryOperatorExpression Operator="ValueEquality" xmlns:ns0="clr-namespace:System.CodeDom;Assembly=System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                        <ns0:CodeBinaryOperatorExpression.Left>
                            <ns0:CodeFieldReferenceExpression FieldName="type">
                                <ns0:CodeFieldReferenceExpression.TargetObject>
                                    <ns0:CodeMethodInvokeExpression>
                                        <ns0:CodeMethodInvokeExpression.Method>
                                            <ns0:CodeMethodReferenceExpression MethodName="Peek">
                                                <ns0:CodeMethodReferenceExpression.TargetObject>
                                                    <ns0:CodePropertyReferenceExpression PropertyName="Coupons">
                                                        <ns0:CodePropertyReferenceExpression.TargetObject>
                                                            <ns0:CodeThisReferenceExpression />
                                                        </ns0:CodePropertyReferenceExpression.TargetObject>
                                                    </ns0:CodePropertyReferenceExpression>
                                                </ns0:CodeMethodReferenceExpression.TargetObject>
                                            </ns0:CodeMethodReferenceExpression>
                                        </ns0:CodeMethodInvokeExpression.Method>
                                    </ns0:CodeMethodInvokeExpression>
                                </ns0:CodeFieldReferenceExpression.TargetObject>
                            </ns0:CodeFieldReferenceExpression>
                        </ns0:CodeBinaryOperatorExpression.Left>
                        <ns0:CodeBinaryOperatorExpression.Right>
                            <ns0:CodeFieldReferenceExpression FieldName="PercentageOffLowest">
                                <ns0:CodeFieldReferenceExpression.TargetObject>
                                    <ns0:CodeTypeReferenceExpression Type="Microsoft.Samples.Workflow.Tutorials.RulesAndConditions.DiscountWorkflow+CouponType" />
                                </ns0:CodeFieldReferenceExpression.TargetObject>
                            </ns0:CodeFieldReferenceExpression>
                        </ns0:CodeBinaryOperatorExpression.Right>
                    </ns0:CodeBinaryOperatorExpression>
                </RuleExpressionCondition.Expression>
            </RuleExpressionCondition>
        </Rule.Condition>
    </Rule>
    

So erstellen Sie die applyPercentageOffTotal-Regel:

  • Kopieren Sie folgende Rule in das RuleSet.Rules-Element, das Sie in der vorherigen Prozedur erstellt haben.

    <Rule Name="applyPercentageOffTotal" ReevaluationBehavior="Always" Priority="0" Description="{p5:Null}" Active="True" xmlns:p5="https://schemas.microsoft.com/winfx/2006/xaml">
        <Rule.ThenActions>
            <RuleStatementAction>
                <RuleStatementAction.CodeDomStatement>
                    <ns0:CodeAssignStatement LinePragma="{p5:Null}" xmlns:ns0="clr-namespace:System.CodeDom;Assembly=System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                        <ns0:CodeAssignStatement.Left>
                            <ns0:CodePropertyReferenceExpression PropertyName="Discount">
                                <ns0:CodePropertyReferenceExpression.TargetObject>
                                    <ns0:CodeThisReferenceExpression />
                                </ns0:CodePropertyReferenceExpression.TargetObject>
                            </ns0:CodePropertyReferenceExpression>
                        </ns0:CodeAssignStatement.Left>
                        <ns0:CodeAssignStatement.Right>
                            <ns0:CodeBinaryOperatorExpression Operator="Add">
                                <ns0:CodeBinaryOperatorExpression.Left>
                                    <ns0:CodePropertyReferenceExpression PropertyName="Discount">
                                        <ns0:CodePropertyReferenceExpression.TargetObject>
                                            <ns0:CodeThisReferenceExpression />
                                        </ns0:CodePropertyReferenceExpression.TargetObject>
                                    </ns0:CodePropertyReferenceExpression>
                                </ns0:CodeBinaryOperatorExpression.Left>
                                <ns0:CodeBinaryOperatorExpression.Right>
                                    <ns0:CodeBinaryOperatorExpression Operator="Multiply">
                                        <ns0:CodeBinaryOperatorExpression.Left>
                                            <ns0:CodePropertyReferenceExpression PropertyName="SubTotal">
                                                <ns0:CodePropertyReferenceExpression.TargetObject>
                                                    <ns0:CodeThisReferenceExpression />
                                                </ns0:CodePropertyReferenceExpression.TargetObject>
                                            </ns0:CodePropertyReferenceExpression>
                                        </ns0:CodeBinaryOperatorExpression.Left>
                                        <ns0:CodeBinaryOperatorExpression.Right>
                                            <ns0:CodePrimitiveExpression>
                                                <ns0:CodePrimitiveExpression.Value>
                                                    <ns1:Double xmlns:ns1="clr-namespace:System;Assembly=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">0.2</ns1:Double>
                                                </ns0:CodePrimitiveExpression.Value>
                                            </ns0:CodePrimitiveExpression>
                                        </ns0:CodeBinaryOperatorExpression.Right>
                                    </ns0:CodeBinaryOperatorExpression>
                                </ns0:CodeBinaryOperatorExpression.Right>
                            </ns0:CodeBinaryOperatorExpression>
                        </ns0:CodeAssignStatement.Right>
                    </ns0:CodeAssignStatement>
                </RuleStatementAction.CodeDomStatement>
            </RuleStatementAction>
        </Rule.ThenActions>
        <Rule.Condition>
            <RuleExpressionCondition Name="{p5:Null}">
                <RuleExpressionCondition.Expression>
                    <ns0:CodeBinaryOperatorExpression Operator="ValueEquality" xmlns:ns0="clr-namespace:System.CodeDom;Assembly=System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                        <ns0:CodeBinaryOperatorExpression.Left>
                            <ns0:CodeFieldReferenceExpression FieldName="type">
                                <ns0:CodeFieldReferenceExpression.TargetObject>
                                    <ns0:CodeMethodInvokeExpression>
                                        <ns0:CodeMethodInvokeExpression.Method>
                                            <ns0:CodeMethodReferenceExpression MethodName="Peek">
                                                <ns0:CodeMethodReferenceExpression.TargetObject>
                                                    <ns0:CodePropertyReferenceExpression PropertyName="Coupons">
                                                        <ns0:CodePropertyReferenceExpression.TargetObject>
                                                            <ns0:CodeThisReferenceExpression />
                                                        </ns0:CodePropertyReferenceExpression.TargetObject>
                                                    </ns0:CodePropertyReferenceExpression>
                                                </ns0:CodeMethodReferenceExpression.TargetObject>
                                            </ns0:CodeMethodReferenceExpression>
                                        </ns0:CodeMethodInvokeExpression.Method>
                                    </ns0:CodeMethodInvokeExpression>
                                </ns0:CodeFieldReferenceExpression.TargetObject>
                            </ns0:CodeFieldReferenceExpression>
                        </ns0:CodeBinaryOperatorExpression.Left>
                        <ns0:CodeBinaryOperatorExpression.Right>
                            <ns0:CodeFieldReferenceExpression FieldName="PercentageOffTotal">
                                <ns0:CodeFieldReferenceExpression.TargetObject>
                                    <ns0:CodeTypeReferenceExpression Type="Microsoft.Samples.Workflow.Tutorials.RulesAndConditions.DiscountWorkflow+CouponType" />
                                </ns0:CodeFieldReferenceExpression.TargetObject>
                            </ns0:CodeFieldReferenceExpression>
                        </ns0:CodeBinaryOperatorExpression.Right>
                    </ns0:CodeBinaryOperatorExpression>
                </RuleExpressionCondition.Expression>
            </RuleExpressionCondition>
        </Rule.Condition>
    </Rule>
    

Kompilieren des Codes

Informationen zum Kompilieren des Codes finden Sie unter Kompilieren des Codes.

Eine fertig gestellte Version des Lernprogramms finden Sie unter Abgeschlossenes Lernprogramm zu Regeln und Bedingungen.

Siehe auch

Referenz

ConditionedActivityGroup
UntilCondition
RuleConditionReference
ConditionName
Activities
WhenConditionProperty
SetValue

Weitere Ressourcen

IfElse With Rules
Rules and Conditions

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.