Freigeben über


Aufgabe 1: Erstellen der ConditionedActivityGroup-Aktivität

Die ConditionedActivityGroup-Aktivität wird verwendet, um alle in ihr enthaltenen untergeordneten Aktivitäten auszuführen, bis eine bestimmte Bedingung erfüllt wird. Darüber hinaus kann jede untergeordnete Aktivität auch eine Bedingung enthalten, um zu bestimmen, ob sie während der aktuellen Iteration ausgeführt werden soll.

Im Rahmen dieser Aufgabe erstellen Sie eine ConditionedActivityGroup-Aktivität, von der alle untergeordneten Aktivitäten ausgeführt werden, bis sich keine weiteren Coupons mehr in der Warteschlange befinden. Eine CodeActivity-Aktivität wird als letztes untergeordnetes Element der ConditionedActivityGroup-Aktivität verwendet, um den ersten Coupon aus der Warteschlange zu entfernen. Der Prozess wird wiederholt, bis alle Coupons verwendet wurden.

Hinweis

Sie werden aufgefordert, die Übungen der Reihe nach auszuführen. Dies ist jedoch nicht erforderlich. Sie können durch Öffnen des Beispielprojekts bei dieser Übung beginnen und mit den Schritten im folgenden Abschnitt fortfahren.

So erstellen Sie die ConditionedActivityGroup:

  1. Erstellen Sie in der DiscountWorkflow-Klasse eine private ConditionedActivityGroup-Variable mit dem Namen conditionedActivityGroup1. Diese ConditionedActivityGroup-Aktivität durchläuft alle Coupons in der Coupons-Auflistung und wendet die Couponlogik auf das Rabattfeld an, bis sich keine Coupons mehr in der Auflistung befinden.

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

    Dieses Objekt sollte nach dem Code am Anfang der Methode hinzugefügt werden, durch den die CanModifyActivities-Eigenschaft auf true festgelegt wird.

    RuleConditionReference ruleconditionreference2 = new
        RuleConditionReference();
    RuleConditionReference ruleconditionreference3 = new
        RuleConditionReference();
    
  3. Erstellen Sie in der InitializeComponent-Methode zwei lokale RuleConditionReference-Variablen mit den Namen ruleconditionreference2 und ruleconditionreference3, und erstellen Sie eine Instanz jedes Objekts. Der ruleconditionreference2-Parameter wird verwendet, um zu bestimmen, ob sich noch Coupons in der Coupon-Auflistung befinden. Dies wird durch Auswerten der Regel mithilfe der UntilCondition-Eigenschaft der ConditionedActivityGroup erreicht.

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

    Dies sollte erfolgen, bevor Sie die Name-Eigenschaft des elseHasCoupons-Objekts festlegen.

    this.conditionedActivityGroup1.Name = "conditionedActivityGroup1";
    ruleconditionreference2.ConditionName = "noCouponsCondition";
    this.conditionedActivityGroup1.UntilCondition = ruleconditionreference2;
    
  5. Legen Sie den Name des conditionedActivityGroup1-Objekts auf den Wert "conditionedActivityGroup1" fest.

  6. Legen Sie die ConditionName-Eigenschaft des ruleconditionreference2-Objekts auf "noCouponsCondition" fest.

    Hinweis

    Sie erstellen die noCouponsCondition-Regel in der nächsten Prozedur.

  7. Legen Sie die UntilCondition-Eigenschaft des conditionedActivityGroup1-Objekts auf ruleconditionreference2 fest.

    private CodeActivity removeCoupon;
    

