《Activiti/Flowable  深入BPM工作流》-什么是流程变量?

一. 问题: 

       1. 什么是流程变量?

       2. 什么是global流程变量, local变量?

3.当前流程实例如何设置?

二. 详情

1. 什么是流程变量?

 解答: 流程 的运转需要靠流程变量,业务系统和activiti结合, 流程变量就是在activiti管理工作流是根据管理需要而设置的变

量.例如在请假流程流转时,请假大于三天则由总经理审核,否则由人事直接审核,请假天数就可以设置为流程变量,在流程流转时使

用.

注意:

1.1.  为什么不建议通过activiti的api查询流程变量来实现业务查询?

解答: 虽然流程变量中可用存储业务数据,可用通过activiti的api查询流程变量从而实现 查询业务数据, 但是不建议这么使用, 因为业务数据查询由业务系统负责,

activiti设置流程变量是为了流程执行需要而创建的.

   1.2.  为什么用pojo存储到流程变量,一定要实现序列化接口Serializable?

解答: 为了防止由于新增字段无法反序列化,需要生产serialVersionID.

   1.3.  流程变量的作用域有哪些?

流程变量默认作用域是一个流程实例(processInstance), 也可以是一个任务(task)或一个执行实例(execution). 这三个作用域流程实例的范围最大,成Global变量.

任务和执行实例仅仅是针对一个任务和一个执行实例范围,范围没有流程实例大,成为local变量.

   特点:

1.  global变量中变量名不能重复. 设置相同名称的变量,后设置的值会覆盖前面的变量值.

2. Local变量名可以重复,也可以和global名相同.  local变量由于在不同任务或不同的执行实例中, 作用域互不影响,变量名可以

相同,没有影响.

2. 什么是global流程变量? global流程变量 案例

请假流程

(1). 需求

员工创建请假申请单, 由部门经理审核,部门经理审核通过三天及三天以下由人事经理直接审核, 否则由总经理审核, 总经理审核通过再由人事经理存档.

流程图如下: holiday.bpmn

(2). 流程定义

请假大于等于三天连线条件:

请假天数小于三天连线条件:

(3). 设置global流程变量:

在部门经理审核设置流程变量, 变量值为请假单信息(包括请假天数),部门经理审核后可根据流程变量的值来觉得流程走向.

下面是具体的code实现

holiday.bpmn部署,启动及任务办理设置.

// 新的请假流程定义的部署public static void main(String[] args) {// 1. 得到 processEngineProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 得到 RepositoryServiceRepositoryService repositoryService = processEngine.getRepositoryService();// 部署Deployment deploy = repositoryService.createDeployment().addClasspathResource("holiday.bpmn")
//                .addClasspathResource("studentHoliday.png").name("请假流程2020-5-20").deploy();System.out.println(deploy.getId());System.out.println(deploy.getName());System.out.println(deploy.getKey());}
// 启动流程实例,同时还要设置流程变量的值public static void main(String[] args) {// 1. 得到 processEngineProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 2.得到 RuntimeServiceRuntimeService runtimeService = processEngine.getRuntimeService();// 3.流程定义的key问题.String processDefinitionKey = "myProcess_1";// 初始化Map<String, Object> map = new HashMap<String, Object>();Holiday holiday = new Holiday();holiday.setNum(5F);holiday.setHolidayName("请假审批 2020-5-20");map.put("holiday", holiday);// 4.启动流程实例,兵器而设置变量的值//runtimeService.startProcessInstanceByKey("myProcess_1");ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey,map);// 5.输出实例信息;System.out.println(processInstance.getName());System.out.println(processInstance.getProcessDefinitionId());System.out.println(processInstance.getId());}

任务变量是设置

在完成任务是设置流程变量, 流程变量只有在该流程完成后其他节点才可能使用该变量,它的作用域是整个流程实例,如果设置的流程变量的key在流程实例中已经存在相同名字,则后设置的变量覆盖前面设置的变量.

这里需要在创建请假单任务完成(以下是通过当前任务id设置任务的)

// 处理任务---zhangsan   / lisi --判断流程变量的请假天数, 目前是1天-->分支:人事经理public static void main(String[] args) {// 1. 得到 processEngineProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 2.得到 TaskServiceTaskService taskService = processEngine.getTaskService();// 3. 查询当前用户是否有任务String taskId = "2508";
//        String key="myProcess_1";
//        Task task = taskService.createTaskQuery()
//                .processDefinitionKey(key)
//                .taskAssignee("zhangsan").singleResult();Map<String, Object> map = new HashMap<String, Object>();Holiday holiday = new Holiday();holiday.setNum(2F);holiday.setHolidayName("请假审批 2020-5-19");map.put("holiday", holiday);// 4. 判断task!=null,说明当前用户有任务if(taskId!=null){taskService.complete(taskId,map);System.out.println("任务执行完成");}}

    3. 当前流程实例如何设置?

解答: 需要通过当前任务设置流程变量, 需要指定当前任务id, 如果当前执行的任务id不存在则抛出异常. 任务办理时也是通过map<key,value>设置流程变量,一次可以设置多个变量.

通过流程实例id设置全局变量, 该流程实例必须是未执行完成的.

