방법: 워크플로에서 규칙 조건 사용
조건은 활동의 실행 동작을 제어하는 데 사용됩니다. 예를 들어, 조건을 사용하여 지정된 IfElseBranchActivity의 실행 여부를 결정할 수 있습니다. 조건을 CodeCondition으로 지정할 수 있습니다. 이 경우 방법: 코드로 조건 사용 항목에 표시된 대로 조건 옆의 코드에는 구성된 처리기가 포함됩니다. 또는 조건을 RuleConditionReference로 지정할 수 있습니다. RuleConditionReference는 워크플로 프로젝트의 워크플로와 연결된 .rules 파일 내의 RuleCondition 정의를 가리킵니다. 조건을 지원하는 모든 활동에 코드 조건 대신 규칙 조건을 사용할 수 있습니다.
개발자가 코드 조건 대신 규칙 조건을 사용하는 주된 이유는 규칙 조건이 모델의 일부가 되고 워크플로 인스턴스를 실행할 때 런타임에 동적으로 업데이트될 수 있기 때문입니다. 또한 규칙 조건을 사용하는 경우 모델의 일부인 고급 도구를 모델 위에 빌드하여 추가 작성 경험, 종속성 관리, 조건 간 분석 등을 제공할 수 있다는 장점도 있습니다.
활동 조건에 규칙 할당
활동 조건에 규칙을 사용하려면 확장명이 .rules인 파일을 만듭니다. 이 파일을 어셈블리에 포함 리소스로 컴파일해야 합니다. 다음 예제에서는 CustomerHasCouponsCondition이라는 단일 규칙 조건이 포함된 .rules 파일을 보여 줍니다. CustomHasCoupons라는 해당 워크플로 속성이 true를 반환하면 규칙은 true입니다.
<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>
활동에 규칙 조건을 사용하려면 새 RuleConditionReference를 만듭니다. ConditionName 속성을 .rules 파일에 포함된 RuleExpressionCondition 요소의 Name 특성 값과 동일하게 설정합니다. 위의 예에서 규칙의 Name은 CustomerHasCouponsCondition입니다. RuleConditionReference를 활동의 조건과 연결하려면 Condition 속성을 앞에서 만든 RuleConditionReference와 동일하게 설정합니다.
다음 워크플로 정의에서는 IfElseActivity와 함께 규칙 조건을 사용하는 방법을 보여 줍니다. 앞에서 만든 .rules 파일에서는 워크플로의 CustomerHasCoupons 속성 값을 사용하여 조건을 확인합니다. InitializeComponent 메서드에서 RuleConditionReference가 만들어져서 IfElseActivity의 Condition 속성에 할당됩니다.
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;
}
}
}
참고 항목
참조
RuleConditionReference
RuleCondition
CodeCondition
ConditionName
개념
방법: 코드로 조건 사용
규칙 조건에 대한 워크플로 변경
Windows Workflow Foundation에서 지원되는 CodeDom 형식
워크플로에서 RuleSet 사용
IfElseActivity 활동 사용
WhileActivity 활동 사용
ReplicatorActivity 활동 사용
ConditionedActivityGroup 활동 사용
기타 리소스
Copyright © 2007 by Microsoft Corporation. All rights reserved.