本篇简介

本篇以一个小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 &gt; 2 ? 'transition5' : 'transition4'" layout="426,124,-1,-1" name="decision1"><transition displayName="&lt;=2天" g="" name="transition4" offset="0,0" to="end1"/><transition displayName="&gt;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相关推荐

  1. 微信企业付款至零钱包实现详细流程Demo

    微信企业付款实现详细流程Demo 大家好,我是 梦辛工作室的灵,下面来讲一下微信企业付款实现的流程 1.准备数据 微信企业付款需要 准备 微信支付API秘钥.支付证书:下面是获取流程: 先登录微信支付 ...

  2. app支付宝支付java后台_支付宝app支付java后台流程demo

    支付宝app支付java后台流程demo 使用ssm框架实现支付宝支付功能. 支付宝测试环境代码测试 源代码 https://github.com/OUYANGSIHAI/sihai-maven-ss ...

  3. 支付宝app支付java后台流程demo

    支付宝app支付java后台流程demo 使用ssm框架实现支付宝支付功能. 支付宝测试环境代码测试 源代码 https://github.com/OUYANGSIHAI/sihai-maven-ss ...

  4. 安卓微信支付开发基本流程-demo篇

    微信支付的应用场景非常广泛,但是官方文档写的不够详细.我百度了很多资料,结果也不满意,在填了很多坑以后,特意写下此博客,给自己总结,也让后面的人少走些弯路. 微信支付的开发基本流程在官方文档已经说清楚 ...

  5. webservice接口开发详解(附完整流程demo)

    摘要 由于公司对接第三方系统业务较多,所以就采用webservice进行对接,本文项目框架使用SSH搭建,其他框架也可以参考下具体使用流程,本文demo都是测试通过而且发布成功,有需要的可以直接cop ...

  6. OpenFPGA系列(三) 运行设计流程demo

    文章目录 一.生成 Fabric 网表 1.1 准备 Task 配置文件 1.2 运行 Task 1.3 运行 icarus iVerilog 编译 二.从Verilog到 验证(Verificati ...

  7. 工作流实战篇_01_flowable 流程Demo案例

    由于群里有些朋友对这个flowable还不是 很熟悉,在群里的小伙伴的建议下,师傅(小学生05101)制作一个开源的项目源码,一共大家学习和交流,希望对有帮助,少走弯路 如果有不懂的问题可以入群:63 ...

  8. uniCloud 微信小程序登陆全流程demo

    ps: Q群:743496144 博主一向不喜欢废话,直接说几个点,你悟了就直接去试,可以不用看完,还是得自己去试印象才深刻,博主写博文就怕自己以后忘记做个笔记顺便能帮一个是一个 1.你要获取unio ...

  9. java 流程引擎_java工作流引擎Jflow父子流程demo

    关键字 驰骋工作流引擎 流程快速开发平台 workflow ccflow jflow  .net开源工作流 2.定义 一个流程A的一个节点,因工作的需要调起另外的流程B,A就叫父流程,B就叫子流程.如 ...

  10. 一劳永逸,iOS 自定义 ActionSheet 封装流程

    原文链接:http://www.jianshu.com/p/cfb87a7db7b1 本文为 iOS 自定义视图封装<一劳永逸>系列的第四期,旨在提供封装思路,结果固然重要,但理解过程才最 ...

最新文章

  1. Codeforces数学1600----day1[同余定理,树状数组+两次二分,,组合计数]
  2. 使用NET USE将USB端口模拟为LPT1
  3. python数组不同地方
  4. request获取各种路径 转,记下来免得 以后忘记了。
  5. 解析Excel2007之Style、Drawing、Chart
  6. 每天,每周,每月,每年程序员该做的事情
  7. 编写安全 PHP 应用程序的七个习惯
  8. python中main方法的用法_python __main__和__init__正确用法
  9. 电脑分屏设置主屏_华硕灵耀 X2 Pro 体验:两块屏幕的笔记本电脑,体验怎样?...
  10. Mysql 的 Cascade Restrict
  11. PostgreSQL安装及关联ArcMap,创建地理空间数据库
  12. PDA扫描 Geenk scan 的方法列表
  13. 记录第一次面试的体会(字节跳动实习生招聘)
  14. 分布式任务调度:你知道和不知道的事
  15. 信号调制解调matlab仿真,基于matlab的psk信号调制解调仿真设计开题报告.doc
  16. 从零开始Labview机器视觉-图像采…
  17. HUD 3938 protal [ 离线并查集 ]
  18. cad修改快捷键_【扮家家云渲染】CAD快捷键修改干货教程
  19. CAN总线技术在石油工程行业中的应用
  20. 如何理解通用信息管理软件--橡皮泥软件

热门文章

  1. Python绘制心型图案
  2. 真实诈骗案例积累(一)
  3. RPL(5):RFC6550翻译(5)---ICMPv6 RPL控制报文
  4. 致远OA单点登陆到第三方系统(零代码实现)
  5. C# 之 带你玩转命令行版《2048》 -- 附源码分享
  6. Greedy 贪心算法
  7. 20220525商汤算法岗实习面试经历
  8. 重温Spring笔记3 - 依赖注入
  9. 艰辛坎坷的360崛起之路
  10. html+css+支付宝页面,HTML+CSS+JS简单实现支付宝付款界面效果