.NET 工作流: Slickflow开源工作流引擎快速入门之二: 简单并行分支流程代码编写示例
前言:对于急切想了解引擎功能的开发人员,在下载版本后,就想尝试编写代码,完成一个流程的开发和测试。本文试图从一个最简单的并行分支流程来示例说明,如何快速了解引擎代码的编写。
版本:.NET Core2.1
1. 创建分支流程图形
分支流程是常见的决策类的流程,本文中以一个汽车订单流程为例演示并行分支流程的流程过程。并行分支通常适用于多部门可以同时执行工作任务的场景,每个单独的分支也可以看做为一个串行序列片段。多个分支最终通过汇聚节点再合并在一起。
var pmb = ProcessModelBuilder.CreateProcess("LargeOrderProcess", "LargeOrderProcessCode"); var process = pmb.Start("Start") .Task("Large Order Received", "LOR001") .AndSplit("AndSplit") .Parallels( () => pmb.Branch( () => pmb.Task("Engineering Review", "ER001") ) ,() => pmb.Branch( () => pmb.Task("Design Review", "DR001") ) ) .AndJoin("AndJoin") .Task("Management Approve", "MA001") .End("End") .Store();
上述代码创建了一个并行分支流程,有两个分支,而且分支是并行分支(AndSplit-AndJoin),图中的网关节点的属性类型,是在代码直接赋值设置的。流程图示例如下:
2. 流程启动和运行
流程的启动和运行是最为常用的两个API接口。
2.1 流程启动
启动需要处理的是流程实例的创建,还有开始节点和开始节点之后任务节点的创建,示例代码如下:
IWorkflowService wfService = new WorkflowService(); var wfResult = wfService.CreateRunner("10", "jack") .UseApp("PS-100", "Large-Car-Order", "PS-100-LX") .UseProcess("LargeOrderProcessCode") .Start();
活动实例记录表如下:
2.2 流程运行
流程运行是由当前待办任务开始办理,并且运行到下一步的过程。并行分支表示多个分支被同时触发执行,如上图中的流程图示例:设计部审查(Design Review)和工程部审查(Engineering Review)被并行网关节点(AndSplit)同时触发,所以在活动实例表中,一次生成了新的两条活动记录。
IWorkflowService wfService = new WorkflowService(); var wfResult = wfService.CreateRunner("10", "jack") .UseApp("PS-100", "Large-Car-Order", "PS-100-LX") .UseProcess("LargeOrderProcessCode") .OnTask(8033) .NextStepInt("20", "Alice") .Run();
活动实例记录表如下:
3. 流程的撤销和退回
3.1 流程撤销
如果用户在完成自己的待办任务,并且发出给下一步办理人时,发现有错误信息,需要撤销时,可以由自己发起,将当前流程撤销回来。当对并行分支撤销时候,两个并行分支也会被同时设置为退回和撤销状态,表示分支是强关联类型的两个活动。
IWorkflowService wfService = new WorkflowService(); var wfResult = wfService.CreateRunner("10", "Jack") .UseApp("PS-100", "Large-Car-Order", "PS-100-LX") .UseProcess("LargeOrderProcessCode") .OnTask(8033) //TaskID .Withdraw();
活动实例记录表如下:
3.2 流程退回
流程退回是由当前待办任务的办理人发起,退回到流程的上一步。假如对并行分支中的其中一个分支进行退回处理,这个时候,默认只退回当前分支到网关之前的任务节点,并不会影响另外一个分支。
IWorkflowService wfService = new WorkflowService(); var wfResult = wfService.CreateRunner("20", "Alice") .UseApp("PS-100", "Large-Car-Order", "PS-100-LX") .UseProcess("LargeOrderProcessCode") .PrevStepInt() .OnTask(8038) //TaskID .SendBack();
活动实例记录表如下:
并行分支的撤销和退回因为要考虑相邻分支的处理,所以在引擎内部的处理也是比较特殊。此处,只描述退回后的结果记录,退回的内部处理逻辑今后也会安排另外的文章专门再去介绍。
4. 辅助开发工具
1) Slickflow 流程设计器
http://demo.slickflow.com/sfd/
2) Slickflow Web测试工具
http://demo.slickflow.com/sfw2/
5. 开源项目地址
https://github.com/besley/Slickflow
6. 总结
1) 以上代码,可以帮助开发人员快速熟悉引擎组件的接口和简单或分支的实用功能,完整功能需要在企业版以上版本获取;
2) 辅助开发工具中的流程设计器以及Web测试工具,给用户直观的体验操作,而且也适合不同类型的业务用户;
3) 代码方式创建流程和测试流程方便开发人员快速学习和上手,是一种提升工作效率的高效方法。