提交 74e335ea 编写于 作者: J Joram Barrez

Merge branch 'master' of github.com:Activiti/Activiti

......@@ -36,4 +36,9 @@ public interface HistoricVariableInstance {
/** The process instance reference. */
String getProcessInstanceId();
/**
* @return the task id of the task, in case this variable instance has been set locally
* on a task. Returns null, if this variable is not related to a task.
*/
String getTaskId();
}
......@@ -25,12 +25,18 @@ public interface HistoricVariableInstanceQuery extends Query<HistoricVariableIns
/** Only select historic process variables with the given process instance. */
HistoricVariableInstanceQuery processInstanceId(String processInstanceId);
/** Only select historic process variables with the given task. */
HistoricVariableInstanceQuery taskId(String taskId);
/** Only select historic process variables with the given variable name. */
HistoricVariableInstanceQuery variableName(String variableName);
/** Only select historic process variables where the given variable name is like. */
HistoricVariableInstanceQuery variableNameLike(String variableNameLike);
/** Only select historic process variables which were not set task-local. */
HistoricVariableInstanceQuery excludeTaskVariables();
/**
* only select historic process variables with the given name and value
......@@ -40,4 +46,5 @@ public interface HistoricVariableInstanceQuery extends Query<HistoricVariableIns
HistoricVariableInstanceQuery orderByProcessInstanceId();
HistoricVariableInstanceQuery orderByVariableName();
}
......@@ -16,13 +16,11 @@ package org.activiti.engine.impl;
import java.util.List;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.history.HistoricDetail;
import org.activiti.engine.history.HistoricVariableInstance;
import org.activiti.engine.history.HistoricVariableInstanceQuery;
import org.activiti.engine.impl.context.Context;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.interceptor.CommandExecutor;
import org.activiti.engine.impl.persistence.entity.HistoricDetailVariableInstanceUpdateEntity;
import org.activiti.engine.impl.persistence.entity.HistoricVariableInstanceEntity;
import org.activiti.engine.impl.variable.VariableTypes;
......@@ -69,9 +67,21 @@ public class HistoricVariableInstanceQueryImpl extends AbstractQuery<HistoricVar
if (taskId == null) {
throw new ActivitiException("taskId is null");
}
if(excludeTaskRelated) {
throw new ActivitiException("Cannot use taskId together with excludeTaskVariables");
}
this.taskId = taskId;
return this;
}
@Override
public HistoricVariableInstanceQuery excludeTaskVariables() {
if(taskId != null) {
throw new ActivitiException("Cannot use taskId together with excludeTaskVariables");
}
excludeTaskRelated = true;
return this;
}
public HistoricVariableInstanceQuery variableName(String variableName) {
if (variableName == null) {
......@@ -101,11 +111,6 @@ public class HistoricVariableInstanceQueryImpl extends AbstractQuery<HistoricVar
return this;
}
public HistoricVariableInstanceQuery excludeTaskDetails() {
this.excludeTaskRelated = true;
return this;
}
protected void ensureVariablesInitialized() {
if (this.queryVariableValue != null) {
VariableTypes variableTypes = Context.getProcessEngineConfiguration().getVariableTypes();
......
......@@ -96,7 +96,10 @@
RES.PROC_INST_ID_ = #{processInstanceId}
</if>
<if test="taskId != null">
RES.TASK_ID_ = #{taskId}
and RES.TASK_ID_ = #{taskId}
</if>
<if test="excludeTaskRelated">
and RES.TASK_ID_ is NULL
</if>
<if test="variableName != null">
and RES.NAME_ = #{variableName}
......
......@@ -202,6 +202,58 @@ public class FullHistoryTest extends ResourceActivitiTestCase {
assertEquals(123456789L, historicVariable.getValue());
}
@Deployment(resources={"org/activiti/engine/test/history/oneTaskProcess.bpmn20.xml"})
public void testHistoricVariableInstanceQueryTaskVariables() {
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("variable", "setFromProcess");
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess", variables);
assertEquals(1, historyService.createHistoricVariableInstanceQuery().count());
Task activeTask = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
assertNotNull(activeTask);
taskService.setVariableLocal(activeTask.getId(), "variable", "setFromTask");
// Check if additional variable is available in history, task-local
assertEquals(2, historyService.createHistoricVariableInstanceQuery().count());
assertEquals(1, historyService.createHistoricVariableInstanceQuery().taskId(activeTask.getId()).count());
assertEquals("setFromTask", historyService.createHistoricVariableInstanceQuery().taskId(activeTask.getId()).singleResult().getValue());
assertEquals(activeTask.getId(), historyService.createHistoricVariableInstanceQuery().taskId(activeTask.getId()).singleResult().getTaskId());
assertEquals(1, historyService.createHistoricVariableInstanceQuery().excludeTaskVariables().count());
// Test null task-id
try
{
historyService.createHistoricVariableInstanceQuery().taskId(null).singleResult();
fail("Exception expected");
}
catch(ActivitiException ae)
{
assertEquals("taskId is null", ae.getMessage());
}
// Test invalid usage of taskId together with excludeTaskVariables
try
{
historyService.createHistoricVariableInstanceQuery().taskId("123").excludeTaskVariables().singleResult();
fail("Exception expected");
}
catch(ActivitiException ae)
{
assertEquals("Cannot use taskId together with excludeTaskVariables", ae.getMessage());
}
try
{
historyService.createHistoricVariableInstanceQuery().excludeTaskVariables().taskId("123").singleResult();
fail("Exception expected");
}
catch(ActivitiException ae)
{
assertEquals("Cannot use taskId together with excludeTaskVariables", ae.getMessage());
}
}
@Deployment(resources="org/activiti/standalone/history/FullHistoryTest.testVariableUpdates.bpmn20.xml")
public void testHistoricVariableInstanceQuery() {
Map<String, Object> variables = new HashMap<String, Object>();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册