Activiti5 的变量信息加入taskId

Activiti5 流程变量设置

 

//变量和整个流程关联,不能先重复参数,从表ACT_RU_VARIABLE和ACT_HI_VRINST查看
this.taskService.setVariable(taskId,variables)
//变量和流程的任务节点关联,从表ACT_HI_VRINST查看           
this.taskService.setVariableLocal(taskId,variables)

 

 

 

参考:http://tylanbin.tk/record/201402

 

使用Activiti的人应该都会发现 一个问题,就是在高度自由的变量存储方式中,不做特殊操作时,所有的变量都会只跟流程实例(历史)进行关联,但act_ru_variable和 act_hi_varinst是有TASK_ID_这么一列的,利用它,将存储的变量和流程的任务节点关联,会大大方便我们对流程的扩展(比如一些自定义 的业务数据),这里记录一下笔者研究的过程及使用方法。

首先,我们常用的任务完成方式无外乎以下两种:
1、使用FormService中的submitTaskFormData(String taskId, Map properties)方法

Map map = new HashMap();
// 填表
for (FormProperty formProperty : taskFormData.getFormProperties()) {
	if (formProperty.isWritable()) {
		String name = formProperty.getId();
		map.put(name, request.getParameter(name));
	}
}
// 自定义值存储测试
map.put("test", "testVal");
// 提交用户定义的表单,同时也会完成该任务
formService.submitTaskFormData(taskId, map);

 这样在表单提交后(变量存储),该任务也随之完成。

2、使用TaskService中的complete(String taskId, Map variables)方法

Map map = new HashMap();
// 填表
for (FormProperty formProperty : taskFormData.getFormProperties()) {
	if (formProperty.isWritable()) {
		String name = formProperty.getId();
		map.put(name, request.getParameter(name));
	}
}
// 自定义值存储测试
map.put("test", "testVal");
// 完成该任务
taskService.complete(taskId, map);

 这样是另一种完成任务的方式。
但是,我们可以查看数据库,无论是第一种还是第二种,act_ru_variable(act_hi_varinst)表的TASK_ID_字段全部为空,这样是无法将test的值与当前任务关联起来的,test的值仍然属于这个流程。
通过阅读API和测试,我们在第二种方式complete之前,调用setVariableLocal或setVariablesLocal即可达到目的。

// 存储特殊的与任务关联的变量值
taskService.setVariableLocal(taskId, "test", "testVal");
taskService.complete(taskId, map);

 这样的话,我们在流程完成之后,通过使用org.activiti.engine.history中的HistoricVariableInstanceQuery即可完成对某个流程,某个任务的特殊变量的查询操作,以完成一些自定义的特殊业务。

// 测试查询
List listOfTask = historyService.createHistoricTaskInstanceQuery().processDefinitionKey(key).list();
List listOfVar = null;

for (HistoricTaskInstance hti : listOfTask) {
	System.out.println(hti.getName() + "-" + hti.getId());
	listOfVar = historyService.createHistoricVariableInstanceQuery().taskId(hti.getId()).list();
	for (HistoricVariableInstance hvi : listOfVar) {
		System.out.println("\t" + hvi.getId() + "-" + hvi.getVariableName() + "-" + hvi.getValue());
	}
}

 

你可能感兴趣的:(activiti5)