在工作流中注册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,并将CodeCondition的Condition加入到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的先后次序决定的,这点也要注意。
浙公网安备 33010602011771号