Slickflow.NET 开源工作流引擎快速入门之二: 简单并行分支流程代码编写示例

前言:对于急切想了解引擎功能的开发人员,在下载版本后,就想尝试编写代码,完成一个流程的开发和测试。本文试图从一个最简单的并行分支流程来示例说明,如何快速了解引擎代码的编写。

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. 总结

      以上代码,可以帮助开发人员快速熟悉引擎组件的接口和简单分支的实用功能,完整功能需要在企业版以上版本获取。并行分支的撤销和退回因为要考虑相邻分支的处理,所以在引擎内部的处理也是比较特殊。此处,只描述退回后的结果记录,退回的内部处理逻辑今后也会安排另外的文章专门再去介绍。

猜你喜欢

转载自www.cnblogs.com/slickflow/p/11527264.html