前言:对于急切想了解引擎功能的开发人员,在下载版本后,就想尝试编写代码,完成一个流程的开发和测试。本文试图从请假流程,或分支模式来快速了解引擎代码的编写。
1. 创建或分支流程图形
或分支流程是常见的决策类的流程,用于处理不同决策场景出现的业务处理,其中每个分支又可以看成是一个串行流程的片段。下面是请假流程的创建代码:
var pmb = ProcessModelBuilder.CreateProcess("LeaveRequest", "LeaveRequestCode"); var process = pmb.Start("Start") .Task("Fill Leave Days") .OrSplit("OrSplit") .Parallels( () => pmb.Branch( () => pmb.Task( VertexBuilder.CreateTask("CEO Evaluate"), LinkBuilder.CreateTransition("days>=3") .AddCondition(ConditionTypeEnum.Expression, "days>=3") ) ) , () => pmb.Branch( () => pmb.Task( VertexBuilder.CreateTask("Manager Evaluate"), LinkBuilder.CreateTransition("days<3") .AddCondition(ConditionTypeEnum.Expression, "days<3") ) ) ) .OrJoin("OrJoin") .Task("HR Notify") .End("End") .Store();
上述代码创建了一个并行分支流程,有两个分支,而且分支是或分支(Orplit-OrJoin),流程图示例如下:
或分支是两个伴随条件表达式的转移(Transition),在或分支网关节点时候,流程会根据传入的条件变量days的数值来判断是走哪条分支,此流程可以看做是请假流程中的请假天数的分支选择一样。比如,请假天数在3天以内,由部门经理来审批,当请假天数超过(包含)3天时,则需要总经理来审批。通过或分支模式,来实现审批决策。
2. 流程启动和运行
流程的启动和运行是最为常用的两个API接口。
2.1 流程启动
启动需要处理的是流程实例的创建,还有开始节点和开始节点之后任务节点的创建,示例代码如下:
IWorkflowService wfService = new WorkflowService(); var wfResult = wfService.CreateRunner("10", "jack") .UseApp("DS-100", "Leave-Request", "DS-100-LX") .UseProcess("LeaveRequestCode") .Start();
活动实例记录表如下:
同样按照请假流程为例进行说明,第一个任务节点可以视为“提交请假单”,当员工填写完请假单,提交后,则可以视为启动流程。
2.2 流程运行
流程运行是由当前待办任务开始办理,并且运行到下一步的过程。因为是或分支网关,所以需要明确指定条件变量的名称和数值,用于确定下一步的分支路径。此处,请假天数days作为条件变量,需要传入。代码示例如下:
IWorkflowService wfService = new WorkflowService(); var wfResult = wfService.CreateRunner("10", "jack") .UseApp("DS-100", "Leave-Request", "DS-100-LX") .UseProcess("LeaveRequestCode") .OnTask(8017) .IfCondition("days", "3") .NextStepInt("20", "Alice") .Run();
活动实例记录表如下:
3. 流程的撤销和退回
3.1 流程撤销
如果用户在完成自己的待办任务,并且发出给下一步办理人时,发现有错误信息,需要撤销时,可以由自己发起,将当前流程撤销回来。
IWorkflowService wfService = new WorkflowService(); var wfResult = wfService.CreateRunner("10", "Jack") .UseApp("DS-100", "Leave-Request", "DS-100-LX") .UseProcess("LeaveRequestCode") .OnTask(8017) //TaskID .Withdraw();
活动实例记录表如下:
3.2 流程退回
流程退回是由当前待办任务的办理人发起,退回到流程的上一步。假如对并行分支中的其中一个分支进行退回处理,这个时候,默认只退回当前分支到网关之前的任务节点,并不会影响另外一个分支。
IWorkflowService wfService = new WorkflowService(); var wfResult = wfService.CreateRunner("20", "Alice") .UseApp("DS-100", "Leave-Request", "DS-100-LX") .UseProcess("LeaveRequestCode") .PrevStepInt() .OnTask(8020) //TaskID .SendBack();
活动实例记录表如下:
4. 总结
以上代码,可以帮助开发人员快速熟悉引擎组件的接口和简单分支的实用功能,完整功能需要在企业版以上版本获取。并行分支的撤销和退回因为要考虑相邻分支的处理,所以在引擎内部的处理也是比较特殊。此处,只描述退回后的结果记录,退回的内部处理逻辑今后也会安排另外的文章专门再去介绍。