神要保佑善良的人
有些话,适合烂在心里;有些痛苦,适合无声无息的忘记
 
IfElseActivity介绍:
两种基于条件的核心活动是 IfElse 和 Policy。这里主要讲IfElseActivity.
IfElse 活动的执行方式如同编程语言中的一条典型的 If 语句。它可以包含任意多基于条件的分支,以及一个在其他条件不满足情况下执行的默认分支
 

1.IfElseActivity有两个IfElseBranch子控件,分别作为IfElse的两个分支容器,系统自动添加,

2.其中左边(为真件条)IfElseBranch容器要设Condition

3.IfElse左边(为真件条)IfElseBranch容器的Condition有两个条件模式:Code Condition,Declarative Rule Condition


一、当你选择Code Condition

你要在Condition中指明相应的处理方法。注意在下拉表中是不会自动绑定的(个人觉得这是一个bug,自己搞了半天也没找到自动生成的办法),你必须先在代码中写好函数,这个函数必须接受对象和ConditionalEventArgs 类这两个参数,同时返回viod。ConditionalEventArgs 类的 Result 成员将设置为布尔值,代表条件的计算结果。如下所示:

 void codecondition1_Condition(object sender, ConditionalEventArgs e)

{

    //加入逻辑

e.Result = true;

}

在代码中写入上述代码后,Condition的下拉框就会出现codecondition1_Condition这个选项,选择它后,就规定好了这个分支的触发模式。

 

我们打开他的designer.cs可以看到这么几句话:

this.ifElseBranchActivity1.Condition = codecondition1;

codecondition1.Condition += new System.EventHandler<System.Workflow.Activities.ConditionalEventArgs>(this.codecondition1_Condition);

 这下明白了吧!^_^
 
 
二、当你选择Declarative Rule Condition时,表示由指定的表达式的值是否符合条件定执行不同的分支,如下图所示


当你点condition后面的图标时,他会弹出如下图的一个对话框


你可以在里直接编辑表达式。点击确定后就可以了。

这时,我们突然发现原本只有Workflow1.cs和Workflow1.designer.cs的文件突然又多了个文件,叫Workflow1.rules,打开一看,

<RuleDefinitions xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow">

<RuleDefinitions.Conditions>

<RuleExpressionCondition Name="Condition1">

<RuleExpressionCondition.Expression>

<ns0:CodeBinaryOperatorExpression Operator="Equality" xmlns:ns0="clr-namespace:System.CodeDom;Assembly=System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

<ns0:CodeBinaryOperatorExpression.Left>

<ns0:CodeFieldReferenceExpression FieldName="temp">

<ns0:CodeFieldReferenceExpression.TargetObject>

<ns0:CodeThisReferenceExpression />

</ns0:CodeFieldReferenceExpression.TargetObject>

</ns0:CodeFieldReferenceExpression>

</ns0:CodeBinaryOperatorExpression.Left>

<ns0:CodeBinaryOperatorExpression.Right>

<ns0:CodePrimitiveExpression>

<ns0:CodePrimitiveExpression.>

<ns1:Int32 xmlns:ns1="clr-namespace:System;Assembly=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">123</ns1:Int32>

</ns0:CodePrimitiveExpression.>

</ns0:CodePrimitiveExpression>

</ns0:CodeBinaryOperatorExpression.Right>

</ns0:CodeBinaryOperatorExpression>

</RuleExpressionCondition.Expression>

</RuleExpressionCondition>

</RuleDefinitions.Conditions>

</RuleDefinitions>

 

注意看到没,红色标志的名字是不是跟那个ConditionName的名字一样,哦,原来是为那个判断生成了一个这样的文件。

 

下面这段话是我摘的,还没体会到,等以后有体会时再写吧,不过看起来说的不错。

 

IfElse 活动可以进行嵌套以表示复杂的逻辑,但逻辑的设计仍然要在工作流中进行硬编码。这种方法既有利也有弊。有利的一面在于它使您可以根据您的需求准确设计工作流并将其与其他活动整合。当您需要创建一组规则来初始化部分工作流状态时,其不利的一面就显现出来。让一连串 IfElse 活动仅仅为工作流的内部成员分配值显然有些矫枉过正。

 

当您真正需要控制工作流的流动并连接各种工作块时,您应该使用 IfElse 活动组合。如果您所需要的仅仅是一个编程 If 语句序列,带有附加到分支的简单代码,那么最好使用 Policy 活动。Policy 活动是一个规则集合。与各规则相关的代码仅限于设置工作流属性,调用工作流方法或针对引用的程序集中的类型的静态方法。
 
 
WhileActivity介绍:
 
WhileActivity提供了一个条件循环容器,Condition有两个条件模式:Code Condition,Declarative Rule Condition其设置与IfElseActivity条件设置一样,所以这里放在一块说.
posted on 2007-04-05 16:43  GoodQ  阅读(517)  评论(0编辑  收藏  举报