From b32e9ed83eba68ff4ba7a61a7296ea60306b17e4 Mon Sep 17 00:00:00 2001 From: Joram Barrez Date: Wed, 11 Oct 2017 22:24:55 +0200 Subject: [PATCH] Fix callback id/type not propagated to historic process instance when using cmmn process task --- .../engine/PlanItemInstanceCallbackType.java | 2 +- .../flowable/cmmn/test/ProcessTaskTest.java | 18 ++++++++++++++++++ .../HistoricProcessInstanceEntityImpl.java | 2 ++ .../impl/util/ProcessInstanceHelper.java | 17 +++++++++-------- .../mapping/entity/HistoricProcessInstance.xml | 10 +++++++--- 5 files changed, 37 insertions(+), 12 deletions(-) diff --git a/modules/flowable-cmmn-api/src/main/java/org/flowable/cmmn/engine/PlanItemInstanceCallbackType.java b/modules/flowable-cmmn-api/src/main/java/org/flowable/cmmn/engine/PlanItemInstanceCallbackType.java index 7654f5f989..84d125469e 100644 --- a/modules/flowable-cmmn-api/src/main/java/org/flowable/cmmn/engine/PlanItemInstanceCallbackType.java +++ b/modules/flowable-cmmn-api/src/main/java/org/flowable/cmmn/engine/PlanItemInstanceCallbackType.java @@ -17,7 +17,7 @@ package org.flowable.cmmn.engine; */ public interface PlanItemInstanceCallbackType { - String CHILD_CASE = "cmmn-1.1-child-case"; + String CHILD_CASE = "cmmn-1.1-to-cmmn-1.1-child-case"; String CHILD_PROCESS = "cmmn-1.1-to-bpmn-2.0-child-process"; diff --git a/modules/flowable-cmmn-engine-configurator/src/test/java/org/flowable/cmmn/test/ProcessTaskTest.java b/modules/flowable-cmmn-engine-configurator/src/test/java/org/flowable/cmmn/test/ProcessTaskTest.java index b9ae53d7f6..c00afa40bd 100644 --- a/modules/flowable-cmmn-engine-configurator/src/test/java/org/flowable/cmmn/test/ProcessTaskTest.java +++ b/modules/flowable-cmmn-engine-configurator/src/test/java/org/flowable/cmmn/test/ProcessTaskTest.java @@ -20,11 +20,15 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.flowable.cmmn.engine.PlanItemInstanceCallbackType; import org.flowable.cmmn.engine.history.HistoricMilestoneInstance; import org.flowable.cmmn.engine.runtime.CaseInstance; import org.flowable.cmmn.engine.runtime.PlanItemInstance; import org.flowable.cmmn.engine.runtime.PlanItemInstanceState; import org.flowable.cmmn.engine.test.CmmnDeployment; +import org.flowable.engine.common.impl.history.HistoryLevel; +import org.flowable.engine.history.HistoricProcessInstance; +import org.flowable.engine.runtime.ProcessInstance; import org.flowable.task.service.Task; import org.junit.Before; import org.junit.Test; @@ -76,8 +80,22 @@ public class ProcessTaskTest extends AbstractProcessEngineIntegrationTest { .list(); assertEquals(1, planItemInstances.size()); assertEquals("The Process", planItemInstances.get(0).getName()); + assertNotNull(planItemInstances.get(0).getReferenceId()); + assertEquals(PlanItemInstanceCallbackType.CHILD_PROCESS, planItemInstances.get(0).getReferenceType()); assertEquals(0, cmmnHistoryService.createHistoricMilestoneInstanceQuery().count()); + ProcessInstance processInstance = processEngine.getRuntimeService().createProcessInstanceQuery().singleResult(); + assertNotNull(processInstance); + assertNotNull(processInstance.getCallbackId()); + assertNotNull(processInstance.getCallbackType()); + + if (processEngine.getProcessEngineConfiguration().getHistoryLevel().isAtLeast(HistoryLevel.ACTIVITY)) { + HistoricProcessInstance historicProcessInstance = processEngine.getHistoryService().createHistoricProcessInstanceQuery() + .processInstanceId(processInstance.getId()).singleResult(); + assertEquals(processInstance.getCallbackId(), historicProcessInstance.getCallbackId()); + assertEquals(processInstance.getCallbackType(), historicProcessInstance.getCallbackType()); + } + // Completing task will trigger completion of process task plan item processEngine.getTaskService().complete(task.getId()); diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/entity/HistoricProcessInstanceEntityImpl.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/entity/HistoricProcessInstanceEntityImpl.java index 7ca2af09e5..9786a6dcbf 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/entity/HistoricProcessInstanceEntityImpl.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/entity/HistoricProcessInstanceEntityImpl.java @@ -93,6 +93,8 @@ public class HistoricProcessInstanceEntityImpl extends HistoricScopeInstanceEnti persistentState.put("processDefinitionName", processDefinitionName); persistentState.put("processDefinitionVersion", processDefinitionVersion); persistentState.put("deploymentId", deploymentId); + persistentState.put("callbackId", callbackId); + persistentState.put("callbackType", callbackType); return persistentState; } diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/ProcessInstanceHelper.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/ProcessInstanceHelper.java index 36d9cf0cdf..3d1ebc4946 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/ProcessInstanceHelper.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/ProcessInstanceHelper.java @@ -229,6 +229,15 @@ public class ProcessInstanceHelper { initiatorVariableName, initialFlowElement.getId()); processInstance.setName(processInstanceName); + + // Callbacks + if (callbackId != null) { + processInstance.setCallbackId(callbackId); + } + if (callbackType != null) { + processInstance.setCallbackType(callbackType); + } + CommandContextUtil.getHistoryManager(commandContext).recordProcessInstanceStart(processInstance); @@ -252,14 +261,6 @@ public class ProcessInstanceHelper { } } - // Callbacks - if (callbackId != null) { - processInstance.setCallbackId(callbackId); - } - if (callbackType != null) { - processInstance.setCallbackType(callbackType); - } - // Fire events if (eventDispatcherEnabled) { CommandContextUtil.getProcessEngineConfiguration().getEventDispatcher() diff --git a/modules/flowable-engine/src/main/resources/org/flowable/db/mapping/entity/HistoricProcessInstance.xml b/modules/flowable-engine/src/main/resources/org/flowable/db/mapping/entity/HistoricProcessInstance.xml index d02f7c19a2..09892910ff 100644 --- a/modules/flowable-engine/src/main/resources/org/flowable/db/mapping/entity/HistoricProcessInstance.xml +++ b/modules/flowable-engine/src/main/resources/org/flowable/db/mapping/entity/HistoricProcessInstance.xml @@ -176,13 +176,13 @@ DELETE_REASON_ = #{deleteReason, jdbcType=VARCHAR}, - NAME_ = #{name, jdbcType=VARCHAR} + NAME_ = #{name, jdbcType=VARCHAR}, - CALLBACK_ID_ = #{callbackId, jdbcType=VARCHAR} + CALLBACK_ID_ = #{callbackId, jdbcType=VARCHAR}, - CALLBACK_ID_ = #{callbackType, jdbcType=VARCHAR} + CALLBACK_TYPE_ = #{callbackType, jdbcType=VARCHAR} where ID_ = #{id} @@ -224,6 +224,8 @@ + + @@ -246,6 +248,8 @@ + + -- GitLab