Activiti5工作流笔记三
组任务
直接指定办理人
流程图如下:
- 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.task.IdentityLink;
- import org.activiti.engine.task.Task;
- import org.junit.Test;
- public class Task3Test {
- @Test
- public void testDeploy(){
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- processEngine.getRepositoryService()
- .createDeployment()
- .addClasspathResource("com/itheima10/activiti/task/task3.bpmn")
- .deploy();
- }
- /*
- * 当启动完流程实例以后,进入了电脑维修的任务
- * <userTask id="电脑维修" name="电脑维修" activiti:candidateUsers="工程师1,工程师2,工程师3"></userTask>
- * 所以在
- * act_ru_identitylink
- * 当当前任务结束以后,任务的候选人就从这里删除了
- * act_hi_identitylink
- * 这两张表中分别对应的数据工程师1有两个
- * taskId:工程师1
- * piid:工程师1
- */
- @Test
- public void testStartPI(){
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- processEngine.getRuntimeService()
- .startProcessInstanceById("task3:1:1704");
- }
- /**
- * 根据候选人查询组任务
- */
- @Test
- public void testQueryTaskByCandidate(){
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- List<Task> tasks = processEngine.getTaskService()
- .createTaskQuery()
- .taskCandidateUser("工程师1")
- .list();
- for (Task task : tasks) {
- System.out.println(task.getName());
- }
- }
- /**
- * 根据组任务查看任务的候选人
- */
- @Test
- public void testQueryCandidateByTask(){
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- List<IdentityLink> identityLinks = processEngine.getTaskService()
- .getIdentityLinksForTask("1804");
- for (IdentityLink identityLink : identityLinks) {
- System.out.println(identityLink.getUserId());
- }
- }
- /**
- * 候选人认领任务
- */
- @Test
- public void testClaimTask(){
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- processEngine.getTaskService()
- .claim("1804","工程师1");
- }
- @Test
- public void testFinishTask(){
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- processEngine.getTaskService()
- .complete("1804");
- }
- }
使用类
流程图:
- package com.itheima10.activiti.task;
- import org.activiti.engine.delegate.DelegateTask;
- import org.activiti.engine.delegate.TaskListener;
- public class MyTask4Listener implements TaskListener{
- @Override
- public void notify(DelegateTask delegateTask) {
- // TODO Auto-generated method stub
- /**
- * 组任务的候选人应该来自于数据库的某一张表
- */
- delegateTask.addCandidateUser("张三");
- delegateTask.addCandidateUser("王五");
- /**
- * 直接把一个组赋值给一个任务的候选人
- */
- delegateTask.addCandidateGroup("2201");// 参数为groupid
- }
- }
- package com.itheima10.activiti.identity;
- import org.activiti.engine.ProcessEngine;
- import org.activiti.engine.ProcessEngines;
- import org.activiti.engine.identity.Group;
- import org.activiti.engine.identity.User;
- import org.activiti.engine.impl.persistence.entity.GroupEntity;
- import org.activiti.engine.impl.persistence.entity.UserEntity;
- import org.junit.Test;
- public class IdentityTest {
- @Test
- public void testIdentity(){
- //创建组
- Group group = new GroupEntity();
- group.setName("咨询组");
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- processEngine.getIdentityService()
- .saveGroup(group);
- //创建组员
- User user1 = new UserEntity();
- user1.setId("咨询员1");
- User user2 = new UserEntity();
- user2.setId("咨询员2");
- processEngine.getIdentityService().saveUser(user1);
- processEngine.getIdentityService().saveUser(user2);
- //建立组员与组的关系
- processEngine.getIdentityService().createMembership(user1.getId(), group.getId());
- processEngine.getIdentityService().createMembership(user2.getId(), group.getId());
- }
- @Test
- //根据组ID删除组
- public void testDeleteGroup(){
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- processEngine.getIdentityService()
- .deleteGroup("2201");
- }
- }
- package com.itheima10.activiti.task;
- import java.util.List;
- import org.activiti.engine.ProcessEngine;
- import org.activiti.engine.ProcessEngines;
- import org.activiti.engine.task.IdentityLink;
- import org.activiti.engine.task.Task;
- import org.junit.Test;
- public class Task4Test {
- @Test
- public void testDeploy(){
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- processEngine.getRepositoryService()
- .createDeployment()
- .addClasspathResource("com/itheima10/activiti/task/task4.bpmn")
- .deploy();
- }
- @Test
- public void testStartPI(){
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- processEngine.getRuntimeService()
- .startProcessInstanceById("task4:1:2004");
- }
- }
相关表:
act_id_group 组
act_id_membership 组员
连线
之前的流程图都是错的,只是为了演示如何快速使用,下面通过连线学习如何画一个正确的流程图
例子1:
- package com.itheima10.activiti.sequenceFlow;
- 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.impl.persistence.entity.ProcessDefinitionEntity;
- import org.activiti.engine.impl.pvm.PvmTransition;
- import org.activiti.engine.impl.pvm.process.ActivityImpl;
- import org.junit.Test;
- public class SequenceFlowTest {
- @Test
- public void testDeploy(){
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- processEngine.getRepositoryService()
- .createDeployment()
- .addClasspathResource("com/itheima10/activiti/sequenceFlow/sequenceflow.bpmn")
- .deploy();
- }
- @Test
- public void testStartPi(){
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- processEngine.getRuntimeService()
- .startProcessInstanceById("sequenceflow:2:3604");
- }
- /*
- * 完成请假申请的任务
- */
- @Test
- public void testFinisTask(){
- Map<String, Object> variables = new HashMap<String, Object>();
- variables.put("day", 2);
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- processEngine.getTaskService()
- .complete("3704",variables);
- }
- /**
- * 完成部门经理审批的任务
- */
- @Test
- public void testFinisTask2(){
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- processEngine.getTaskService()
- .complete("3803");//请假天数2天,直接审批通过
- }
- /**
- * 获取部门经理审批节点的出处有几个,每一个的名称
- */
- @Test
- public void testGetOutGoing(){
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- /**
- * ProcessDefinitionEntity 流程定义对象
- */
- ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity)processEngine.getRepositoryService()
- .getProcessDefinition("sequenceflow:2:3604");
- /**
- * 根据流程定义对象中的某一个节点的id的值,就可以得到该节点的ActitityImpl(节点对象)
- */
- ActivityImpl activityImpl = processDefinitionEntity.findActivity("部门经理审批");
- /**
- * 该节点对象有多少sequenceFlow
- */
- List<PvmTransition> pvmTransitions = activityImpl.getOutgoingTransitions();
- for (PvmTransition pvmTransition : pvmTransitions) {
- System.out.println(pvmTransition.getId());//输出sequenceFlow的id的值
- System.out.println(pvmTransition.getDestination());//输出sequenceFlow的目标节点
- }
- }
- }
例子2:
- package com.itheima10.activiti.sequenceFlow;
- import java.util.HashMap;
- import java.util.Map;
- import org.activiti.engine.ProcessEngine;
- import org.activiti.engine.ProcessEngines;
- import org.junit.Test;
- public class SequenceFlow2Test {
- @Test
- public void testDeploy(){
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- processEngine.getRepositoryService()
- .createDeployment()
- .addClasspathResource("com/itheima10/activiti/sequenceFlow/sequenceflow2.bpmn")
- .deploy();
- }
- @Test
- public void testStartPi(){
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- processEngine.getRuntimeService()
- .startProcessInstanceById("sequence2:1:4004");
- }
- @Test
- public void testFinishTask(){
- Person person = new Person();
- person.setDay(2);
- Map<String, Object> variables = new HashMap<String, Object>();
- variables.put("person", person);
- variables.put("day", 1);
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- processEngine.getTaskService()
- .complete("4104", variables);
- }
- }
接收活动(receiveTask,即等待活动)
不需要审批的流程,例如审批后的归档操作
例子:
- package com.itheima10.activiti.receivetask;
- import org.activiti.engine.ProcessEngine;
- import org.activiti.engine.ProcessEngines;
- import org.junit.Test;
- /**
- * receiveTask不需要人工干预,不需要审批,直接把当前的事情做完以后,流向下一个节点即可
- * @author zd
- *
- */
- public class ReceiveTaskTest {
- @Test
- public void testDeploy(){
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- processEngine.getRepositoryService()
- .createDeployment()
- .addClasspathResource("com/itheima10/activiti/receivetask/receivetask.bpmn")
- .deploy();
- }
- @Test
- /**
- * act_ru_task表中不会有新的记录,因为不需要人审批此流程
- * 在act_ru_execution表中可以看到当前流程实例
- */
- public void testStartPI(){
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- processEngine.getRuntimeService()
- .startProcessInstanceById("receive:1:4304");
- }
- @Test
- public void testNextNode(){
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- processEngine.getRuntimeService()
- /**
- * 给当前的流程实例发一个信号:往下一个节点走
- */
- .signal("4401");
- }
- }
Activiti5工作流笔记三的更多相关文章
- Activiti5工作流笔记一
介绍工作流 网上工作流的定义一大堆,这里就不去复制了,通俗的理解,工作流就是类似OA系统中请假审批.报销审批等一系列流程,下级提交的申请只有直系领导才能审批,其他人是没有权限的,而只有直系领导审批通过 ...
- Activiti5工作流笔记四
排他网关(ExclusiveGateWay) 流程图 部署流程定义+启动流程实例 查询我的个人任务 完成我的个人任务 并行网关(parallelGateWay) 流程图 部署流程定义+启动流程实例 查 ...
- Activiti5工作流笔记二
流程变量 import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import org.activiti ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...
- Mastering Web Application Development with AngularJS 读书笔记(三)
第一章笔记 (三) 一.Factories factory 方法是创建对象的另一种方式,与service相比更灵活,因为可以注册可任何任意对象创造功能.例如: myMod.factory('notif ...
- Python 学习笔记三
笔记三:函数 笔记二已取消置顶链接地址:http://www.cnblogs.com/dzzy/p/5289186.html 函数的作用: 給代码段命名,就像变量給数字命名一样 可以接收参数,像arg ...
- 《MFC游戏开发》笔记三 游戏贴图与透明特效的实现
本系列文章由七十一雾央编写,转载请注明出处. 313239 作者:七十一雾央 新浪微博:http://weibo.com/1689160943/profile?rightmod=1&wvr=5 ...
- [Firefly引擎][学习笔记三][已完结]所需模块封装
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
随机推荐
- [Jmeter]用Jmeter做压力测试(分布式)
Jmeter 是Java应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误.为了让jmeter工具提 ...
- ORB-SLAM跑通笔记本摄像头
环境:Ubuntu 14.04 + ROS indigo + ORB-SLAM2 (Thinkpad T460s) 1. 安装ORB-SLAM: Pangolin Pangolin有一些依赖库,按照提 ...
- iOS 测试工具reveal可视化调试工具的使用
简单翻译一下reveal可视化图形工具插入项目的官方文档(官方英文版file:///Applications/Reveal.app/Contents/SharedSupport/Documentati ...
- jieba结巴分词
pip install jieba安装jieba模块 如果网速比较慢,可以使用豆瓣的Python源:pip install -i https://pypi.douban.com/simple/ jie ...
- 博客更换至 www.zhaoch.top
博客更换至 www.zhaoch.top 随手拷了一些链接 http://www.zhaoch.top/操作系统/linux/常用命令备忘.html http://www.zhaoch.top/操作系 ...
- 【Python 开发】第二篇 :Python安装
一.python3.x安装 1)由于centos7原本就安装了Python2,而且这个Python2不能被删除,因为有很多系统命令,比如yum都要用到. 官网:https://www.python.o ...
- [c++] Getting Started - CMake
CMake is an open-source cross platform build system, according to CMake's creator, Kitware. But CMak ...
- logstash+elasticsearch 错误摘记
[2017-09-17T06:00:22,511][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception ...
- 最短路径——floyd(多源最短路径)
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> ...
- Internet Secure
key Secret key(密钥):ues the same key to Encryption and decryption(symmetric-key)对称加密,需要绝对安全的空间来传递key ...