组任务

直接指定办理人

流程图如下:

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工作流笔记三的更多相关文章

  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. ogg的安装配置 配置双向同步(含DDL)

    第一部分 先配置单向同步(含DDL) 一 源端安装GoldenGate 创建用户 创建目录 mkdir -p /opt/ogg chmod -R 777 /opt/ogg chown -R oracl ...

  2. explain获得使用的key的数据

    bool Explain_join::explain_key_and_len() { if (tab->ref.key_parts) return explain_key_and_len_ind ...

  3. jmeter开发自己的sampler插件

    1. 新建maven工程 2.pom文件引入jmeter的核心包 <project xmlns="http://maven.apache.org/POM/4.0.0" xml ...

  4. JSON.parse() 与 eval()

    JSON(JavaScript Object Notation)是一种轻量级的数据格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是Javascript原生格式,这意味着在ja ...

  5. CSP201709-1:打酱油

    引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...

  6. 从零开始的Python学习Episode 2——运算符与while循环

    一.算术运算符 加法:+,减法:-,乘法*,除法/,整除(地板除)//,取余%,乘方**.  二.逻辑运算符 且:and,或:or,非:not 优先级:not>and>or 短路原则: 对 ...

  7. Ubuntu—安装网络调试工具

    https://pan.baidu.com/s/1G6oHXp3SvcN6HMAMqTdqhA 1,在ubuntu的终端下,切换到网络调试工具所在的目录 $ cd 桌面/    #我的放在桌面上 2, ...

  8. ThinkPHP - 4 - 学习笔记(2015.4.12)

    ThinkPHP D方法 D方法用于实例化自定义模型类,是ThinkPHP框架对Model类实例化的一种封装,并实现了单例模式,支持跨项目和分组调用,调用格式如下:D('[项目://][分组/]模型' ...

  9. codeforces 319B Psychos in a Line(模拟)

    There are n psychos standing in a line. Each psycho is assigned a unique integer from 1 to n. At eac ...

  10. c# 两个软件传参

    1.socket 传参,类似于小型的服务器和客户端,一端发送,另一端保持监听状态. 2.通过第三方  数据库或者文件.