一、个人任务
1、流程图
2、分配个人任务方式一(直接指定办理人)
缺点 办理人固定了,但是实际开发中,办理人是不固定的
3、分配个人任务方式二(使用流程变量)
(1)部署
@Test
public void deployProcess() {
//得到流程部署的service
RepositoryService repositoryService = this.processEngine.getRepositoryService();
Deployment deploy = repositoryService.createDeployment().name("请假流程001")
.addClasspathResource("HelloWorld.bpmn.xml")
.addClasspathResource("HelloWorld.png")
.deploy();
System.out.println("部署成功:流程部署ID:"+deploy.getId());
}
(2)启动并指定下一个任务的办理人
/**
* 启动流程并指定下一个任务的办理人
*/
@Test
public void startProcess() {
RuntimeService runtimeService = this.processEngine.getRuntimeService();
String processDefinitionKey="HelloWorld";
Map<String,Object> variables=new HashMap<>();
variables.put("username", "张三");
runtimeService.startProcessInstanceByKey(processDefinitionKey,variables);
System.out.println("流程启动成功");
}
(3)查询个人任务
/**
* 查询任务
*/
@Test
public void findTask() {
TaskService taskService = this.processEngine.getTaskService();
String assignee="李四";
List<Task> list = taskService.createTaskQuery().taskAssignee(assignee).list();
if(null!=list&&list.size()>0) {
for (Task task : list) {
System.out.println("任务ID:"+task.getId());
System.out.println("流程实例ID:"+task.getProcessInstanceId());
System.out.println("执行实例ID:"+task.getExecutionId());
System.out.println("流程定义ID:"+task.getProcessDefinitionId());
System.out.println("任务名称:"+task.getName());
System.out.println("任务办理人:"+task.getAssignee());
System.out.println("################################");
}
}
}
(4)完成事务并指定下一个任务的办理人
/**
* 办理任务
*/
@Test
public void completeTask() {
TaskService taskService = this.processEngine.getTaskService();
String taskId="12505";
Map<String,Object> variables=new HashMap<>();
variables.put("username", "李四");
taskService.complete(taskId,variables);
System.out.println("任务完成");
}
4、分配个人任务方式三(使用类)
(1)创建一个监听类
作用:当任务到达相应的节点时,会触发监听,让监听器去指定下个任务的办理人
(2)修改流程图
5、小结
个人任务及三种分配方式:
1,在taskProcess.bpmn中直接写 assignee=“张三丰"
2,在taskProcess.bpmn中写 assignee=“#{userID}”,变量的值要是String的。
使用流程变量指定办理人
3,使用TaskListener接口,要使类实现该接口,在类中定义,
delegateTask.setAssignee(assignee);指定个人任务的办理人
二、用户组任务
1、流程图
2、分配组任务方式一(直接指定办理人)
(1)修改流程图
(2)部署
@Test
public void deployProcess() {
// 得到流程部署的service
RepositoryService repositoryService = this.processEngine.getRepositoryService();
Deployment deploy = repositoryService.createDeployment().name("请假流程001").addClasspathResource("HelloWorld.bpmn.xml")
.deploy();
System.out.println("部署成功:流程部署ID:" + deploy.getId());
}
(3)相关代码
/**
* 组任务使用流程变量去设置
*/
public class GroupTask01 {
// 得到流程引擎
private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
@Test
public void deployProcess() {
// 得到流程部署的service
RepositoryService repositoryService = this.processEngine.getRepositoryService();
Deployment deploy = repositoryService.createDeployment().name("请假流程001").addClasspathResource("HelloWorld.bpmn")
.addClasspathResource("HelloWorld.png").deploy();
System.out.println("部署成功:流程部署ID:" + deploy.getId());
}
/**
* 启动流程
*/
@Test
public void startProcess() {
RuntimeService runtimeService = this.processEngine.getRuntimeService();
String processDefinitionKey = "HelloWorld";
runtimeService.startProcessInstanceByKey(processDefinitionKey);
System.out.println("流程启动成功");
}
/**
* 查询组任务
*/
@Test
public void findGroupTask() {
TaskService taskService = this.processEngine.getTaskService();
String candidateUser = "小B";
List<Task> list = taskService.createTaskQuery().taskCandidateUser(candidateUser).list();
if (null != list && list.size() > 0) {
for (Task task : list) {
System.out.println("任务ID:" + task.getId());
System.out.println("流程实例ID:" + task.getProcessInstanceId());
System.out.println("执行实例ID:" + task.getExecutionId());
System.out.println("流程定义ID:" + task.getProcessDefinitionId());
System.out.println("任务名称:" + task.getName());
System.out.println("任务办理人:" + task.getAssignee());
System.out.println("################################");
}
}
}
/**
* 查询任务
*/
@Test
public void findTask() {
TaskService taskService = this.processEngine.getTaskService();
String assignee = "小A";
List<Task> list = taskService.createTaskQuery().taskAssignee(assignee).list();
if (null != list && list.size() > 0) {
for (Task task : list) {
System.out.println("任务ID:" + task.getId());
System.out.println("流程实例ID:" + task.getProcessInstanceId());
System.out.println("执行实例ID:" + task.getExecutionId());
System.out.println("流程定义ID:" + task.getProcessDefinitionId());
System.out.println("任务名称:" + task.getName());
System.out.println("任务办理人:" + task.getAssignee());
System.out.println("################################");
}
}
}
/**
* 任务拾取
*/
@Test
public void claim() {
String taskId="2504";
TaskService taskService = this.processEngine.getTaskService();
taskService.claim(taskId, "小A");
System.out.println("任务拾取成功");
}
/**
* 任务回退
*/
@Test
public void claimBack() {
String taskId="2504";
TaskService taskService = this.processEngine.getTaskService();
taskService.setAssignee(taskId, null);
System.out.println("任务回退成功");
}
//5 查询组任务成员列表
@Test
public void findGroupUser(){
String taskId = "2504";
List<IdentityLink> list = processEngine.getTaskService()//
.getIdentityLinksForTask(taskId);
//List<IdentityLink> list = processEngine.getRuntimeService()//
// .getIdentityLinksForProcessInstance(instanceId);
for(IdentityLink identityLink:list ){
System.out.println("userId="+identityLink.getUserId());
System.out.println("taskId="+identityLink.getTaskId());
System.out.println("piId="+identityLink.getProcessInstanceId());
System.out.println("TYPE="+identityLink.getType());
System.out.println("######################");
}
}
/**
* 办理任务
*/
@Test
public void completeTask() {
TaskService taskService = this.processEngine.getTaskService();
String taskId = "5002";
taskService.complete(taskId);
System.out.println("任务完成");
}
}
3、分配组任务方式二(使用流程变量)
(1)修改流程图
(2)相关代码
/**
* 组任务使用流程变量去设置
*/
public class GroupTask01 {
// 得到流程引擎
private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
@Test
public void deployProcess() {
// 得到流程部署的service
RepositoryService repositoryService = this.processEngine.getRepositoryService();
Deployment deploy = repositoryService.createDeployment().name("请假流程001").addClasspathResource("HelloWorld.bpmn")
.addClasspathResource("HelloWorld.png").deploy();
System.out.println("部署成功:流程部署ID:" + deploy.getId());
}
/**
* 启动流程
*/
@Test
public void startProcess() {
RuntimeService runtimeService = this.processEngine.getRuntimeService();
String processDefinitionKey = "HelloWorld";
Map<String,Object> variables=new HashMap<>();
variables.put("usernames", "小A,小B,小C,小D");
runtimeService.startProcessInstanceByKey(processDefinitionKey,variables);
System.out.println("流程启动成功");
}
/**
* 查询组任务
*/
@Test
public void findGroupTask() {
TaskService taskService = this.processEngine.getTaskService();
String candidateUser = "小B";
List<Task> list = taskService.createTaskQuery().taskCandidateUser(candidateUser).list();
if (null != list && list.size() > 0) {
for (Task task : list) {
System.out.println("任务ID:" + task.getId());
System.out.println("流程实例ID:" + task.getProcessInstanceId());
System.out.println("执行实例ID:" + task.getExecutionId());
System.out.println("流程定义ID:" + task.getProcessDefinitionId());
System.out.println("任务名称:" + task.getName());
System.out.println("任务办理人:" + task.getAssignee());
System.out.println("################################");
}
}
}
/**
* 查询任务
*/
@Test
public void findTask() {
TaskService taskService = this.processEngine.getTaskService();
String assignee = "小A";
List<Task> list = taskService.createTaskQuery().taskAssignee(assignee).list();
if (null != list && list.size() > 0) {
for (Task task : list) {
System.out.println("任务ID:" + task.getId());
System.out.println("流程实例ID:" + task.getProcessInstanceId());
System.out.println("执行实例ID:" + task.getExecutionId());
System.out.println("流程定义ID:" + task.getProcessDefinitionId());
System.out.println("任务名称:" + task.getName());
System.out.println("任务办理人:" + task.getAssignee());
System.out.println("################################");
}
}
}
/**
* 任务拾取
*/
@Test
public void claim() {
String taskId="2505";
TaskService taskService = this.processEngine.getTaskService();
taskService.claim(taskId, "小A");
System.out.println("任务拾取成功");
}
/**
* 任务回退
*/
@Test
public void claimBack() {
String taskId="2504";
TaskService taskService = this.processEngine.getTaskService();
taskService.setAssignee(taskId, null);
System.out.println("任务回退成功");
}
//5 查询组任务成员列表
@Test
public void findGroupUser(){
String taskId = "2504";
List<IdentityLink> list = processEngine.getTaskService()//
.getIdentityLinksForTask(taskId);
//List<IdentityLink> list = processEngine.getRuntimeService()//
// .getIdentityLinksForProcessInstance(instanceId);
for(IdentityLink identityLink:list ){
System.out.println("userId="+identityLink.getUserId());
System.out.println("taskId="+identityLink.getTaskId());
System.out.println("piId="+identityLink.getProcessInstanceId());
System.out.println("TYPE="+identityLink.getType());
System.out.println("######################");
}
}
/**
* 办理任务
*/
@Test
public void completeTask() {
TaskService taskService = this.processEngine.getTaskService();
String taskId = "5002";
taskService.complete(taskId);
System.out.println("任务完成");
}
}
4、分配组任务方式三(使用类)
(1)创建监听器
(2)修改流程图
(3)相关代码
/**
* 组任务使用监听器去设置
*
* @author LJH
*
*/
public class GroupTask01 {
// 得到流程引擎
private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
@Test
public void deployProcess() {
// 得到流程部署的service
RepositoryService repositoryService = this.processEngine.getRepositoryService();
Deployment deploy = repositoryService.createDeployment().name("请假流程001").addClasspathResource("HelloWorld.bpmn")
.addClasspathResource("HelloWorld.png").deploy();
System.out.println("部署成功:流程部署ID:" + deploy.getId());
}
/**
* 启动流程
*/
@Test
public void startProcess() {
RuntimeService runtimeService = this.processEngine.getRuntimeService();
String processDefinitionKey = "HelloWorld";
runtimeService.startProcessInstanceByKey(processDefinitionKey);
System.out.println("流程启动成功");
}
/**
* 查询组任务
*/
@Test
public void findGroupTask() {
TaskService taskService = this.processEngine.getTaskService();
String candidateUser = "小B";
List<Task> list = taskService.createTaskQuery().taskCandidateUser(candidateUser).list();
if (null != list && list.size() > 0) {
for (Task task : list) {
System.out.println("任务ID:" + task.getId());
System.out.println("流程实例ID:" + task.getProcessInstanceId());
System.out.println("执行实例ID:" + task.getExecutionId());
System.out.println("流程定义ID:" + task.getProcessDefinitionId());
System.out.println("任务名称:" + task.getName());
System.out.println("任务办理人:" + task.getAssignee());
System.out.println("################################");
}
}
}
/**
* 查询任务
*/
@Test
public void findTask() {
TaskService taskService = this.processEngine.getTaskService();
String assignee = "小A";
List<Task> list = taskService.createTaskQuery().taskAssignee(assignee).list();
if (null != list && list.size() > 0) {
for (Task task : list) {
System.out.println("任务ID:" + task.getId());
System.out.println("流程实例ID:" + task.getProcessInstanceId());
System.out.println("执行实例ID:" + task.getExecutionId());
System.out.println("流程定义ID:" + task.getProcessDefinitionId());
System.out.println("任务名称:" + task.getName());
System.out.println("任务办理人:" + task.getAssignee());
System.out.println("################################");
}
}
}
/**
* 任务拾取
*/
@Test
public void claim() {
String taskId="2505";
TaskService taskService = this.processEngine.getTaskService();
taskService.claim(taskId, "小A");
System.out.println("任务拾取成功");
}
/**
* 任务回退
*/
@Test
public void claimBack() {
String taskId="2504";
TaskService taskService = this.processEngine.getTaskService();
taskService.setAssignee(taskId, null);
System.out.println("任务回退成功");
}
//5 查询组任务成员列表
@Test
public void findGroupUser(){
String taskId = "2504";
List<IdentityLink> list = processEngine.getTaskService()//
.getIdentityLinksForTask(taskId);
//List<IdentityLink> list = processEngine.getRuntimeService()//
// .getIdentityLinksForProcessInstance(instanceId);
for(IdentityLink identityLink:list ){
System.out.println("userId="+identityLink.getUserId());
System.out.println("taskId="+identityLink.getTaskId());
System.out.println("piId="+identityLink.getProcessInstanceId());
System.out.println("TYPE="+identityLink.getType());
System.out.println("######################");
}
}
/**
* 办理任务
*/
@Test
public void completeTask() {
TaskService taskService = this.processEngine.getTaskService();
String taskId = "5002";
taskService.complete(taskId);
System.out.println("任务完成");
}
}