组任务

直接指定办理人

流程图如下:

  1. import java.util.HashMap;
  2. import java.util.List;
  3. import java.util.Map;
  4.  
  5. import org.activiti.engine.ProcessEngine;
  6. import org.activiti.engine.ProcessEngines;
  7. import org.activiti.engine.task.IdentityLink;
  8. import org.activiti.engine.task.Task;
  9. import org.junit.Test;
  10.  
  11. public class Task3Test {
  12. @Test
  13. public void testDeploy(){
  14. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  15. processEngine.getRepositoryService()
  16. .createDeployment()
  17. .addClasspathResource("com/itheima10/activiti/task/task3.bpmn")
  18. .deploy();
  19. }
  20.  
  21. /*
  22. * 当启动完流程实例以后,进入了电脑维修的任务
  23. * <userTask id="电脑维修" name="电脑维修" activiti:candidateUsers="工程师1,工程师2,工程师3"></userTask>
  24. * 所以在
  25. * act_ru_identitylink
  26. * 当当前任务结束以后,任务的候选人就从这里删除了
  27. * act_hi_identitylink
  28. * 这两张表中分别对应的数据工程师1有两个
  29. * taskId:工程师1
  30. * piid:工程师1
  31. */
  32. @Test
  33. public void testStartPI(){
  34. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  35. processEngine.getRuntimeService()
  36. .startProcessInstanceById("task3:1:1704");
  37. }
  38.  
  39. /**
  40. * 根据候选人查询组任务
  41. */
  42. @Test
  43. public void testQueryTaskByCandidate(){
  44. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  45. List<Task> tasks = processEngine.getTaskService()
  46. .createTaskQuery()
  47. .taskCandidateUser("工程师1")
  48. .list();
  49. for (Task task : tasks) {
  50. System.out.println(task.getName());
  51. }
  52. }
  53.  
  54. /**
  55. * 根据组任务查看任务的候选人
  56. */
  57. @Test
  58. public void testQueryCandidateByTask(){
  59. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  60. List<IdentityLink> identityLinks = processEngine.getTaskService()
  61. .getIdentityLinksForTask("1804");
  62. for (IdentityLink identityLink : identityLinks) {
  63. System.out.println(identityLink.getUserId());
  64. }
  65. }
  66.  
  67. /**
  68. * 候选人认领任务
  69. */
  70. @Test
  71. public void testClaimTask(){
  72. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  73. processEngine.getTaskService()
  74. .claim("1804","工程师1");
  75. }
  76.  
  77. @Test
  78. public void testFinishTask(){
  79. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  80. processEngine.getTaskService()
  81. .complete("1804");
  82. }
  83. }

使用类

流程图:

  1. package com.itheima10.activiti.task;
  2.  
  3. import org.activiti.engine.delegate.DelegateTask;
  4. import org.activiti.engine.delegate.TaskListener;
  5.  
  6. public class MyTask4Listener implements TaskListener{
  7. @Override
  8. public void notify(DelegateTask delegateTask) {
  9. // TODO Auto-generated method stub
  10. /**
  11. * 组任务的候选人应该来自于数据库的某一张表
  12. */
  13. delegateTask.addCandidateUser("张三");
  14. delegateTask.addCandidateUser("王五");
  15.  
  16. /**
  17. * 直接把一个组赋值给一个任务的候选人
  18. */
  19. delegateTask.addCandidateGroup("2201");// 参数为groupid
  20. }
  21. }
  1. package com.itheima10.activiti.identity;
  2.  
  3. import org.activiti.engine.ProcessEngine;
  4. import org.activiti.engine.ProcessEngines;
  5. import org.activiti.engine.identity.Group;
  6. import org.activiti.engine.identity.User;
  7. import org.activiti.engine.impl.persistence.entity.GroupEntity;
  8. import org.activiti.engine.impl.persistence.entity.UserEntity;
  9. import org.junit.Test;
  10.  
  11. public class IdentityTest {
  12. @Test
  13. public void testIdentity(){
  14. //创建组
  15. Group group = new GroupEntity();
  16. group.setName("咨询组");
  17. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  18. processEngine.getIdentityService()
  19. .saveGroup(group);
  20.  
  21. //创建组员
  22. User user1 = new UserEntity();
  23. user1.setId("咨询员1");
  24.  
  25. User user2 = new UserEntity();
  26. user2.setId("咨询员2");
  27. processEngine.getIdentityService().saveUser(user1);
  28. processEngine.getIdentityService().saveUser(user2);
  29. //建立组员与组的关系
  30. processEngine.getIdentityService().createMembership(user1.getId(), group.getId());
  31. processEngine.getIdentityService().createMembership(user2.getId(), group.getId());
  32. }
  33.  
  34. @Test
  35. //根据组ID删除组
  36. public void testDeleteGroup(){
  37. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  38. processEngine.getIdentityService()
  39. .deleteGroup("2201");
  40. }
  41. }
  1. package com.itheima10.activiti.task;
  2.  
  3. import java.util.List;
  4.  
  5. import org.activiti.engine.ProcessEngine;
  6. import org.activiti.engine.ProcessEngines;
  7. import org.activiti.engine.task.IdentityLink;
  8. import org.activiti.engine.task.Task;
  9. import org.junit.Test;
  10.  
  11. public class Task4Test {
  12. @Test
  13. public void testDeploy(){
  14. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  15. processEngine.getRepositoryService()
  16. .createDeployment()
  17. .addClasspathResource("com/itheima10/activiti/task/task4.bpmn")
  18. .deploy();
  19. }
  20.  
  21. @Test
  22. public void testStartPI(){
  23. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  24. processEngine.getRuntimeService()
  25. .startProcessInstanceById("task4:1:2004");
  26. }
  27.  
  28. }

