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

版本:.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. mybatis源码学习(二)--mybatis+spring源码学习

    这篇笔记主要来就,mybatis是如何利用spring的扩展点来实现和spring的整合 1.mybatis和spring整合之后,我们就不需要使用sqlSession.selectOne()这种方式 ...

  2. 关于爬取babycenter.com A-Z为顺序的所有英文名及其详细属性

     这一次爬取的内容已经在标题里提到了,下面是详细要求及其图示: 1.首先以A-Z的顺序获取所有英文名,最后爬取该英文名的详细信息. 2.CSV的header以3中的单词为准,请别拼错.如果没有对应的数 ...

  3. 优先队列与TopK

    一.简介 前文介绍了<最大堆>的实现,本章节在最大堆的基础上实现一个简单的优先队列.优先队列的实现本身没什么难度,所以本文我们从优先队列的场景出发介绍topK问题. 后面会持续更新数据结构 ...

  4. 针对上一篇prim最后的完善结果

    edge* Graph::prim(int cur) { if (cur >= this->vertexNum) { return NULL; } int *weight = new in ...

  5. .net core 3.0web_razor page项目_使用中间件接受大文件上传报错_httpRequest.Form threw an exception of type Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException_Request body too large

    前言:在web项目的.net framework时文件上传时,自己常用一般处理程序接受上传文件,上传文件的大小限制是可以项目的webconfig里配置.   到core项目使用一般处理程序变成了中间件 ...

  6. C#中的时间戳

    来源:https://blog.guoqianfan.com/2019/11/24/timestamp-in-csharp/ 什么是时间戳 时间戳默认是Unix时间戳. 首先要清楚JavaScript ...

  7. Geoserver安装

    准备内容 安装环境:win10*64位专业版 安装文件:geoserver-2.15.2 安装步骤 安装JDK 1.安装GeoServer是基于Java的环境,所以需要先装Jdk环境. 2.前往官网下 ...

  8. 3、netty第二个例子,使用netty建立客户端,与服务端通讯

    第一个例子中,建立了http的服务器端,可以直接使用curl命令,或者浏览器直接访问. 在第二个例子中,建立一个netty的客户端来主动发送请求,模拟浏览器发送请求. 这里先启动服务端,再启动客户端, ...

  9. 任正非讲话稿 PDF整理版

    任正非讲话稿 PDF整理版 任正非思想之路 这里收录了任正非讲话稿400余篇,从1994年到2018年,从深圳.中国到东南亚.非洲.欧洲.美洲,从研发.市场.服务到财经.人力资源.战略.内控与公共关系 ...

  10. 使用POI导出百万级数据到excel的解决方案

    1.HSSFWorkbook 和SXSSFWorkbook区别 HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls,一张表最大支持65536行数据,256列 ...