Freigeben über


Gewusst wie: Verwenden von Regelbedingungen in Workflows

Bedingungen werden verwendet, um das Ausführungsverhalten von Aktivitäten zu steuern – beispielsweise zur Bestimmung, ob eine bestimmte IfElseBranchActivity ausgeführt wird. Sie können Bedingungen als CodeCondition festlegen, die einen konfigurierten Handler im Code-Beside-Bereich besitzen, wie im Thema Gewusst wie: Verwenden von Bedingungen durch Code beschrieben. Oder Sie können Bedingungen als RuleConditionReference festlegen. Eine RuleConditionReference zeigt auf eine RuleCondition-Definition in einer .rules-Datei, die dem Workflow im Workflowprojekt zugeordnet ist. Sie können Regelbedingungen in allen Aktivitäten statt Codebedingungen verwenden, die Bedingungen unterstützen.

Der Hauptgrund für einen Entwickler für die Verwendung einer Regelbedingung anstelle einer Codebedingung ist, dass Regelbedingungen Teil des Modells werden und während der Ausführung von Workflowinstanzen bei Laufzeit dynamisch aktualisiert werden können. Ein zweiter Vorteil der Regelbedingungen ist, dass als Teil des Modells anspruchsvollere Tools zusätzlich zum Modell erstellt werden können, um weitere Erstellungsmöglichkeiten, eine Abhängigkeitsverwaltung, eine bedingungsübergreifende Analyse usw. bereitzustellen.

Zuweisen von Regeln zu Aktivitätsbedingungen

Zum Verwenden von Regeln für Aktivitätsbedingungen erstellen Sie eine Datei mit der Erweiterung .rules. Diese Datei muss als eingebettete Ressource in die Assembly kompiliert werden. Im folgenden Beispiel wird eine .rules-Datei dargestellt, die eine einzelne Regelbedingung mit der Bezeichnung CustomerHasCouponsCondition enthält. Die Auswertung der Regel ergibt true, wenn von der entsprechenden Workfloweigenschaft mit der Bezeichnung CustomHasCoupons der Wert true zurückgegeben wird.

<RuleDefinitions xmlns="https://schemas.microsoft.com/winfx/2006/xaml/workflow">
  <RuleDefinitions.Conditions>
    <RuleExpressionCondition Name="CustomerHasCouponsCondition">
      <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:CodePropertyReferenceExpression PropertyName="CustomerHasCoupons">
              <ns0:CodePropertyReferenceExpression.TargetObject>
                <ns0:CodeThisReferenceExpression />
              </ns0:CodePropertyReferenceExpression.TargetObject>
            </ns0:CodePropertyReferenceExpression>
          </ns0:CodeBinaryOperatorExpression.Left>
          <ns0:CodeBinaryOperatorExpression.Right>
            <ns0:CodePrimitiveExpression>
              <ns0:CodePrimitiveExpression.Value>
                <ns1:Boolean xmlns:ns1="clr-namespace:System;Assembly=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">true</ns1:Boolean>
              </ns0:CodePrimitiveExpression.Value>
            </ns0:CodePrimitiveExpression>
          </ns0:CodeBinaryOperatorExpression.Right>
        </ns0:CodeBinaryOperatorExpression>
      </RuleExpressionCondition.Expression>
    </RuleExpressionCondition>
  </RuleDefinitions.Conditions>
</RuleDefinitions>

Zum Verwenden einer Regelbedingung für eine Aktivität erstellen Sie eine neue RuleConditionReference. Legen Sie die ConditionName-Eigenschaft auf den gleichen Wert fest wie das Name-Attribut des RuleExpressionCondition-Elements in der .rules-Datei. In dem vorherigen Beispiel lautet der Name der Regel CustomerHasCouponsCondition. Um die RuleConditionReference zu einer Bedingung für eine Aktivität zuzuordnen, legen Sie die Condition-Eigenschaft auf den gleichen Wert fest wie die RuleConditionReference, die Sie erstellt haben.

In der folgenden Workflowdefinition ist dargestellt, wie Regelbedingungen mit einer IfElseActivity verwendet werden. Die zuvor erstellte RULES-Datei verwendet den Wert der CustomerHasCoupons-Eigenschaft im Workflow zum Auswerten der Bedingung. In der InitializeComponent-Methode wird eine RuleConditionReference erstellt und der Condition-Eigenschaft der IfElseActivity zugewiesen.

using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Collections;
using System.Drawing;
using System.Workflow.ComponentModel.Compiler;
using System.Workflow.ComponentModel.Serialization;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Design;
using System.Workflow.Runtime;
using System.Workflow.Activities;
using System.Workflow.Activities.Rules;

namespace CustomerCouponApplication
{
    public sealed partial class CouponsWorkflow: SequentialWorkflowActivity
    {
        private bool customerHasCoupons = false;

        private IfElseBranchActivity elseHasCoupons;
        private IfElseBranchActivity ifHasCoupons;
        private IfElseActivity checkForCouponsActivity;

        public bool CustomerHasCoupons
        {
            get { return customerHasCoupons; }
            set { customerHasCoupons = value; }
        }

        public CouponsWorkflow()
        {
            InitializeComponent();
        }

        [System.Diagnostics.DebuggerNonUserCode]
        private void InitializeComponent()
        {
            this.CanModifyActivities = true;
            
            System.Workflow.Activities.Rules.RuleConditionReference hasCouponsCondition = new System.Workflow.Activities.Rules.RuleConditionReference();
            this.elseHasCoupons = new System.Workflow.Activities.IfElseBranchActivity();
            this.ifHasCoupons = new System.Workflow.Activities.IfElseBranchActivity();
            this.checkForCouponsActivity = new System.Workflow.Activities.IfElseActivity();

            // 
            // ifHasCoupons
            // 
            hasCouponsCondition.ConditionName = "CustomerHasCouponsCondition";
            this.ifHasCoupons.Condition = hasCouponsCondition;
            this.ifHasCoupons.Name = "ifElseBranchActivity1";
            // 
            // elseHasCoupons
            // 
            this.elseHasCoupons.Name = "ifElseBranchActivity2";
            // 
            // checkForCouponsActivity
            // 
            this.checkForCouponsActivity.Activities.Add(this.ifHasCoupons);
            this.checkForCouponsActivity.Activities.Add(this.elseHasCoupons);
            this.checkForCouponsActivity.Name = "ifCustomerHasCouponsActivity";
            // 
            // Workflow1
            // 
            this.Activities.Add(this.checkForCouponsActivity);
            this.Name = "CouponsWorkflow";
            this.CanModifyActivities = false;
        }
    }
}

Siehe auch

Referenz

RuleConditionReference
RuleCondition
CodeCondition
ConditionName

Konzepte

Gewusst wie: Verwenden von Bedingungen durch Code
Workflowänderungen an Bedingungen
Von Windows Workflow Foundation unterstützte CodeDom-Typen
Verwenden von RuleSets in Workflows
Verwenden der IfElseActivity-Aktivität
Verwenden der WhileActivity-Aktivität
Verwenden der ReplicatorActivity-Aktivität
Verwenden der ConditionedActivityGroup-Aktivität

Weitere Ressourcen

Lernprogramm: Verwenden von Regeln und Bedingungen

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.