相关表:

act_id_group  组

act_id_membership  组员

连线

之前的流程图都是错的,只是为了演示如何快速使用,下面通过连线学习如何画一个正确的流程图

例子1:

  1. package com.itheima10.activiti.sequenceFlow;
  2.  
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6.  
  7. import org.activiti.engine.ProcessEngine;
  8. import org.activiti.engine.ProcessEngines;
  9. import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
  10. import org.activiti.engine.impl.pvm.PvmTransition;
  11. import org.activiti.engine.impl.pvm.process.ActivityImpl;
  12. import org.junit.Test;
  13.  
  14. public class SequenceFlowTest {
  15. @Test
  16. public void testDeploy(){
  17. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  18. processEngine.getRepositoryService()
  19. .createDeployment()
  20. .addClasspathResource("com/itheima10/activiti/sequenceFlow/sequenceflow.bpmn")
  21. .deploy();
  22. }
  23.  
  24. @Test
  25. public void testStartPi(){
  26. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  27. processEngine.getRuntimeService()
  28. .startProcessInstanceById("sequenceflow:2:3604");
  29. }
  30.  
  31. /*
  32. * 完成请假申请的任务
  33. */
  34. @Test
  35. public void testFinisTask(){
  36. Map<String, Object> variables = new HashMap<String, Object>();
  37. variables.put("day", 2);
  38. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  39. processEngine.getTaskService()
  40. .complete("3704",variables);
  41. }
  42.  
  43. /**
  44. * 完成部门经理审批的任务
  45. */
  46. @Test
  47. public void testFinisTask2(){
  48. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  49. processEngine.getTaskService()
  50. .complete("3803");//请假天数2天,直接审批通过
  51. }
  52.  
  53. /**
  54. * 获取部门经理审批节点的出处有几个,每一个的名称
  55. */
  56. @Test
  57. public void testGetOutGoing(){
  58. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  59. /**
  60. * ProcessDefinitionEntity 流程定义对象
  61. */
  62. ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity)processEngine.getRepositoryService()
  63. .getProcessDefinition("sequenceflow:2:3604");
  64. /**
  65. * 根据流程定义对象中的某一个节点的id的值,就可以得到该节点的ActitityImpl(节点对象)
  66. */
  67. ActivityImpl activityImpl = processDefinitionEntity.findActivity("部门经理审批");
  68. /**
  69. * 该节点对象有多少sequenceFlow
  70. */
  71. List<PvmTransition> pvmTransitions = activityImpl.getOutgoingTransitions();
  72. for (PvmTransition pvmTransition : pvmTransitions) {
  73. System.out.println(pvmTransition.getId());//输出sequenceFlow的id的值
  74. System.out.println(pvmTransition.getDestination());//输出sequenceFlow的目标节点
  75. }
  76. }
  77. }

例子2:

  1. package com.itheima10.activiti.sequenceFlow;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. import org.activiti.engine.ProcessEngine;
  7. import org.activiti.engine.ProcessEngines;
  8. import org.junit.Test;
  9.  
  10. public class SequenceFlow2Test {
  11. @Test
  12. public void testDeploy(){
  13. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  14. processEngine.getRepositoryService()
  15. .createDeployment()
  16. .addClasspathResource("com/itheima10/activiti/sequenceFlow/sequenceflow2.bpmn")
  17. .deploy();
  18. }
  19.  
  20. @Test
  21. public void testStartPi(){
  22. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  23. processEngine.getRuntimeService()
  24. .startProcessInstanceById("sequence2:1:4004");
  25. }
  26.  
  27. @Test
  28. public void testFinishTask(){
  29. Person person = new Person();
  30. person.setDay(2);
  31. Map<String, Object> variables = new HashMap<String, Object>();
  32. variables.put("person", person);
  33. variables.put("day", 1);
  34. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  35. processEngine.getTaskService()
  36. .complete("4104", variables);
  37. }
  38. }

