前言:对于急切想了解引擎功能的开发人员,在下载版本后,就想尝试编写代码,完成一个流程的开发和测试。本文试图从一个最简单的并行分支流程来示例说明,如何快速了解引擎代码的编写。
1. 创建分支流程图形
分支流程是常见的决策类的流程,用于处理不同决策场景出现的业务处理,其中每个分支又可以看成是一个串行流程的片段。
var pmb = ProcessModelBuilder.CreateProcess("process-split-name", "process-split-code"); var process = pmb.Start("Start") .Task("Task-001") .AndSplit("Split") .Parallels( () => pmb.Branch( () => pmb.Task("Task-100") ) , () => pmb.Branch( () => pmb.Task("Task-200") ) ) .AndJoin("Join") .Task("Task-500") .End("End") .Store();
上述代码创建了一个并行分支流程,有两个分支,而且分支是并行分支(AndSplit-AndJoin),流程图示例如下:
2. 流程启动和运行
流程的启动和运行是最为常用的两个API接口。
2.1 流程启动
启动需要处理的是流程实例的创建,还有开始节点和开始节点之后任务节点的创建,示例代码如下:
IWorkflowService wfService = new WorkflowService(); var wfResult = wfService.CreateRunner("10", "jack") .UseApp("DS-100", "Book-Order", "DS-100-LX") .UseProcess("process-split-code") .Start();
活动实例记录表如下:
2.2 流程运行
流程运行是由当前待办任务开始办理,并且运行到下一步的过程。通常需要明确指定下一步的流转路径列表(NextActivityTree),此处可以示例作为单步简单实例的运行:
IWorkflowService wfService = new WorkflowService();
var wfResult = wfService.CreateRunner("10", "jack")
.UseApp("DS-100", "Book-Order", "DS-100-LX")
.UseProcess("process-split-code")
.OnTask(8004)
.NextStepInt("20", "Alice")
.Run();
活动实例记录表如下:
3. 流程的撤销和退回
3.1 流程撤销
如果用户在完成自己的待办任务,并且发出给下一步办理人时,发现有错误信息,需要撤销时,可以由自己发起,将当前流程撤销回来。当对并行分支撤销时候,两个并行分支也会被同时设置为退回和撤销状态,表示分支是强关联类型的两个活动。
IWorkflowService wfService = new WorkflowService();
var wfResult = wfService.CreateRunner("10", "Jack")
.UseApp("DS-100", "Book-Order", "DS-100-LX")
.UseProcess("process-split-code")
.OnTask(8004) //TaskID
.Withdraw();
活动实例记录表如下:
3.2 流程退回
流程退回是由当前待办任务的办理人发起,退回到流程的上一步。假如对并行分支中的其中一个分支进行退回处理,这个时候,默认只退回当前分支到网关之前的任务节点,并不会影响另外一个分支。
IWorkflowService wfService = new WorkflowService();
var wfResult = wfService.CreateRunner("20", "Alice")
.UseApp("DS-100", "Book-Order", "DS-100-LX")
.UseProcess("process-split-code")
.PrevStepInt()
.OnTask(8009) //TaskID
.SendBack();
活动实例记录表如下:
4. 总结
以上代码,可以帮助开发人员快速熟悉引擎组件的接口和简单分支的实用功能,完整功能需要在企业版以上版本获取。并行分支的撤销和退回因为要考虑相邻分支的处理,所以在引擎内部的处理也是比较特殊。此处,只描述退回后的结果记录,退回的内部处理逻辑今后也会安排另外的文章专门再去介绍。