13.activiti工作流-用户任务(userTask,即用户操作的任务)
来源:互联网 发布:js 对象作为参数 编辑:程序博客网 时间:2024/05/18 03:49
1.流程图
2.分配个人任务方式一(直接指定办理人)
1:流程图中任务节点的配置
2:测试代码:
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//部署流程定义,启动流程实例 @Test public void testTask() throws Exception { // 1 发布流程 InputStream inputStreamBpmn = this.getClass().getResourceAsStream("taskProcess.bpmn"); InputStream inputStreamPng = this.getClass().getResourceAsStream("taskProcess.png"); processEngine.getRepositoryService()// .createDeployment()// .addInputStream("userTask.bpmn", inputStreamBpmn)// .addInputStream("userTask.png", inputStreamPng)// .deploy(); // 2 启动流程 //启动流程实例的同时,设置流程变量 ProcessInstance pi = processEngine.getRuntimeService()// .startProcessInstanceByKey("taskProcess"); System.out.println("pid:" + pi.getId()); }//查询我的个人任务列表 @Test public void findMyTaskList(){ String userId = "张三丰"; List<Task> list = processEngine.getTaskService()// .createTaskQuery()// .taskAssignee(userId)//指定个人任务查询 .list(); for(Task task:list ){ System.out.println("id="+task.getId()); System.out.println("name="+task.getName()); System.out.println("assinee="+task.getAssignee()); System.out.println("createTime="+task.getCreateTime()); System.out.println("executionId="+task.getExecutionId()); } }//完成任务 @Test public void completeTask(){ String taskId = "3209"; processEngine.getTaskService()// .complete(taskId);// System.out.println("完成任务"); }
说明:
1)张三丰是个人任务的办理人
2)但是这样分配任务的办理人不够灵活,因为项目开发中任务的办理人不要放置XML文件中。
3.分配个人任务方式二(使用流程变量)
1:流程图中任务节点的配置
2:测试代码
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//部署流程定义,启动流程实例 @Test public void testTask() throws Exception { // 1 发布流程 InputStream inputStreamBpmn = this.getClass().getResourceAsStream("taskProcess.bpmn"); InputStream inputStreamPng = this.getClass().getResourceAsStream("taskProcess.png"); processEngine.getRepositoryService()// .createDeployment()// .addInputStream("userTask.bpmn", inputStreamBpmn)// .addInputStream("userTask.png", inputStreamPng)// .deploy(); // 2 启动流程 //启动流程实例的同时,设置流程变量 Map<String, Object> variables = new HashMap<String, Object>(); variables.put("userID", "张翠三"); ProcessInstance pi = processEngine.getRuntimeService()// .startProcessInstanceByKey("taskProcess",variables); System.out.println("pid:" + pi.getId()); } //查询我的个人任务列表 @Test public void findMyTaskList(){ String userId = "张翠三"; List<Task> list = processEngine.getTaskService()// .createTaskQuery()// .taskAssignee(userId)//指定个人任务查询 .list(); for(Task task:list ){ System.out.println("id="+task.getId()); System.out.println("name="+task.getName()); System.out.println("assinee="+task.getAssignee()); System.out.println("createTime="+task.getCreateTime()); System.out.println("executionId="+task.getExecutionId()); } } //完成任务 @Test public void completeTask(){ String taskId = "3209"; processEngine.getTaskService()// .complete(taskId);// System.out.println("完成任务"); }
说明:
1)张翠山是个人任务的办理人
2)在开发中,可以在页面中指定下一个任务的办理人,通过流程变量设置下一个任务的办理人
4.分配个人任务方式三(使用类)
1:流程图中任务节点的配置
2:TaskListenerImpl类,用来设置任务的办理人
public class TaskListenerImpl implements TaskListener { /**指定个人任务和组任务的办理人*/ @Override public void notify(DelegateTask delegateTask) { String assignee = "张无忌"; //指定个人任务 delegateTask.setAssignee(assignee); }}3:测试代码ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//部署流程定义,启动流程实例 @Test public void testTask() throws Exception { // 1 发布流程 InputStream inputStreamBpmn = this.getClass().getResourceAsStream("taskProcess.bpmn"); InputStream inputStreamPng = this.getClass().getResourceAsStream("taskProcess.png"); processEngine.getRepositoryService()// .createDeployment()// .addInputStream("userTask.bpmn", inputStreamBpmn)// .addInputStream("userTask.png", inputStreamPng)// .deploy(); // 2 启动流程 ProcessInstance pi = processEngine.getRuntimeService()// .startProcessInstanceByKey("taskProcess"); System.out.println("pid:" + pi.getId()); } //查询我的个人任务列表 @Test public void findMyTaskList(){ String userId = "张无忌"; List<Task> list = processEngine.getTaskService()// .createTaskQuery()// .taskAssignee(userId)//指定个人任务查询 .list(); for(Task task:list ){ System.out.println("id="+task.getId()); System.out.println("name="+task.getName()); System.out.println("assinee="+task.getAssignee()); System.out.println("createTime="+task.getCreateTime()); System.out.println("executionId="+task.getExecutionId()); } } //完成任务 @Test public void completeTask(){ String taskId = "3408"; processEngine.getTaskService()// .complete(taskId);// System.out.println("完成任务"); } //可以分配个人任务从一个人到另一个人(认领任务) @Test public void setAssigneeTask(){ //任务ID String taskId = "3408"; //指定认领的办理者 String userId = "周芷若"; processEngine.getTaskService()// .setAssignee(taskId, userId); }
说明:
1)在类中使用delegateTask.setAssignee(assignee);的方式分配个人任务的办理人,此时张无忌是下一个任务的办理人
2)通过processEngine.getTaskService().setAssignee(taskId, userId);将个人任务从一个人分配给另一个人,此时张无忌不再是下一个任务的办理人,而换成了周芷若
3)在开发中,可以将每一个任务的办理人规定好,例如张三的领导是李四,李四的领导是王五,这样张三提交任务,就可以查询出张三的领导是李四,通过类的方式设置下一个任务的办理人
总结
个人任务及三种分配方式:
1:在taskProcess.bpmn中直接写 assignee=“张三丰”
2:在taskProcess.bpmn中写 assignee=“#{userID}”,变量的值要是String的。
使用流程变量指定办理人
3,使用TaskListener接口,要使类实现该接口,在类中定义:
delegateTask.setAssignee(assignee);// 指定个人任务的办理人
使用任务ID和办理人重新指定办理人:
processEngine.getTaskService()//
.setAssignee(taskId, userId);
- 13.activiti工作流-用户任务(userTask,即用户操作的任务)
- Activiti工作流之用户任务分配
- 【转】activiti用户任务
- 【转】activiti用户任务
- Activiti用户任务分配
- activiti 用户任务分配指定
- Activiti学习之对用户任务进行操作
- 工作流Activiti的学习总结(十)Activiti手动执行的应用(UserTask)
- Activiti基础教程--10开始活动节点,接收活动,用户任务(个人任务,组任务)
- Activiti基础教程--10开始活动节点,接收活动,用户任务(个人任务,组任务)
- Activiti工作流(6):流程实例、任务的执行
- 组任务(group)activiti工作流的角色
- 工作流框架--activiti(五)--个人任务和组任务
- 用户故事、开发任务与工作流块任务数据模式
- activiti工作流06-任务分支
- 14.activiti工作流-组任务
- 工作流UserTask的使用
- activiti任务操作
- 深入学习Hibernate4_02 hibernate.cfg.xml文件和xxx.hbm.xml文件详解
- gdb调试多进程和多线程
- 算法 排序算法之插入排序--直接插入排序和希尔排序
- elf动态链接实例
- MQTT--HIVEMQ
- 13.activiti工作流-用户任务(userTask,即用户操作的任务)
- Andriod 初体验
- Linux mint18.1环境下解决eclipse安装后无法启动的问题
- Java——回调机制
- eclipse运行jsp+servlet即web项目时生成的内容位置
- webservices
- Maven学习之入门二
- JZOJ 3754 【NOI2014】魔法森林
- [bzoj2301]problem b 莫比乌斯反演