Actviti工作流入门知识(流程变量) DAY-02
一、流程变量
流程变量在整个工作流中扮演很重要的作用。例如:请假流程中有请假天数、请假原因等一些参数都为流程变量的范围。流程变量的作用域范围是流程实例。也就是说各个流程实例的流程变量是不相互影响的。流程实例结束完成以后流程变量还保存在数据库中(存放到流程变量的历史表中)。
二、部署流程定义
public class VatTest { @Test public void testDeploy() throws Exception { //获取核心对象 服务大管家 ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine(); //获取服务 RepositoryService repositoryService = defaultProcessEngine.getRepositoryService(); //部署对象 DeploymentBuilder createDeployment = repositoryService.createDeployment(); //上传资源 InputStream inputStream = this.getClass().getResourceAsStream("Leave.bpmn"); InputStream inputStream2 = this.getClass().getResourceAsStream("Leave.png"); createDeployment.addInputStream("Leave.bpmn", inputStream); createDeployment.addInputStream("Leave.png", inputStream2); createDeployment.name("申请假期"); //部署 createDeployment.deploy(); } }
三、启动流程实例
/** * 启动流程实例 * @throws Exception */ @Test public void testStart() throws Exception { //获取核心对象 服务大管家 ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine(); //获取服务 RuntimeService runtimeService = defaultProcessEngine.getRuntimeService(); //启动 并且设置变量 Map<String,Object> map = new HashMap<>(); map.put("time", new Date());// s时间 map.put("is", true); // 是否是会员卡 map.put("user", new User(1, "kd", "1111")); ProcessInstance startProcessInstanceByKey = runtimeService.startProcessInstanceByKey("Leave",map); System.out.println(startProcessInstanceByKey); }
四、完成任务 获取流程变量
public void testCompleTask() throws Exception { // 获取核心对象 服务大管家 ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine(); // 获取服务 RuntimeService runtimeService = defaultProcessEngine.getRuntimeService(); // 实例 processInstance 和 excution 执行对象 String executionId="7501"; String variableName="cardID"; // 获取单个值 String variable = (String) runtimeService.getVariable(executionId, variableName); // 某几个值 Map<String, Object> variables2 = runtimeService.getVariables(executionId, Arrays.asList("cardID","money")); System.out.println(variables2); System.out.println("================分割线======================="); // 任务服务对象 TaskService 获取流程变量 TaskService taskService = defaultProcessEngine.getTaskService(); String taskId="7511"; String variableName2="cardID"; Map<String, Object> variables = taskService.getVariables(taskId); System.out.println(variables); // 完成 // 添加流程变量代表申请的原因 Map<String, Object> variables3=new HashMap<>(); variables3.put("reson", "需要去植发"); variables3.put("date", "一天"); // variables3.put("is", false); taskService.complete(taskId,variables3); }
说明:
1)流程变量的作用域就是流程实例,所以只要设置就行了,不用管在哪个阶段设置
2)基本类型设置流程变量,在taskService中使用任务ID,定义流程变量的名称,设置流程变量的值。
3)Javabean类型设置流程变量,需要这个javabean实现了Serializable接口
4)设置流程变量的时候,向act_ru_variable这个表添加数据
五、经理审批 完成任务-获取流程变量
public void testlsCompleTask() throws Exception { // 获取核心对象 服务大管家 ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine(); TaskService taskService = defaultProcessEngine.getTaskService(); String taskId="10004"; Map<String, Object> variables = taskService.getVariables(taskId); System.out.println(variables); }
说明:
1)流程变量的获取针对流程实例(即1个流程),每个流程实例获取的流程变量时不同的
2)使用基本类型获取流程变量,在taskService中使用任务ID,流程变量的名称,获取流程变量的值。
3)Javabean类型设置获取流程变量,除了需要这个javabean实现了Serializable接口外,还要求流程变量对象的属性不能发生变化,否则抛出异常。解决方案,固定序列化ID
六、顺序流 -线-判断走向
分支流
同意和驳回(一旦驳回重新申请)
${flag==true}
七、任务节点
用户节点 (必须人参与) ----usertask –
complate(taskid)
接收节点(自动化程序参与) ---- receive --计算销售额-发送短信
signal(excuid)
流程图如下:
八、网关节点
排他网关 --只能一个完成
并行网关 – 所有执行完才能算完成
九、监听器
在流程中我们有时会对整个流程或者一个节点的某种状态做出相应的处理。这时就会用到监听器。
在Activiti中流程的监听主要分为两大类:
执行监听器和任务监听器。
任务监听器:只能绑定到用户任务节点。 可用于用户节点办理者的动态设置,操作日志等
执行监听器:可以在任何节点绑定。修改流程结束状态(在结束节点绑定执行监听器执行修改),操作日志等
1,执行监听器 任何节点
excutionListener
2.任务监听器 用户任务节点
taskListener
场景:动态设置处理人
十、封装了BaseBpmn类
public class BaseBpmn { // 获取核心对象 服务大管家 protected ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine(); // 获取运行的service服务 protected RuntimeService runtimeService = defaultProcessEngine.getRuntimeService(); // 获取TaskService protected TaskService taskService = defaultProcessEngine.getTaskService(); /** * 部署文件 */ public void deploy(String resource,String name){ //获取核心对象 服务大管家 ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine(); //获取服务 RepositoryService repositoryService = defaultProcessEngine.getRepositoryService(); //部署对象 DeploymentBuilder createDeployment = repositoryService.createDeployment(); //上传资源 InputStream inputStream = this.getClass().getResourceAsStream(resource+".bpmn"); InputStream inputStream2 = this.getClass().getResourceAsStream(resource+".png"); createDeployment.addInputStream(resource+".bpmn", inputStream); createDeployment.addInputStream(resource+".png", inputStream2); createDeployment.name(name); //部署 createDeployment.deploy(); } /** * 启动实例带流程变量 */ public ProcessInstance start(String key, Map<String, Object> variables) { // 启动 // 设置一下变量 ProcessInstance startProcessInstanceByKey = runtimeService.startProcessInstanceByKey(key, variables); return startProcessInstanceByKey; } /** * 启动实例带流程变量 */ public ProcessInstance start(String key) { // 启动 // 设置一下变量 ProcessInstance startProcessInstanceByKey = runtimeService.startProcessInstanceByKey(key); return startProcessInstanceByKey; } /** * 完成任务 带流程变量 方便流转到下以个节点 */ public void compleTask(String taskId, 20000 Map<String, Object> variables) throws Exception { taskService.complete(taskId, variables); } /** * 完成任务 */ public void compleTask(String taskId) throws Exception { taskService.complete(taskId); } /** * 完成任务 实例id 和 人的名称 */ public void compleTaskByPIdAndName(String pid, String name) throws Exception { // 获取查询对象 TaskQuery createTaskQuery = taskService.createTaskQuery(); // 获取任务id Task task = createTaskQuery.processInstanceId(pid).taskAssignee(name).singleResult(); // 完成 taskService.complete(task.getId()); } /** * 完成任务 实例id 和 人的名称 */ public void compleTaskByPIdAndName(String pid, String name, Map<String, Object> variables) throws Exception { // 获取查询对象 TaskQuery createTaskQuery = taskService.createTaskQuery(); // 获取任务id Task task = createTaskQuery.processInstanceId(pid).taskAssignee(name).singleResult(); // 完成 taskService.complete(task.getId(), variables); } /** * 查询某个人的任务列表 */ public List<Task> queryTaskList(String name) throws Exception { // 获取查询对象 TaskQuery createTaskQuery = taskService.createTaskQuery(); // 设置查询条件 createTaskQuery.taskAssignee(name); // 查询列表 List<Task> list = createTaskQuery.list(); return list; } /** * 查询某个人的当前任务 */ public Task queryTaskByName(String pid, String name) throws Exception { // 获取查询对象 TaskQuery createTaskQuery = taskService.createTaskQuery(); // 设置查询条件 createTaskQuery.taskAssignee(name); createTaskQuery.processInstanceId(pid); // Task task = createTaskQuery.singleResult(); return task; } /** * 查询当前执行对象(当前活动节点) */ public Execution queryExcution(String pid, String actid) throws Exception { // 获取查询对象 ExecutionQuery createExecutionQuery = runtimeService.createExecutionQuery(); // 设置查询条件 Execution execution = createExecutionQuery.processInstanceId(pid).activityId(actid).singleResult(); // 返回 return execution; } // 查询流程是否结束 public void isEnd(String pid) { // 查询对象 ProcessInstanceQuery createProcessInstanceQuery = runtimeService.createProcessInstanceQuery(); // 根据id ProcessInstance singleResult = createProcessInstanceQuery.processInstanceId(pid).singleResult(); // 如果singleResult找到说明流程还没有结束 if (singleResult != null) { System.out.println("流程未结束或不存在"); } else { System.out.println("流程结束"); } } }阅读更多
- salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句
- Flask_初始化参数_url添加变量,重定向,捕获错误,钩子等入门知识介绍
- JAVA_Day_02(注释 关键字 标识符 常量 进制转换 变量 数据类型 (类型转换))
- 基础知识02 - 零基础入门学习汇编语言02
- Shell初学者的入门知识-变量
- 基础知识02 - 零基础入门学习汇编语言02
- 工作流术语及入门知识介绍
- Java基础知识(数据类型、标识符、变量、运算符和流程控制语句)
- 工作流术语及入门知识介绍
- View的绘制流程入门.对郭霖大大文章知识小补充
- 一直想学习的工作流的程序分享给大家--有关画工作流流程的入门程序(附源码)
- Activiti ---- 工作流(流程框架)带你入门(重点的去理解)
- Java基础知识02-流程控制-do while
- 工作流术语及入门知识介绍
- JAVA基础知识思维导图:unit01_开发环境,变量,基本类型及转换,数学运算,流程控制,数组
- 工作流Activiti5流程变量 任务变量 setVariables 跟 setVariablesLocal区别
- Java基础知识02-流程控制-for
- android入门知识:android使用全局变量
- Java基础知识(数据类型、标识符、变量、运算符和流程控制语句)
- Activiti工作流--流程变量的设置与应用--之六