Skip to content

Commit

Permalink
Fix for deleting sub tasks for historic tasks
Browse files Browse the repository at this point in the history
  • Loading branch information
tijsrademakers committed Nov 13, 2015
1 parent 303ec8a commit bce26a7
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -101,12 +101,22 @@ public HistoricTaskInstanceEntity findHistoricTaskInstanceById(String taskId) {
return null;
}

@SuppressWarnings("unchecked")
public List<HistoricTaskInstance> findHistoricTasksByParentTaskId(String parentTaskId) {
return getDbSqlSession().selectList("selectHistoricTasksByParentTaskId", parentTaskId);
}

public void deleteHistoricTaskInstanceById(String taskId) {
if (getHistoryManager().isHistoryEnabled()) {
HistoricTaskInstanceEntity historicTaskInstance = findHistoricTaskInstanceById(taskId);
if(historicTaskInstance!=null) {
if (historicTaskInstance != null) {
CommandContext commandContext = Context.getCommandContext();

List<HistoricTaskInstance> subTasks = findHistoricTasksByParentTaskId(taskId);
for (HistoricTaskInstance subTask: subTasks) {
deleteHistoricTaskInstanceById(subTask.getId());
}

commandContext
.getHistoricDetailEntityManager()
.deleteHistoricDetailsByTaskId(taskId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,10 @@
select * from ${prefix}ACT_HI_TASKINST where ID_ = #{historicTaskInstanceId, jdbcType=VARCHAR}
</select>

<select id="selectHistoricTasksByParentTaskId" parameterType="org.activiti.engine.impl.db.ListQueryParameterObject" resultMap="historicTaskInstanceResultMap">
select * from ${prefix}ACT_HI_TASKINST where PARENT_TASK_ID_ = #{parameter}
</select>

<select id="selectHistoricTaskInstanceIdsByProcessInstanceId" resultType="string" parameterType="org.activiti.engine.impl.db.ListQueryParameterObject" >
select ID_
from ${prefix}ACT_HI_TASKINST
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.impl.history.HistoryLevel;
import org.activiti.engine.impl.test.PluggableActivitiTestCase;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;


Expand Down Expand Up @@ -80,4 +82,44 @@ public void testSubTask() {

taskService.deleteTask(gonzoTaskId, true);
}

public void testSubTaskDeleteOnProcessInstanceDelete() {
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("org/activiti/engine/test/api/runtime/oneTaskProcess.bpmn20.xml")
.deploy();

ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
taskService.setAssignee(task.getId(), "test");

Task subTask1 = taskService.newTask();
subTask1.setName("Sub task 1");
subTask1.setParentTaskId(task.getId());
subTask1.setAssignee("test");
taskService.saveTask(subTask1);

Task subTask2 = taskService.newTask();
subTask2.setName("Sub task 2");
subTask2.setParentTaskId(task.getId());
subTask2.setAssignee("test");
taskService.saveTask(subTask2);

List<Task> tasks = taskService.createTaskQuery().taskAssignee("test").list();
assertEquals(3, tasks.size());

runtimeService.deleteProcessInstance(processInstance.getId(), "none");

tasks = taskService.createTaskQuery().taskAssignee("test").list();
assertEquals(0, tasks.size());

List<HistoricTaskInstance> historicTasks = historyService.createHistoricTaskInstanceQuery().taskAssignee("test").list();
assertEquals(3, historicTasks.size());

historyService.deleteHistoricProcessInstance(processInstance.getId());

historicTasks = historyService.createHistoricTaskInstanceQuery().taskAssignee("test").list();
assertEquals(0, historicTasks.size());

repositoryService.deleteDeployment(deployment.getId(), true);
}
}

0 comments on commit bce26a7

Please sign in to comment.