Activiti系列(二)--审批流程
来源:互联网 发布:荣新it培训 编辑:程序博客网 时间:2024/05/06 04:34
上一篇文章中,我们介绍了Activiti最简单的流程,但是,我们知道,一般来讲,审批一定有同意和不同意的区别,我们在这篇博客中做一个简单的Demo.
代码:
当然上一篇博客中已经配置了基本的Activiti.cfg.xml和log4j.properties文件,这次,我们都不说这些了。
先看目录:
一、suquenceFlow.bpmn
节点审批【部门经理】中设置,跟上一篇博客中没有什么区别,我们给它的Assignee为“赵六”,第二个几点审批【总经理】,我们给它的Assignee为“田七”。
然后,我们看图中的两条线:
我们看连线1设置:首先写上“不重要”,这里面的连线1:
这个并不重要,就是写不写都没有关系,主要是这一步:
我们在写的时候,一定要注意格式不能错。
同样的连线二:
最后,我们要给它的process起名字,点击空白处:
二、SequenceFlowTest.java类
这样,图画好了,我们就看一下我们SequenceFlowTest.java类:
<span style="font-size:18px;">package cn.itcast.f_sequenceFlow;import java.io.InputStream;import java.util.HashMap;import java.util.List;import java.util.Map;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngines;import org.activiti.engine.repository.Deployment;import org.activiti.engine.runtime.ProcessInstance;import org.activiti.engine.task.Task;import org.junit.Test;public class SequenceFlowTest {ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();/**部署流程定义(从inputStream)*/@Testpublic void deploymentProcessDefinition_inputStream(){InputStream inputStreamBpmn = this.getClass().getResourceAsStream("sequenceFlow.bpmn");InputStream inputStreamPng = this.getClass().getResourceAsStream("sequenceFlow.png");Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service.createDeployment()//创建一个部署对象.name("连线")//添加部署的名称.addInputStream("sequenceFlow.bpmn", inputStreamBpmn)//.addInputStream("sequenceFlow.png", inputStreamPng)//.deploy();//完成部署System.out.println("部署ID:"+deployment.getId());//System.out.println("部署名称:"+deployment.getName());//}/**启动流程实例*/@Testpublic void startProcessInstance(){//流程定义的keyString processDefinitionKey = "sequenceFlow";ProcessInstance pi = processEngine.getRuntimeService()//与正在执行的流程实例和执行对象相关的Service.startProcessInstanceByKey(processDefinitionKey);//使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动System.out.println("流程实例ID:"+pi.getId());//流程实例ID 101System.out.println("流程定义ID:"+pi.getProcessDefinitionId());//流程定义ID helloworld:1:4}/**查询当前人的个人任务*/@Testpublic void findMyPersonalTask(){String assignee = "赵六";List<Task> list = processEngine.getTaskService()//与正在执行的任务管理相关的Service.createTaskQuery()//创建任务查询对象/**查询条件(where部分)*/.taskAssignee(assignee)//指定个人任务查询,指定办理人//.taskCandidateUser(candidateUser)//组任务的办理人查询//.processDefinitionId(processDefinitionId)//使用流程定义ID查询//.processInstanceId(processInstanceId)//使用流程实例ID查询//.executionId(executionId)//使用执行对象ID查询/**排序*/.orderByTaskCreateTime().asc()//使用创建时间的升序排列/**返回结果集*///.singleResult()//返回惟一结果集//.count()//返回结果集的数量//.listPage(firstResult, maxResults);//分页查询.list();//返回列表if(list!=null && list.size()>0){for(Task task:list){System.out.println("任务ID:"+task.getId());System.out.println("任务名称:"+task.getName());System.out.println("任务的创建时间:"+task.getCreateTime());System.out.println("任务的办理人:"+task.getAssignee());System.out.println("流程实例ID:"+task.getProcessInstanceId());System.out.println("执行对象ID:"+task.getExecutionId());System.out.println("流程定义ID:"+task.getProcessDefinitionId());System.out.println("########################################################");}}}/**完成我的任务*/@Testpublic void completeMyPersonalTask(){//任务IDString taskId = "3103";//完成任务的同时,设置流程变量,使用流程变量用来指定完成任务后,下一个连线,对应sequenceFlow.bpmn文件中${message=='不重要'}Map<String, Object> variables = new HashMap<String, Object>();variables.put("message", "重要");processEngine.getTaskService()//与正在执行的任务管理相关的Service.complete(taskId,variables);System.out.println("完成任务:任务ID:"+taskId);}}</span>
注:
第一个方法、第二个方法、第三个方法,如果大家看了上一篇博客,应该不用说,我们看最后一个方法:completeMyPersonalTask()
这个方法中,我们processEngine.getTaskService()启动了task之后,我们给了它一个map,map中放入了“message”,这个一定要跟,我们连线1或者连线2中的${message=='不重要'}里面的message一样,网址后,给message赋值,这里其实大家都能猜到了,如果是,“重要”那将会发送给审批【总经理】,如果为“不重要”将会直接结束。
1 0
- Activiti系列(二)--审批流程
- Activiti(二)流程
- 审批流程设计方案-数据(二)
- Activiti获取流程中的审批意见
- springMVC集成activiti--Activiti系列(二)
- activiti 流程定义(二)
- Activiti(二)流程实例
- Activiti学习文档(四)之发布流程并审批处理
- 工作流引擎Activiti系列(二)——流程设计工具
- activiti5学习笔记(二)伪审批汇总流程
- Activiti流程管理学习笔记(二)
- Activiti获取某个流程实例已经审批的节点记录
- Activiti系列(四)——设计指定Assignee+审批
- 造轮子系列之封装审批流程
- activiti自定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型
- activiti自定义流程之Spring整合activiti-modeler实例(二):创建流程模型
- Activiti逐级审批
- activiti超时自动审批
- Object类中的clone方法
- ThreadLocal源码讲解
- 二级联动的代码
- Codeforces Round #343 (Div. 2) B. Far Relative’s Problem
- a的b次方,结果取m的模
- Activiti系列(二)--审批流程
- html5对于IE6的兼容性问题
- 【UVA11174】Stand in a Line——逆元+树形Dp
- 通过Photoshop cs5.0将视频截取并制作gif
- android 实现一个app启动另一个app的service服务
- ZMY_异步任务抽象类
- CSU 1697 Surface Area of Cubes 思维题
- LintCode 找到单链表倒数第n个节点
- codeforce 621C Wet Shark and Flowers