diff --git a/customer-work/src/main/java/com/customer/work/service/TaskListenerService.java b/customer-work/src/main/java/com/customer/work/service/TaskListenerService.java new file mode 100755 index 0000000..bae34d6 --- /dev/null +++ b/customer-work/src/main/java/com/customer/work/service/TaskListenerService.java @@ -0,0 +1,42 @@ +package com.customer.work.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import org.flowable.eventregistry.api.EventRegistry; +import org.flowable.eventregistry.api.model.EventPayloadTypes; +import org.flowable.eventregistry.api.runtime.EventPayloadInstance; +import org.flowable.eventregistry.impl.runtime.EventInstanceImpl; +import org.flowable.eventregistry.impl.runtime.EventPayloadInstanceImpl; +import org.flowable.eventregistry.model.EventPayload; +import org.flowable.task.service.delegate.DelegateTask; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Collection; + +@Service +public class TaskListenerService { + private final EventRegistry eventRegistry; + private final ObjectMapper objectMapper; + + public TaskListenerService(EventRegistry eventRegistry, ObjectMapper objectMapper) { + this.eventRegistry = eventRegistry; + this.objectMapper = objectMapper; + } + + public void throwTaskListenerEvent(String rootCaseId, String eventKey, DelegateTask task, String message) { + ObjectNode jsonTask = objectMapper.createObjectNode(); + jsonTask.put("modelId", task.getTaskDefinitionKey()); + jsonTask.put("assignee", task.getAssignee()); + jsonTask.put("name", task.getName()); + + Collection instances = new ArrayList<>(); + instances.add(new EventPayloadInstanceImpl(EventPayload.correlation("caseId", EventPayloadTypes.STRING), rootCaseId)); + instances.add(new EventPayloadInstanceImpl(new EventPayload("taskListenerTask", EventPayloadTypes.JSON), jsonTask)); + instances.add(new EventPayloadInstanceImpl(new EventPayload("taskListenerMessage", EventPayloadTypes.STRING), message)); + + EventInstanceImpl event = new EventInstanceImpl(eventKey, instances, task.getTenantId()); + eventRegistry.sendSystemEventOutbound(event); + } +} diff --git a/customer-work/src/main/java/com/customer/work/service/TaskProcessStarter.java b/customer-work/src/main/java/com/customer/work/service/TaskProcessStarter.java new file mode 100644 index 0000000..c327174 --- /dev/null +++ b/customer-work/src/main/java/com/customer/work/service/TaskProcessStarter.java @@ -0,0 +1,26 @@ +package com.customer.work.service; + +import org.flowable.engine.RuntimeService; +import org.flowable.task.service.delegate.DelegateTask; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Component("taskProcessStarter") +public class TaskProcessStarter { + @Autowired + private RuntimeService runtimeService; + + public void start(String processKey, DelegateTask task) { +// String processKey = (String) task.getVariable("subProcessKey"); // key from variable + + Map vars = new HashMap<>(task.getVariables()); // carry over existing vars + vars.put("originTaskId", task.getId()); + vars.put("originTaskName", task.getName()); + + runtimeService.startProcessInstanceByKey(processKey, vars); +// runtimeService.startProcessInstanceById(processKey, vars); + } +} diff --git a/customer-work/src/test/java/com/customer/work/model/test/TrackVarsTest.java b/customer-work/src/test/java/com/customer/work/model/test/TrackVarsTest.java new file mode 100644 index 0000000..7b42eed --- /dev/null +++ b/customer-work/src/test/java/com/customer/work/model/test/TrackVarsTest.java @@ -0,0 +1,37 @@ +package com.customer.work.model.test; + +import com.customer.work.model.FlowableModelTest; +import com.customer.work.model.FlowableModelTestUtils; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.stream.Stream; + +@FlowableModelTest +public class TrackVarsTest { + + @Autowired + protected FlowableModelTestUtils flowableModelTest; + + @Test + @Disabled + public void exportApp() { + flowableModelTest.exportApp("http://localhost:8106", "andiWS", "trackVarsApp", "admin", "test"); + } + + private Stream trackVarsProcessTestData() { + return flowableModelTest.getJsonArgumentsFromExcel("model/test/TrackVars/trackVars.xlsx"); + } + @ParameterizedTest + @MethodSource("trackVarsProcessTestData") + public void trackVarsProcessTest(String path, JsonNode argument) { + ObjectNode result = flowableModelTest.testJsonExcelRow(path, argument); + } + +} diff --git a/customer-work/src/test/resources/model/test/TrackVars/trackVars.xlsx b/customer-work/src/test/resources/model/test/TrackVars/trackVars.xlsx new file mode 100644 index 0000000..f55f226 Binary files /dev/null and b/customer-work/src/test/resources/model/test/TrackVars/trackVars.xlsx differ diff --git a/customer-work/src/test/resources/test-auto-deploy-apps/TST_APP.zip b/customer-work/src/test/resources/test-auto-deploy-apps/TST_APP.zip index d78118a..f1070c2 100644 Binary files a/customer-work/src/test/resources/test-auto-deploy-apps/TST_APP.zip and b/customer-work/src/test/resources/test-auto-deploy-apps/TST_APP.zip differ diff --git a/tmp/new.json b/tmp/new.json deleted file mode 100644 index de06a6a..0000000 --- a/tmp/new.json +++ /dev/null @@ -1,64 +0,0 @@ -http://localhost:8105/action-api/action-repository/action-definitions/key/GKB_A003?formId=FRM-ce76b8bf-27a5-11f1-8af0-3ead6594277e&formFieldId=GKB_F004_work-action1 - -http://localhost:8105/#/work/assignee/case/CAS-6d2e2764-325b-11f1-9ab1-3aee1b292dd9 -#/work/assignee/case/{{$response.executionPayload.id}} - -http://localhost:8105/platform-api/channel-definitions/key/DCL_CH002/events - - -{{endpoints.platform}}/search/query-case-instances/query/DCL_Q001?start={{$start}}&size={{$pageSize}}&sort={{$sort || 'startTime&order=desc'}}&{{$filter}} -{{endpoints.platform}}/search/query-case-instances/query/DCL_Q001?caseDefinitionKey=DCL_C001&start={{$start}}&size={{$pageSize}}&sort={{$sort || 'startTime&order=desc'}}&{{$filter}} - -{{endpoints.platform}}/search/query-case-instances/query/DCL_Q001?caseDefinitionKey=DCL_C009&start={{$start}}&size={{$pageSize}}&sort={{$sort || 'startTime&order=desc'}}&{{$filter}} - -${var:eq(payload.startOnHold, true) ? 'hold' : 'sign'} - -http://localhost:8105/action-api/action-repository/action-definitions/AEN-ef8bdf0f-27ae-11f1-ba38-3ead6594277e/execute?scopeId=CAS-5b051448-3740-11f1-81d8-1eb9efb927bf&scopeType=cmmn - -- ${json:addToArray(jsonArray, json:object())} -${json:object()} - -${flw.format.formatString('Content %d' , root.versionNum)} - -${root.versions.size() < root.versionNum ? json:addToArray(root.versions, json:object()) : null} - -${cmmnRuntimeService.updateBusinessStatus(root.id, root.versions[root.versionIndex].)} - -${verifyDecision == 'verified' ? cmmnRuntimeService.updateBusinessStatus(root.id, 'verified') : cmmnRuntimeService.updateBusinessStatus(root.id, 'rejected')} - -root.versions[root.versionIndex] - -${root.businessStatus == 'verified' || root.businessStatus == 'verify'} - -${propertyConfigurationService.getProperty('baseUrl', 'baseUrl')} -${''.join('/', myBaseUrl, '#/work/assignee/case', root.id, 'task', myTaskId)} - -${myBaseUrl}/#/work/assignee/case/${root.id}/task/myTaskId - -${myBaseUrl}/#/work/assignee/case/${root.id}/task/${myTaskId} - -http://localhost:8105/platform-api/process-instances?includeTranslations=true&createTestDefinition=false&includeNextTaskInfo=true - - -Document Generation V${root.versionIndex}: ${root.versions[root.versionIndex].documentGeneration} -Verify V${root.versionIndex} -Released V${root.versionIndex} - -Verify Decision [${root.versionIndex}]: ${verifyDecision} - Overtime Selection: ${overtimeSelection} - -${root.versions[root.versionIndex].documentGeneration} - -Document Generation [${root.versionIndex}]: ${root.versions[root.versionIndex].documentGeneration} - -Sign Decision [${root.versionIndex}]: ${signDecision} - Overtime Selection: ${overtimeSelection} - -${root.versions[root.versionIndex].workOvertime} - -Print Contract [${root.versionIndex}] - -{{endpoints.platform}}/search/query-case-instances/query/DCL_Q001?caseDefinitionKey=DCL_C135&start={{$start}}&size={{$pageSize}}&sort={{$sort || 'startTime&order=desc'}}&{{$filter}} - - -{{endpoints.platform}}/search/query-process-instances/query/subitemProcessQuery?processDefinitionKey=subitemSubprocess&start={{$start}}&size={{$pageSize}}&sort={{$sort || 'startTime&order=desc'}}&{{$filter}} - -