接收活动(receiveTask,即等待活动)

不需要审批的流程,例如审批后的归档操作

例子:

  1. package com.itheima10.activiti.receivetask;
  2.  
  3. import org.activiti.engine.ProcessEngine;
  4. import org.activiti.engine.ProcessEngines;
  5. import org.junit.Test;
  6.  
  7. /**
  8. * receiveTask不需要人工干预,不需要审批,直接把当前的事情做完以后,流向下一个节点即可
  9. * @author zd
  10. *
  11. */
  12. public class ReceiveTaskTest {
  13. @Test
  14. public void testDeploy(){
  15. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  16. processEngine.getRepositoryService()
  17. .createDeployment()
  18. .addClasspathResource("com/itheima10/activiti/receivetask/receivetask.bpmn")
  19. .deploy();
  20. }
  21.  
  22. @Test
  23. /**
  24. * act_ru_task表中不会有新的记录,因为不需要人审批此流程
  25. * 在act_ru_execution表中可以看到当前流程实例
  26. */
  27. public void testStartPI(){
  28. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  29. processEngine.getRuntimeService()
  30. .startProcessInstanceById("receive:1:4304");
  31. }
  32.  
  33. @Test
  34. public void testNextNode(){
  35. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  36. processEngine.getRuntimeService()
  37. /**
  38. * 给当前的流程实例发一个信号:往下一个节点走
  39. */
  40. .signal("4401");
  41. }
  42. }

Activiti5工作流笔记三的更多相关文章

  1. Activiti5工作流笔记一

    介绍工作流 网上工作流的定义一大堆,这里就不去复制了,通俗的理解,工作流就是类似OA系统中请假审批.报销审批等一系列流程,下级提交的申请只有直系领导才能审批,其他人是没有权限的,而只有直系领导审批通过 ...

  2. Activiti5工作流笔记四

    排他网关(ExclusiveGateWay) 流程图 部署流程定义+启动流程实例 查询我的个人任务 完成我的个人任务 并行网关(parallelGateWay) 流程图 部署流程定义+启动流程实例 查 ...

  3. Activiti5工作流笔记二

    流程变量 import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import org.activiti ...

  4. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  5. 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  6. Mastering Web Application Development with AngularJS 读书笔记(三)

    第一章笔记 (三) 一.Factories factory 方法是创建对象的另一种方式,与service相比更灵活,因为可以注册可任何任意对象创造功能.例如: myMod.factory('notif ...

  7. Python 学习笔记三

    笔记三:函数 笔记二已取消置顶链接地址:http://www.cnblogs.com/dzzy/p/5289186.html 函数的作用: 給代码段命名,就像变量給数字命名一样 可以接收参数,像arg ...

  8. 《MFC游戏开发》笔记三 游戏贴图与透明特效的实现

    本系列文章由七十一雾央编写,转载请注明出处. 313239 作者:七十一雾央 新浪微博:http://weibo.com/1689160943/profile?rightmod=1&wvr=5 ...

  9. [Firefly引擎][学习笔记三][已完结]所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

随机推荐

  1. [Jmeter]用Jmeter做压力测试(分布式)

    Jmeter 是Java应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误.为了让jmeter工具提 ...

  2. ORB-SLAM跑通笔记本摄像头

    环境:Ubuntu 14.04 + ROS indigo + ORB-SLAM2 (Thinkpad T460s) 1. 安装ORB-SLAM: Pangolin Pangolin有一些依赖库,按照提 ...

  3. iOS 测试工具reveal可视化调试工具的使用

    简单翻译一下reveal可视化图形工具插入项目的官方文档(官方英文版file:///Applications/Reveal.app/Contents/SharedSupport/Documentati ...

  4. jieba结巴分词

    pip install jieba安装jieba模块 如果网速比较慢,可以使用豆瓣的Python源:pip install -i https://pypi.douban.com/simple/ jie ...

  5. 博客更换至 www.zhaoch.top

    博客更换至 www.zhaoch.top 随手拷了一些链接 http://www.zhaoch.top/操作系统/linux/常用命令备忘.html http://www.zhaoch.top/操作系 ...

  6. 【Python 开发】第二篇 :Python安装

    一.python3.x安装 1)由于centos7原本就安装了Python2,而且这个Python2不能被删除,因为有很多系统命令,比如yum都要用到. 官网:https://www.python.o ...

  7. [c++] Getting Started - CMake

    CMake is an open-source cross platform build system, according to CMake's creator, Kitware. But CMak ...

  8. logstash+elasticsearch 错误摘记

    [2017-09-17T06:00:22,511][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception ...

  9. 最短路径——floyd(多源最短路径)

    #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> ...

  10. Internet Secure

    key Secret key(密钥):ues the same key to Encryption and decryption(symmetric-key)对称加密,需要绝对安全的空间来传递key ...