Thinking...

每日自省:内心的美德、处世的技巧、赚钱的技术
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

windows workflow学习笔记(二)

Posted on 2006-01-06 10:59  wellgo  阅读(288)  评论(0)    收藏  举报
 

在工作流中注册HOST的事件:

 

            //

            // EventDrive加入到Listen中,由Listen负责监听Host事件并通知EventDrive

            //

            this.listenApproveReject.Activities.Add(this.approveEventDriven);

            this.listenApproveReject.ID = "listenApproveReject";

            //

            // EventSinkActivity加入到EventDrive中,以接收事件数据

            //

            this.approveEventDriven.Activities.Add(this.approveEvent);

            this.approveEventDriven.ID = "approveEventDriven";

            //

            // 声明EventSinkActivity要注册的Host事件

            //

            this.approveEvent.EventName = "ExpenseReportApproved";

            this.approveEvent.ID = "approveEvent";

            this.approveEvent.InterfaceType = typeof(IExpenseReportService);

            this.approveEvent.Roles = null;

            this.approveEvent.Invoked += new System.EventHandler(this.approveEvent_Invoked)

如何进行条件分支

一个ElseIf中包含了两个IfElseBranch,在IfElseBranch中通过Condition指定计算是否进行本分支的条件对象CodeCondition,并将CodeConditionCondition加入到ConditionalExpression代理中执行业务逻辑。当工作流运行时就会据此确定是否要进行该IfElseBranch

this.ifNeedsLeadApproval.Activities.Add(this.invokeGetLeadApproval);

            this.ifNeedsLeadApproval.Condition = ifElseLogicStatement;

ifElseLogicStatement.Condition += new System.Workflow.Activities.ConditionalExpression(this.DetermineApprovalContact);

            this.ifNeedsLeadApproval.ID = "ifNeedsLeadApproval";

需要注意的是这两个IfElseBranch是有先后次序的,也就是我们希望的先if条件后else if

            this.EvaluateExpenseReportAmount.Activities.Add(this.ifNeedsLeadApproval);

            this.EvaluateExpenseReportAmount.Activities.Add(this.elseNeedsManagerApproval);

如果将上面两名换个位置,编译时就在报错: Activity 'elseNeedsManagerApproval' validation failed: Property 'Condition' is not set.

同样的道理,在顺序工作流中Activitie的执行次序都是由其加入主Activitie的先后次序决定的,这点也要注意。