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.建表 在数据库建一张自己的业务表(根据你自己的业务需要确定表字段,如请假流程就有,请假人.请假时间.请假天数等字段),数据表必须要有一个主键,主键类型是 ...
随机推荐
- Git下载加速教程
方法一 大家普遍采取的是更改本地的host文件,然后cmd命令刷新 1.访问这里,依次获取下面三个url的ping的ip github.com github.global.ssl.fastly.net ...
- 记一次JPA遇到的奇葩错误——本地sql不识别表名的别名
记一次JPA遇到的奇葩错误——本地sql不识别表名的别名 报错:Unknown column 'our' in 'field list' 起因:需要本地sql查询后,分页返回自定义对象.报错信息如下: ...
- 【JVM从小白学成大佬】开篇
JVM的重要性毋庸置疑,可以毫不夸张的说Java虚拟机是整个Java平台的基石. JVM方面的知识,也一直是BAT等大厂面试考核的重点.特别是JVM调优,故障排查性能调优,你知道该从哪些方面入手吗? ...
- cookie、session和application都是些什么神?——图文加案例,不怕你不会,就怕你不看
cookie.session和application都是些什么神? 前言: 一直想写一篇关于cookie和session的博客,由于种种原因,一直没有整理,这不,今天还就遇到问题了,之前虽然会,但是好 ...
- 纯 CSS 实现绘制各种三角形(各种角度)
一.前言 三角形实现原理:宽度width为0:height为0:(1)有一条横竖边(上下左右)的设置为border-方向:长度 solid red,这个画的就是底部的直线.其他边使用border-方向 ...
- Linux Capabilities 简介
为了执行权限检查,Linux 区分两类进程:特权进程(其有效用户标识为 0,也就是超级用户 root)和非特权进程(其有效用户标识为非零). 特权进程绕过所有内核权限检查,而非特权进程则根据进程凭证( ...
- Linux CentOS7 下设置tomcat 开机自启动
网上有很多教程说是可以设置Tomcat 自启动,但是一一验证了都不行.最后找到一个方法 验证可以: 1.改rc.local 位于/etc/rc.d/文件下的rc.local vi /etc/r ...
- 终于跑通分布式事务框架tcc-transaction的示例项目
1.背景 前段时间在看项目代码的时候,发现有些接口的流程比较长,在各个服务里面都有通过数据库事务保证数据的一致性,但是在上游的controller层并没有对一致性做保证. 网上查了下,还没找到基于Go ...
- 你知道JavaScript这六种错误类型吗?
前言 今日话题,了解JavaScript的错误处理机制. 一.ReferenceError 引用一个不存在的变量时发生的错误.将一个值分配给无法分配的对象,比如对函数的运行结果或者函数赋值. 举栗子 ...
- Android读取date中年月日
1.Date对象:Date date = getDate(); 2.Calendar实例:Calendar calendar = Calendar.getInstance(); 3.calendar. ...