So erstellen Sie die CodeActivity, um Coupons zu entfernen:

  1. Erstellen Sie in der DiscountWorkflow-Klasse eine private CodeActivity-Variable mit dem Namen removeCoupon.

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

    Fügen Sie es nach dem Code hinzu, in dem die CanModifyActivities-Eigenschaft festgelegt wird.

    this.conditionedActivityGroup1.Activities.Add(this.removeCoupon);
    
  3. Fügen Sie in der InitializeComponent-Methode das removeCoupon-Objekt zur Activities-Auflistung des conditionedActivityGroup-Objekts hinzu, indem Sie die Add-Methode verwenden.

    Dies sollte erfolgen, bevor Sie die Name-Eigenschaft des conditionedActivityGroup1-Objekts festlegen.

    ruleconditionreference3.ConditionName = "couponsRemaining";
    this.removeCoupon.Name = "removeCoupon";
    
  4. Legen Sie in der InitializeComponent-Methode nach der Zeile, in der die UntilCondition des conditionedActivityGroup1-Objekts festgelegt ist, die ConditionName-Eigenschaft des ruleconditionreference3-Objekts auf "couponsRemaining" fest. In diesem Fall wird die couponsRemainingCodeActivity so lang ausgeführt, wie diese Bedingung true bleibt.

    Hinweis

    Sie erstellen die couponsRemaining-Regel in der nächsten Prozedur.

  5. Legen Sie die Name-Eigenschaft des removeCoupon-Objekts auf den Wert "removeCoupon" fest.

    this.removeCoupon.ExecuteCode += new
        System.EventHandler(this.removeCoupon_ExecuteCode);
    
  6. Fügen Sie einen Ereignishandler dem ExecuteCode-Ereignis hinzu, das im removeCoupon-Objekt definiert ist.

    Legen Sie den Namen des Ereignishandlers auf removeCoupon_ExecuteCode fest.

    this.removeCoupon.SetValue(ConditionedActivityGroup.WhenConditionProperty,
        ruleconditionreference3);
    
  7. Rufen Sie die SetValue-Methode auf, die im removeCoupon-Objekt definiert ist, und geben Sie das WhenConditionProperty-Objekt und das ruleconditionreference3-Objekt als Parameter ein. Da es sich bei der WhenConditionProperty um eine DependencyProperty handelt, verwenden Sie die SetValue-Methode, um sie dem ruleconditionreference3-Objekt zuzuordnen.

    private void removeCoupon_ExecuteCode(object sender, EventArgs e)
    {
        this.Coupons.Dequeue();
    }
    
  8. Erstellen Sie in der DiscountWorkflow-Klasse eine private Methode mit dem Namen removeCoupon_ExecuteCode, und geben Sie ein Object mit dem Namen sender und ein EventArgs-Objekt mit dem Namen e als Parameter ein.

  9. Entfernen Sie in der removeCoupon_ExecuteCode-Methode einen Coupon aus der Queue-Auflistung, indem Sie die Dequeue-Methode aufrufen, die in der Coupons-Auflistung definiert ist.

    private PolicyActivity couponPolicy;
    

Erstellen der CodeActivity-When-Regel

Von der ConditionedActivityGroup in dieser Aufgabe werden alle untergeordneten Aktivitäten ausgeführt, bis sich keine weiteren Coupons in der Queue-Auflistung befinden. Durch die Regel in dieser Prozedur wird das in der vorherigen Aufgabe erstellte CodeActivity-Objekt nur ausgeführt, wenn sich noch Coupons in der Queue-Auflistung befinden. In der vorherigen Prozedur haben Sie der WhenCondition der CodeActivity die RuleConditionReference zugeordnet. In dieser Prozedur definieren Sie die Regel in der Regeldatei für das Projekt.

So erstellen Sie die CodeActivity-When-Regel:

  • Fügen Sie in der Datei DiscountWorkflow.rules die folgende Regel als untergeordnetes Element des RuleDefinitions.Conditions-Elements hinzu. In dieser Regel werden die im System.CodeDom-Namespace definierten Typen verwendet, um zu bestimmen, ob Coupons Queue immer noch zu verarbeitende Elemente aufweist, indem die Count-Eigenschaft dieser Auflistung ausgewertet wird.

    <RuleExpressionCondition Name="couponsRemaining">
        <RuleExpressionCondition.Expression>
            <ns0:CodeBinaryOperatorExpression Operator="GreaterThan" xmlns:ns0="clr-namespace:System.CodeDom;Assembly=System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                <ns0:CodeBinaryOperatorExpression.Left>
                    <ns0:CodePropertyReferenceExpression PropertyName="Count">
                        <ns0:CodePropertyReferenceExpression.TargetObject>
                            <ns0:CodePropertyReferenceExpression PropertyName="Coupons">
                                <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">0</ns1:Int32>
                        </ns0:CodePrimitiveExpression.Value>
                    </ns0:CodePrimitiveExpression>
                </ns0:CodeBinaryOperatorExpression.Right>
            </ns0:CodeBinaryOperatorExpression>
        </RuleExpressionCondition.Expression>
    </RuleExpressionCondition>
    

Kompilieren des Codes

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

Fügen Sie in Aufgabe 2: Erstellen von PolicyActivity und RuleSet eine einzelne PolicyActivity-Aktivität hinzu, von der ein für alle Coupontypen geeigneter Satz Regeln verwendet wird, und erstellen Sie eine PolicyActivity zum Ausführen von Regeln, durch die die Logik für jeden einzelnen Coupon ausgeführt wird.

Siehe auch

Aufgaben

Aufgabe 2: Erstellen von PolicyActivity und RuleSet

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.