public void setGlobalVariableByExecutionId(){//当前流程实例执行 id,通常设置为当前执行的流程实例String executionId="2501";RuntimeService runtimeService = processEngine.getRuntimeService();Holiday holiday = new Holiday();holiday.setNum(3);//通过流程实例 id设置流程变量runtimeService.setVariable(executionId, "holiday", holiday);//一次设置多个值//runtimeService.setVariables(executionId, variables)}

注意: 

executionId必须当前未结束的流程实例的执行id,通常用此id设置流程实例的id,

当然也可以通过RuntimeService.getVariable()获取流程变量.

《Activiti/Flowable  深入BPM工作流》-什么是流程变量?相关推荐

  1. 《Activiti/Flowable 深入BPM工作流》-流程部署实现方式二

    <Activiti/Flowable  深入BPM工作流>                                     ----流程部署实现方式二 一. 问题 流程部署实现方式 ...

  2. 《Activiti/Flowable  深入BPM工作流》-组任务的办理流程是什么?

        <Activiti/Flowable  深入BPM工作流>-组任务的办理流程是什么? 一. 问题          组任务的办理流程是什么? 二. 详情 第一步:查询组任务 指定候 ...

  3. 《Activiti/Flowable 深入BPM工作流》-流程实例怎么实现挂起?

    <Activiti/Flowable  深入BPM工作流>-流程实例怎么实现挂起? 一. 问题 1. 什么情况要进行流程的挂起? 2. 具体怎么将流程挂起? 二. 详情   1. 什么情况 ...

  4. 《Activiti/Flowable  深入BPM工作流》-如何设置local流程变量?

    <Activiti/Flowable  深入BPM工作流>-如何设置local流程变量? 一. 问题:  1. 什么是local流程变量?     2. 如何设置local流程变量?   ...

  5. 《Activiti/Flowable 深入BPM工作流》-流程定义怎么进行删除?

        <Activiti/Flowable  深入BPM工作流>-流程定义怎么进行删除? 一. 问题 之前我们分享过流程定义的流程任务查询,  流程任务处理, 任务那么怎么进行删除? 二 ...

  6. 《Activiti/Flowable 深入BPM工作流》- BPM任务如何关联businessKey?

               <Activiti/Flowable  深入BPM工作流>- BPM任务如何关联businessKey? 一. 问题    1. BPM任务如何关联businessK ...

  7. 《Activiti/Flowable 深入BPM工作流》---工作流中的网关有哪些?

    <Activiti/Flowable  深入BPM工作流>---工作流中的网关有哪些? 一. 问题: 1. 网关分为哪几类? 2. 什么是排他网关? 3. 什么是并行网关? 4. 什么是包 ...

  8. 《Activiti/Flowable 深入BPM工作流》-如何分配任务负责人?

    <Activiti/Flowable  深入BPM工作流>-如何分配任务负责人? 一. 问题      如何分配任务负责人? 二. 详情 1. 直接在画 流程图的时候进行设置. 2.使用流 ...

  9. 《Activiti/Flowable  深入BPM工作流》- Activiti 与springboot 怎么进行整合?

    <Activiti/Flowable  深入BPM工作流> -Activiti 与springboot 怎么进行整合? 一.问题 Activiti 如何与springboot进行整合? 1 ...

最新文章

  1. 关闭Windows 8的metro UI的方法汇总
  2. linux查看气质系统文件命令,Linux dumpe2fs命令:查看文件系统信息
  3. 拯救者r7000怎么关闭触控板_联想拯救者R7000(2020版)上手体验,有没有AMD Yes?
  4. 无监督学习与有监督学习的本质区别是什么_干货关于无监督学习你了解多少?...
  5. es6 数组找最大值_JavaScript(es6)数组常用的方法
  6. SAP License:SAP上线期初导入方法
  7. MYSQL类型与JAVA类型对应表
  8. python处理照片_有趣的Python图片处理
  9. 【TensorFlow-windows】(一)实现Softmax Regression进行手写数字识别(mnist)
  10. 07 -模型层ORM
  11. 我的家乡河北涿州岐沟村(岐沟关)
  12. 购物网站的设计与实现论文
  13. hart协议c语言,简述HART协议命令和语言
  14. 纪广华老师:谈谈学习数论的参考书
  15. 信息安全概论———网络安全协议
  16. 【分享】.Net有哪些大型项目、大型网站的案例?
  17. 微信公众号获取永久素材
  18. Python入门(10)——宝可梦数据集探索
  19. JQuery快速入门之插件
  20. python地产成本_Python3抓取 深圳房地产均价数据,通过真实数据为购置不动产做决策分析(二)...

热门文章

  1. javaFx 通过fxml自定义界面,实现桌面侧边悬浮工具栏
  2. 计算机考研大学报录比,2022考研:71所院校历年考研报录比汇总!
  3. 无毒一身轻——21天改变体质
  4. Linux的声卡驱动中ALSA与OSS的区别和简单流程介
  5. 夺旗游戏:dc2夺旗总结
  6. 第七届“创客中国”物联网中小企业创新创业大赛决赛落幕,云蝠智能荣获二等奖
  7. 爬取14000+条数据!分析招聘网站岗位信息
  8. (5)客户端app安全_键盘,屏幕录像
  9. Android音频改进设想及PulseAudio
  10. mysql144,通过phpMyAdmin从MySQL错误144中恢复