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

版本:.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) 代码方式创建流程和测试流程方便开发人员快速学习和上手,是一种提升工作效率的高效方法。

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

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

    前言:对于急切想了解引擎功能的开发人员,在下载版本后,就想尝试编写代码,完成一个流程的开发和测试.本文试图从请假流程,或分支模式来快速了解引擎代码的编写. 1. 创建或分支流程图形 或分支流程是常见的 ...

  2. Slickflow.NET 开源工作流引擎快速入门之一: 简单序列流程代码编写示例

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

  3. Slickflow.Graph 开源工作流引擎快速入门之四: 图形编码建模工具使用手册

    前言: 业务人员绘制流程时,通常使用图形GUI界面交互操作来完成,然而对于需要频繁操作或者管理较多流程的系统管理用户,就需要一款辅助工具,来帮助他们快速完成流程的创建和编辑更新.Slickflow.G ...

  4. Slickflow.NET 开源工作流引擎高级开发(三) -- 并行分支容器与会签工作流模式的组合

    前言:  流程引擎的核心功能是负责解析流程定义XML和流转,业务环节的不断积累,让人们不断总结和抽象出一些模式,这些模式统称为工作流模式(Workflow Pattern).本文的重点就是介绍一种常见 ...

  5. Slickflow.NET 开源工作流引擎高级开发(二) -- 流程快速测试增值服务工具介绍

    前言:流程是由若干个任务节点组成,流转过程就是从一个节点转移到下一个节点,通常需要不断切换用户身份来完成流程的测试,这样使得测试效率比较低下,本文从实战出发,介绍常见的两种快速测试方法,用于提升流程测 ...

  6. Slickflow.NET 开源工作流引擎高级开发(四) -- 硬核编码:代码式快速构建流程图

    前言:通过设计器交互来创建流程图是比较常见的方式,这种方式是比较方便业务人员对流程的操作.然而,在需要流程模板,或者技术开发阶段以及一些自动化流程的处理过程中,使用代码快速创建流程图也是一种非常有必要 ...

  7. Slickflow.NET 开源工作流引擎基础介绍(九) -- .NET Core2.0 版本实现介绍

    前言:.NET Core 是.NET Framework的新一代版本,是微软开发的第一个跨平台 (Windows.Mac OSX.Linux) 的应用程序开发框架(Application Framew ...

  8. Slickflow.NET 开源工作流引擎基础介绍-.NET Core2.0 版本实现介绍 (转)

    前言:.NET Core 是.NET Framework的新一代版本,是微软开发的第一个跨平台 (Windows.Mac OSX.Linux) 的应用程序开发框架(Application Framew ...

  9. Slickflow.NET 开源工作流引擎基础介绍(一) -- 引擎基本服务接口API介绍

    1. 工作流术语图示                                              图1 流程图形的BPMN图形元素表示 1) 流程模型定义说明流程(Process):是企 ...

随机推荐

  1. Django day03之表设计分析

    models.py文件中创建表字段分析实例: 图书管理系统---> 书.作者.出版社作为基表 from django.db import models # Create your models ...

  2. python单元测试unittest、setUp、tearDown()

    单元测试反应的是一种以测试为驱动的开发模式,最大的好处就是保证一个程序模块的行为符合我们设计的测试用例,在将来修改的时候,可以极大程度保证该模块行为仍然是正确的. 下面我编写一个Dict来,这个类的行 ...

  3. python错误处理—try…catch…finally、调用栈分析

    高级语言包括python一般都内置了一套try…catch…finally的错误处理机制: >>> try: ... print('try...') ... r = 10 / 0 . ...

  4. Android动态添加碎片

    我们编写一个能够用过按钮动态更替碎片的APP,首先在主页上显示第一个碎片,点击按钮后可以替换到第二个碎片,或者删除已经替换掉的第二个碎片. 一.MainActivity.java import and ...

  5. vue项目的开发

    vue项目的开发 我们已经通过命令行创建了一个vue项目,并且打开了这个项目.下面是这个文件的src文件夹,这个文件夹放了整个项目的核心代码. 一.vue文件的用处简介. 1.assets文件夹,用来 ...

  6. Xamarin.Forms 界面布局

    <!--margin表示控件相对StackLayout的位置是设置组件之间的距离,或者距离父组件边缘的距离,    他的四个值是左边距,上边距,右边距,下边距  -->    <!- ...

  7. 使用PHP生成并导出CSV文件

    CSV文件是以纯文本形式存储的,一般以逗号为分隔符.这里主要简单介绍下如何导出CSV文件. 一.浏览器导出CSV文件格式 /** * 导出CSV文件 */ function exportCsv() { ...

  8. 从一个OutOfMemoryError 学会了分析Java内存泄漏问题

    以前都是好好的,最近出现了 oom. 问题 开始是: java.lang.OutOfMemoryError: Java heap space -- :: --- [nio--exec-] c.e.p. ...

  9. 极客时间-vue开发实战学习(ant-design vue作者)

    vue基础 属性 事件 插槽 指令(Directives) 生命周期 底层原理 vue生态 路由管理器vue Router 状态管理器vuex 同构Nuxt vue实战 实战项目-ant-desing ...

  10. Centos下使用yum命令报错 except KeyboardInterrupt, e: SyntaxError: invalid syntax

    使用yum命令报错 File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: ^ SyntaxError: invalid ...