03_Snaker流程demo
本篇简介
本篇以一个小Case带大家熟悉下 Snaker是如何运作的,对于初入门的老铁可以先跟着我得思路走,你会逐步熟悉Snaker提供的操作
请假案例
流程定义文件存放位置
- Snaker中的流程定义文件是以.snaker结尾
流程定义模型
流程定义文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<process displayName="请假流程测试" instanceUrl="/snaker/flow/all" name="leave"><start displayName="start1" layout="24,124,-1,-1" name="start1"><transition g="" name="transition1" offset="0,0" to="apply"/></start><end displayName="end1" layout="570,124,-1,-1" name="end1"/><task assignee="apply" displayName="请假申请" form="/flow/leave/apply" layout="117,122,-1,-1" name="apply" performType="ANY"><transition g="" name="transition2" offset="0,0" to="approveDept"/></task><task assignee="approveDept" displayName="部门经理审批" form="/flow/leave/approveDept" layout="272,122,-1,-1" name="approveDept" performType="ANY"><transition g="" name="transition3" offset="0,0" to="decision1"/></task><decision displayName="decision1" expr="#day > 2 ? 'transition5' : 'transition4'" layout="426,124,-1,-1" name="decision1"><transition displayName="<=2天" g="" name="transition4" offset="0,0" to="end1"/><transition displayName=">2天" g="" name="transition5" offset="0,0" to="approveBoss"/></decision><task assignee="approveBoss" displayName="总经理审批" form="/flow/leave/approveBoss" layout="404,231,-1,-1" name="approveBoss" performType="ANY"><transition g="" name="transition6" offset="0,0" to="end1"/></task>
</process>
组件模型属性
部署流程定义文件
注入流程引擎接口
@Autowiredprivate SnakerEngine engine;
部署流程定义文件
InputStream streamFromClasspath = StreamHelper.getStreamFromClasspath("flows/leave.snaker");String deploy = engine.process().deploy(streamFromClasspath);System.out.println(deploy);
查看数据表
- wf_process中就会增加一条数据,如果重复部署version就会加一
- 一般我都会使用最新的流程定义,重复部署意味着我们的流程有变更,管理员才会有的操作
- 如何获取一个流程定义最新的版本是多少呢?放心提供的有API
/*** 数据库访问接口* 主要提供保存、更新、查询流程的相关table*/@Autowiredprivate DBAccess dbAccess;// LEAVE_PROCESS:流程定义文件的namedbAccess.getLatestProcessVersion(LEAVE_PROCESS);
启动一个流程实例
- tom这名员工要请假
Integer leaveVersion = dbAccess.getLatestProcessVersion(LEAVE_PROCESS);// 流程定义Id、操作人、参数Order dm = engine.startInstanceByName(LEAVE_PROCESS, leaveVersion, "tom");System.out.println(dm.getId());
- 更多启动流程实例方法
启动流程并执行
/*** 据流程定义 name 启动流程实例* 申请上线操作发起;并完成任务*/@Testpublic void startInstanceByNameAndExecute() {// Process process = allProcess.get(0);Map<String, Object> map = new HashMap<>();// 传递变量;申请者的Idmap.put("apply", APPLY_OPERATOR);// 传递变量;部门审批人的Idmap.put("approveDept", APPROVE_DEPT_OPERATOR);// 变量 请假天数map.put("day", 3);Integer leaveVersion = dbAccess.getLatestProcessVersion(LEAVE_PROCESS);// 获取一个流程定义最新的版本// 按照名字启动的 流程Order dm = startAndExecute(LEAVE_PROCESS, leaveVersion, APPLY_OPERATOR, map);System.out.println(dm.getId());}private Order startAndExecute(String name, Integer version, String operator, Map<String, Object> args) {Order order = engine.startInstanceByName(name, version, operator, args);List<Task> tasks = engine.query().getActiveTasks(new QueryFilter().setOrderId(order.getId()));if (tasks != null && tasks.size() > 0) {List<Task> tasks1 = engine.executeTask(tasks.get(0).getId(), operator, args);if (!tasks1.isEmpty() && tasks1.size() == 1) {engine.task().addTaskActor(tasks1.get(0).getId(), "approve_userName2");System.out.println("测试加签----------加签成功!");} else {System.out.println("测试加签----------加签失败!");}System.out.println(tasks1.size());}return order;}
任务表数据变化
历史任务表数据变化
任务和参与人表数据变化
历史 任务和参与人表数据变化
03_Snaker流程demo相关推荐
- 微信企业付款至零钱包实现详细流程Demo
微信企业付款实现详细流程Demo 大家好,我是 梦辛工作室的灵,下面来讲一下微信企业付款实现的流程 1.准备数据 微信企业付款需要 准备 微信支付API秘钥.支付证书:下面是获取流程: 先登录微信支付 ...
- app支付宝支付java后台_支付宝app支付java后台流程demo
支付宝app支付java后台流程demo 使用ssm框架实现支付宝支付功能. 支付宝测试环境代码测试 源代码 https://github.com/OUYANGSIHAI/sihai-maven-ss ...
- 支付宝app支付java后台流程demo
支付宝app支付java后台流程demo 使用ssm框架实现支付宝支付功能. 支付宝测试环境代码测试 源代码 https://github.com/OUYANGSIHAI/sihai-maven-ss ...
- 安卓微信支付开发基本流程-demo篇
微信支付的应用场景非常广泛,但是官方文档写的不够详细.我百度了很多资料,结果也不满意,在填了很多坑以后,特意写下此博客,给自己总结,也让后面的人少走些弯路. 微信支付的开发基本流程在官方文档已经说清楚 ...
- webservice接口开发详解(附完整流程demo)
摘要 由于公司对接第三方系统业务较多,所以就采用webservice进行对接,本文项目框架使用SSH搭建,其他框架也可以参考下具体使用流程,本文demo都是测试通过而且发布成功,有需要的可以直接cop ...
- OpenFPGA系列(三) 运行设计流程demo
文章目录 一.生成 Fabric 网表 1.1 准备 Task 配置文件 1.2 运行 Task 1.3 运行 icarus iVerilog 编译 二.从Verilog到 验证(Verificati ...
- 工作流实战篇_01_flowable 流程Demo案例
由于群里有些朋友对这个flowable还不是 很熟悉,在群里的小伙伴的建议下,师傅(小学生05101)制作一个开源的项目源码,一共大家学习和交流,希望对有帮助,少走弯路 如果有不懂的问题可以入群:63 ...
- uniCloud 微信小程序登陆全流程demo
ps: Q群:743496144 博主一向不喜欢废话,直接说几个点,你悟了就直接去试,可以不用看完,还是得自己去试印象才深刻,博主写博文就怕自己以后忘记做个笔记顺便能帮一个是一个 1.你要获取unio ...
- java 流程引擎_java工作流引擎Jflow父子流程demo
关键字 驰骋工作流引擎 流程快速开发平台 workflow ccflow jflow .net开源工作流 2.定义 一个流程A的一个节点,因工作的需要调起另外的流程B,A就叫父流程,B就叫子流程.如 ...
- 一劳永逸,iOS 自定义 ActionSheet 封装流程
原文链接:http://www.jianshu.com/p/cfb87a7db7b1 本文为 iOS 自定义视图封装<一劳永逸>系列的第四期,旨在提供封装思路,结果固然重要,但理解过程才最 ...
最新文章
- Codeforces数学1600----day1[同余定理,树状数组+两次二分,,组合计数]
- 使用NET USE将USB端口模拟为LPT1
- python数组不同地方
- request获取各种路径 转,记下来免得 以后忘记了。
- 解析Excel2007之Style、Drawing、Chart
- 每天,每周,每月,每年程序员该做的事情
- 编写安全 PHP 应用程序的七个习惯
- python中main方法的用法_python __main__和__init__正确用法
- 电脑分屏设置主屏_华硕灵耀 X2 Pro 体验:两块屏幕的笔记本电脑,体验怎样?...
- Mysql 的 Cascade Restrict
- PostgreSQL安装及关联ArcMap,创建地理空间数据库
- PDA扫描 Geenk scan 的方法列表
- 记录第一次面试的体会(字节跳动实习生招聘)
- 分布式任务调度:你知道和不知道的事
- 信号调制解调matlab仿真,基于matlab的psk信号调制解调仿真设计开题报告.doc
- 从零开始Labview机器视觉-图像采…
- HUD 3938 protal [ 离线并查集 ]
- cad修改快捷键_【扮家家云渲染】CAD快捷键修改干货教程
- CAN总线技术在石油工程行业中的应用
- 如何理解通用信息管理软件--橡皮泥软件