Slickflow.NET 开源工作流引擎快速入门之三: 简单或分支流程代码编写示例
前言:对于急切想了解引擎功能的开发人员,在下载版本后,就想尝试编写代码,完成一个流程的开发和测试。本文试图从请假流程,或分支模式来快速了解引擎代码的编写。
版本:.NET CORE 2.1
1. 创建或分支流程图形
或分支流程是常见的决策类的流程,用于处理不同决策场景出现的业务处理,其中每个分支又可以看成是一个串行流程的片段。下面是请假流程的创建代码:
var pmb = ProcessModelBuilder.CreateProcess("LeaveRequest", "LeaveRequestCode");
var process = pmb.Start("Start")
.Task("Fill Leave Days", "FLD001")
.OrSplit("OrSplit")
.Parallels(
() => pmb.Branch(
() => pmb.Task(
VertexBuilder.CreateTask("CEO Evaluate", "CEOE001"),
LinkBuilder.CreateTransition("days>=3")
.AddCondition(ConditionTypeEnum.Expression, "days>=3")
)
)
, () => pmb.Branch(
() => pmb.Task(
VertexBuilder.CreateTask("Manager Evaluate", "ME001"),
LinkBuilder.CreateTransition("days<3")
.AddCondition(ConditionTypeEnum.Expression, "days<3")
)
)
)
.OrJoin("OrJoin")
.Task("HR Notify", "HRN001")
.End("End")
.Store();
上述代码创建了一个或分支(OrSplit-OrJoin)流程,有两个分支,表示实际业务过程中的请假流程,创建完成的流程图示例如下:

或分支是两个伴随条件表达式的转移(Transition),在或分支网关节点时候,流程会根据传入的条件变量days的数值来判断是走哪条分支,此流程可以看做是请假流程中的请假天数的分支选择一样。比如,请假天数在3天以内,由部门经理来审批,当请假天数超过(包含)3天时,则需要总经理来审批。通过或分支模式,来实现审批决策。
2. 流程启动和运行
流程的启动和运行是最为常用的两个API接口。
2.1 流程启动
启动需要处理的是流程实例的创建,还有开始节点和开始节点之后任务节点的创建,示例代码如下:
IWorkflowService wfService = new WorkflowService();
var wfResult = wfService.CreateRunner("10", "jack")
.UseApp("DS-100", "Leave-Request", "DS-100-LX")
.UseProcess("LeaveRequestCode")
.Start();
活动实例记录表如下:

同样按照请假流程为例进行说明,第一个任务节点可以视为“提交请假单”,当员工填写完请假单,提交后,则可以视为启动流程。
2.2 流程运行
流程运行是由当前待办任务开始办理,并且运行到下一步的过程。因为是或分支网关,所以需要明确指定条件变量的名称和数值,用于确定下一步的分支路径。此处,请假天数days作为条件变量,需要传入,当请假天数是3天时,网关决策到CEO审批节点,所以只会选择其中的一条或分支进行路由。代码示例如下:
IWorkflowService wfService = new WorkflowService();
var wfResult = wfService.CreateRunner("10", "jack")
.UseApp("DS-100", "Leave-Request", "DS-100-LX")
.UseProcess("LeaveRequestCode")
.OnTask(8017)
.IfCondition("days", "3")
.NextStepInt("20", "Alice")
.Run();
活动实例记录表如下:

3. 流程的撤销和退回
3.1 流程撤销
如果用户在完成自己的待办任务,并且发出给下一步办理人时,发现有错误信息,需要撤销时,可以由自己发起,将当前流程撤销回来。
IWorkflowService wfService = new WorkflowService();
var wfResult = wfService.CreateRunner("10", "Jack")
.UseApp("DS-100", "Leave-Request", "DS-100-LX")
.UseProcess("LeaveRequestCode")
.OnTask(8017) //TaskID
.Withdraw();
活动实例记录表如下:

3.2 流程退回
流程退回是由当前待办任务的办理人发起,退回到流程的上一步。假如对并行分支中的其中一个分支进行退回处理,这个时候,默认只退回当前分支到网关之前的任务节点,并不会影响另外一个分支。
IWorkflowService wfService = new WorkflowService();
var wfResult = wfService.CreateRunner("20", "Alice")
.UseApp("DS-100", "Leave-Request", "DS-100-LX")
.UseProcess("LeaveRequestCode")
.PrevStepInt()
.OnTask(8020) //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 开源工作流引擎快速入门之三: 简单或分支流程代码编写示例的更多相关文章
- Slickflow.NET 开源工作流引擎快速入门之一: 简单序列流程代码编写示例
前言:对于急切想了解引擎功能的开发人员,在下载版本后,就想尝试编写代码,完成一个流程的开发和测试.本文试图从一个最简单的流程来示例说明,如何快速了解引擎代码的编写. 版本: .NETCore 2.1 ...
- Slickflow.NET 开源工作流引擎快速入门之二: 简单并行分支流程代码编写示例
前言:对于急切想了解引擎功能的开发人员,在下载版本后,就想尝试编写代码,完成一个流程的开发和测试.本文试图从一个最简单的并行分支流程来示例说明,如何快速了解引擎代码的编写. 版本:.NET Core2 ...
- Slickflow.Graph 开源工作流引擎快速入门之四: 图形编码建模工具使用手册
前言: 业务人员绘制流程时,通常使用图形GUI界面交互操作来完成,然而对于需要频繁操作或者管理较多流程的系统管理用户,就需要一款辅助工具,来帮助他们快速完成流程的创建和编辑更新.Slickflow.G ...
- Slickflow.NET 开源工作流引擎高级开发(四) -- 硬核编码:代码式快速构建流程图
前言:通过设计器交互来创建流程图是比较常见的方式,这种方式是比较方便业务人员对流程的操作.然而,在需要流程模板,或者技术开发阶段以及一些自动化流程的处理过程中,使用代码快速创建流程图也是一种非常有必要 ...
- Slickflow.NET 开源工作流引擎高级开发(三) -- 并行分支容器与会签工作流模式的组合
前言: 流程引擎的核心功能是负责解析流程定义XML和流转,业务环节的不断积累,让人们不断总结和抽象出一些模式,这些模式统称为工作流模式(Workflow Pattern).本文的重点就是介绍一种常见 ...
- Slickflow.NET 开源工作流引擎高级开发(二) -- 流程快速测试增值服务工具介绍
前言:流程是由若干个任务节点组成,流转过程就是从一个节点转移到下一个节点,通常需要不断切换用户身份来完成流程的测试,这样使得测试效率比较低下,本文从实战出发,介绍常见的两种快速测试方法,用于提升流程测 ...
- Slickflow.NET 开源工作流引擎基础介绍(二) -- 引擎组件和业务模块的交互
集成流程引擎的必要性 业务过程的变化是在BPM系统中常见的现象,企业管理层需要不断优化组织架构,改造业务流程,不可避免地带来了业务流程的变化,企业信息系统就会随之面临重构的可能性.一种直接的方式是改造 ...
- Slickflow.NET 开源工作流引擎基础介绍(二) -- 引擎组件和业务系统的集成
集成流程引擎的必要性 业务过程的变化是在BPM系统中常见的现象,企业管理层需要不断优化组织架构,改造业务流程,不可避免地带来了业务流程的变化,企业信息系统就会随之面临重构的可能性.一种直接的方式是改造 ...
- RoadFlowCore工作流引擎快速入门
RoadFlow新建一个流程分为以下几步: 1.建表 在数据库建一张自己的业务表(根据你自己的业务需要确定表字段,如请假流程就有,请假人.请假时间.请假天数等字段),数据表必须要有一个主键,主键类型是 ...
随机推荐
- 在canvas中使用其他HTML元素
做一个功能如下图,随机生成100个大小.颜色随机的小球.点击开始运动的时候,小球开始运动,然后点击停止运动的时候,小球停止运动. 点击旁边的白色或者黑色,则背景颜色变为相应的颜色. HTML部分: & ...
- springboot集成redis实现消息发布订阅模式-双通道(跨多服务器)
基础配置参考https://blog.csdn.net/llll234/article/details/80966952 查看了基础配置那么会遇到一下几个问题: 1.实际应用中可能会订阅多个通道,而一 ...
- SAP无法激活表问题
因为修改了表结构导致无法激活,刚开始以为是数据库没有调整,然后试着运行SE14,发现还是报错 这个时候就要看看数据库服务器时候正常,输入事务码ST04,查看概览,发现磁盘已满 登录HANA Studi ...
- trec 2019 fair ranking track
trec 2019 fair ranking track 最近实验室要求参加trec 2019新出的track:fair ranking track.这里整理一下该任务的思想和要求.这次tra ...
- Ubuntu 17 安装Chrome浏览器
1.进入下载文件存放目录 cd Downloads 2.下载chrome文件 2.1 32位使用如下命令 wget https://dl.google.com/linux/direct/google- ...
- java线程池,工作窃取算法
前言 在上一篇<java线程池,阿里为什么不允许使用Executors?>中我们谈及了线程池,同时又发现一个现象,当最大线程数还没有满的时候耗时的任务全部堆积给了单个线程, 代码如下: T ...
- 合并多个jar包,并通过私服依赖
背景:许多jar包在maven仓库中没有,项目如果添加了许多的本地jar包,别人拿到代码也无法编译 需求:将本地jar包上传至私服并设置依赖,如果jar包较多,但都从属于同一功能,需要合并为一个jar ...
- Scala 系列(八)—— 类和对象
一.初识类和对象 Scala 的类与 Java 的类具有非常多的相似性,示例如下: // 1. 在 scala 中,类不需要用 public 声明,所有的类都具有公共的可见性 class Person ...
- rabbit - producer的confirm和consumer的ack模式
本篇和大家分享的是关于rabbit的生产和消费方的一些实用的操作:正如文章标题,主要内容如producer的confirm和consumer的ack,这两者使用的模式都是用来保证数据完整性,防止数据丢 ...
- Linux shell 获得字符串所在行数及位置
shell 获得字符串所在行数及位置 01 获取字符串所在的行数 方式一:用grep -n [root@root]# cat test apple bit create delect exe flow ...