跳至主要內容

Flowable-9.节点系列

holic-x...大约 3 分钟框架BPMFlowable

Flowable框架学习笔记-09-节点系列

节点说明

image-20200617161231528

image-20200617161349142

image-20200617161711137

接收任务节点

流程定义

image-20200617163143412

image-20200617163052107

image-20200617164329729

节点测试

启动实例:
    ACT_RU_EXECUTION:新增两条记录(流程实例、执行实例)
	ACT_RU_TASK:无数据
@RequestMapping("/startFlow")
public AjaxResult startFlow() {
	// 启动任务实例,并存储临时变量
	ProcessInstance processInstance = runtimeService
			.startProcessInstanceByKey("receiveTask");
	return AjaxResultUtil.success("流程启动成功:" 
		+ processInstance.getProcessInstanceId());
}
根据活动id查询执行实例:启动activityId为第一条receiveTask分支id
<startEvent id="startEvent1" name="开始" flowable:formFieldValidation="true"></startEvent>
<receiveTask id="sid-745D35A2-68E5-4890-A7A5-714AE19BAE8D" name="获取当日销售额"></receiveTask>
.......
### 其他节点定义 ###
SELECT DISTINCT
	RES.*,
	P .KEY_ AS ProcessDefinitionKey,
	P .ID_ AS ProcessDefinitionId
FROM
	ACT_RU_EXECUTION RES
INNER JOIN ACT_RE_PROCDEF P ON RES.PROC_DEF_ID_ = P .ID_
ORDER BY
	RES.ID_ ASC
/**
 * 根据活动id(activityId)获取相应的执行实例
 */
@RequestMapping("/getExecution")
public void getExecution(String activityId) {
	Execution execution = runtimeService.createExecutionQuery()
        .activityId(activityId).singleResult();
    System.out.println(execution);
}

接收任务实例不会出现在ACT_RU_TASK表中,观察执行实例表数据变化情况

完成接收任务:触发需要的参数是执行实例的ID而不是流程实例的ID
/** 触发执行实例继续往下运转 **/
@RequestMapping("/trigger")
public void trigger(String executionId) {
	runtimeService.trigger(executionId);
}

如果传入‘流程实例ID’则报错,参考信息如下

image-20200617165924269

如果传入'执行实例ID',流程正常触发,观察相应实例状态变更,可以观察相应执行实例的ACT_ID_

此时再次通过第1个receiveTask的id查找相应的流程实例发现数据不存在,是因为该执行实例已完成触发进入到下一个流程;通过第2个receiveTask的id查找则存在数据。以此类推,再次触发则整个流程结束,流程实例和执行实例也被清理掉,从历史记录相关表中能查看相应的记录

用户任务

image-20200617170955104

个人任务:确切指定了办理者的任务,这个任务将成为指定者的私有任务(个人任务)

组任务:无法指定具体的某一人来办理的任务,可以将任务分配给几个人或者一到多个小组,这个范围内的用户可以选择性办理这类任务(组任务)

【1】TaskService任务服务类

【2】个人任务

普通方式实现

任务定义

直接指定assignee属性对应为指定节点处理人

image-20200617171723226

部署流程、启动任务

@RequestMapping("/startFlow")
public AjaxResult startFlow() {
	ProcessInstance processInstance = 
			runtimeService.startProcessInstanceByKey("singleTask");
	return AjaxResultUtil.success("流程启动成功:" 
		+ processInstance.getProcessInstanceId());
}

查询个人任务:查询指定userId对应的待办任务

@RequestMapping("/getTask")
public void getTask(String userId,String defKey) {
	List<Task> list = taskService.createTaskQuery()
                .taskAssignee(userId)
                .processDefinitionKey(defKey)
                .list();
	for(Task t : list){
		System.out.println(t.getId()+"   "+t.getName()+"   "+t.getTaskDefinitionKey());
	}
}

完成任务:

@RequestMapping("/completeTask")
public void completeTask(String taskId) {
	taskService.complete(taskId);
}

使用流程变量分配处理人

流程定义

${userId}、#

在任务节点中指定处理人,选择为固定值,随后指定分配对象(动态变量)

image-20200617175758273

对比普通方式的流程定义

image-20200617180051003

流程变量方式指定处理人的流程定义

image-20200617180149790

部署流程、启动流程

@RequestMapping("/startFlow")
public AjaxResult startFlow() {
	// 启动任务实例,并存储临时变量
	Map<String,Object> map = new HashMap<>();
	map.put("userId","common_user");
	ProcessInstance processInstance = runtimeService
			.startProcessInstanceByKey("singleTask",map);
	return AjaxResultUtil.success("流程启动成功:" + processInstance.getProcessInstanceId());
    }

image-20200618141031406

使用类分配处理人

流程定义

清理指定分配处理人,创建TaskListener(任务监听器)

image-20200618142243730

<startEvent id="startevent1" name="Start"></startEvent>
<userTask id="usertask1" name="User Task">
	<extensionElements>
	<activiti:taskListener event="create" 
                           class="com.activiti.study.personalTask.TaskListenerImpl">	
    </activiti:taskListener>
	</extensionElements>
package com.activiti.study.personalTask; 
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
public class TaskListenerImpl implements TaskListener {	
	private static final long serialVersionUID = 1331752911978130983L; 
	@Override
	public void notify(DelegateTask delegateTask) {
		delegateTask.setAssignee("David");
	}
 
}

部署流程、启动流程

@Test
public void testStartProcessDefination(){
	String processDefinationKey = "personalTask3";
	ProcessInstance pi = processEngine.getRuntimeService()
		.startProcessInstanceByKey(processDefinationKey);
	System.out.println("Key--->>>" + pi.getBusinessKey());
	System.out.println("ActivityId--->>>" + pi.getActivityId());
	System.out.println("DefinitionId--->>>" + pi.getProcessDefinitionId());
	System.out.println("ProcessInstanceId--->>>" + pi.getProcessInstanceId());	
}

【3】组任务

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3