WF-Activities之IfElseActivity和WhileActivity

 
IfElseActivity介绍:
两种基于条件的核心活动是 IfElse 和 Policy。 这里主要讲 I fElseActivity.
IfElse 活动的执行方式如同编程语言中的一条典型的 If 语句。它可以包含任意多基于条件的分支,以及一个在其他条件不满足情况下执行的默认分支
 

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

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

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

一、当你选择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 时,表示由指定的表达式的值是否符合条件定执行不同的分支,如下图所示

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

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

这时,我们突然发现原本只有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 条件设置一样,所以这里放在一块说.

转载于:https://www.cnblogs.com/GoodQ/archive/2007/04/05/701553.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值