@SuppressWarnings("unchecked") public List<HistoricDecisionInstance> getHistoricDecisionInstances(Date evaluatedAfter, Date evaluatedAt, int maxResults) { checkIsAuthorizedToReadHistoryOfDecisionDefinitions(); Map<String, Object> params = new HashMap<>(); params.put("evaluatedAfter", evaluatedAfter); params.put("evaluatedAt", evaluatedAt); params.put("maxResults", maxResults); List<HistoricDecisionInstance> decisionInstances = getDbEntityManager().selectList("selectHistoricDecisionInstancePage", params); HistoricDecisionInstanceQueryImpl query = (HistoricDecisionInstanceQueryImpl) new HistoricDecisionInstanceQueryImpl() .disableBinaryFetching() .disableCustomObjectDeserialization() .includeInputs() .includeOutputs(); getHistoricDecisionInstanceManager() .enrichHistoricDecisionsWithInputsAndOutputs(query, decisionInstances); return decisionInstances; }
@SuppressWarnings("unchecked") public List<HistoricDecisionInstance> getHistoricDecisionInstances(Date evaluatedAfter, Date evaluatedAt, int maxResults) { checkIsAuthorizedToReadHistoryOfDecisionDefinitions(); Map<String, Object> params = new HashMap<>(); params.put("evaluatedAfter", evaluatedAfter); params.put("evaluatedAt", evaluatedAt); params.put("maxResults", maxResults); List<HistoricDecisionInstance> decisionInstances = getDbEntityManager().selectList("selectHistoricDecisionInstancePage", params); HistoricDecisionInstanceQueryImpl query = (HistoricDecisionInstanceQueryImpl) new HistoricDecisionInstanceQueryImpl() .disableBinaryFetching() .disableCustomObjectDeserialization() .includeInputs() .includeOutputs(); getHistoricDecisionInstanceManager() .enrichHistoricDecisionsWithInputsAndOutputs(query, decisionInstances); return decisionInstances; }
@Deployment(resources = { DECISION_PROCESS, DECISION_MULTIPLE_INPUT_DMN}) public void testMultipleDecisionInputInstances() { Map<String, Object> variables = new HashMap<String, Object>(); variables.put("input1", "a"); variables.put("input2", 1); runtimeService.startProcessInstanceByKey("testProcess", variables); HistoricDecisionInstance historicDecisionInstance = historyService.createHistoricDecisionInstanceQuery().includeInputs().singleResult(); List<HistoricDecisionInputInstance> inputs = historicDecisionInstance.getInputs(); assertThat(inputs.size(), is(2)); assertThat(inputs.get(0).getValue(), is((Object) "a")); assertThat(inputs.get(1).getValue(), is((Object) 1)); }
@Deployment(resources = { DECISION_PROCESS, DECISION_SINGLE_OUTPUT_DMN }) public void testDisableDecisionInputInstanceByteValue() { byte[] bytes = "object".getBytes(); startProcessInstanceAndEvaluateDecision(bytes); HistoricDecisionInstance historicDecisionInstance = historyService.createHistoricDecisionInstanceQuery().includeInputs().disableBinaryFetching().singleResult(); List<HistoricDecisionInputInstance> inputs = historicDecisionInstance.getInputs(); assertThat(inputs.size(), is(1)); HistoricDecisionInputInstance input = inputs.get(0); assertThat(input.getTypeName(), is("bytes")); assertThat(input.getValue(), is(nullValue())); }
@Deployment(resources = { DECISION_PROCESS, DECISION_SINGLE_OUTPUT_DMN }) public void testQueryIncludeInputsForNonExistingDecision() { HistoricDecisionInstanceQuery query = historyService.createHistoricDecisionInstanceQuery().includeInputs(); assertThat(query.singleResult(), is(nullValue())); startProcessInstanceAndEvaluateDecision(); assertThat(query.decisionInstanceId("nonExisting").singleResult(), is(nullValue())); }
@Deployment(resources = { DECISION_PROCESS, DECISION_NO_INPUT_DMN }) public void testQueryIncludeInputsNoInput() { startProcessInstanceAndEvaluateDecision(); HistoricDecisionInstanceQuery query = historyService.createHistoricDecisionInstanceQuery(); assertThat(query.includeInputs().singleResult().getInputs().size(), is(0)); }
@Deployment(resources = { DECISION_PROCESS, DECISION_SINGLE_OUTPUT_DMN }) public void testDecisionInputInstanceProperties() { startProcessInstanceAndEvaluateDecision(); HistoricDecisionInstance historicDecisionInstance = historyService.createHistoricDecisionInstanceQuery().includeInputs().singleResult(); List<HistoricDecisionInputInstance> inputs = historicDecisionInstance.getInputs(); assertThat(inputs, is(notNullValue())); assertThat(inputs.size(), is(1)); HistoricDecisionInputInstance input = inputs.get(0); assertThat(input.getDecisionInstanceId(), is(historicDecisionInstance.getId())); assertThat(input.getClauseId(), is("in")); assertThat(input.getClauseName(), is("input")); }
@Deployment(resources = { DECISION_PROCESS, DECISION_SINGLE_OUTPUT_DMN }) public void testMultipleDecisionInstances() { startProcessInstanceAndEvaluateDecision("a"); waitASignificantAmountOfTime(); startProcessInstanceAndEvaluateDecision("b"); List<HistoricDecisionInstance> historicDecisionInstances = historyService .createHistoricDecisionInstanceQuery() .includeInputs() .orderByEvaluationTime().asc() .list(); assertThat(historicDecisionInstances.size(), is(2)); List<HistoricDecisionInputInstance> inputsOfFirstDecision = historicDecisionInstances.get(0).getInputs(); assertThat(inputsOfFirstDecision.size(), is(1)); assertThat(inputsOfFirstDecision.get(0).getValue(), is((Object) "a")); List<HistoricDecisionInputInstance> inputsOfSecondDecision = historicDecisionInstances.get(1).getInputs(); assertThat(inputsOfSecondDecision.size(), is(1)); assertThat(inputsOfSecondDecision.get(0).getValue(), is((Object) "b")); }
@Test @Deployment(resources = { DECISION_PROCESS, DECISION_SINGLE_OUTPUT_DMN }) public void decisionInputInstanceValue() throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS"); Date fixedDate = sdf.parse("01/01/2001 01:01:01.000"); ClockUtil.setCurrentTime(fixedDate); startProcessInstanceAndEvaluateDecision(inputValue); HistoricDecisionInstance historicDecisionInstance = engineRule.getHistoryService().createHistoricDecisionInstanceQuery().includeInputs().singleResult(); List<HistoricDecisionInputInstance> inputInstances = historicDecisionInstance.getInputs(); assertThat(inputInstances.size(), is(1)); HistoricDecisionInputInstance inputInstance = inputInstances.get(0); assertThat(inputInstance.getTypeName(), is(valueType)); assertThat(inputInstance.getValue(), is(inputValue)); assertThat(inputInstance.getCreateTime(), is(fixedDate)); }
public HistoricDecisionInstanceDto getHistoricDecisionInstance(Boolean includeInputs, Boolean includeOutputs, Boolean disableBinaryFetching, Boolean disableCustomObjectDeserialization) { HistoryService historyService = engine.getHistoryService(); HistoricDecisionInstanceQuery query = historyService.createHistoricDecisionInstanceQuery().decisionInstanceId(decisionInstanceId); if (includeInputs != null && includeInputs) { query.includeInputs(); } if (includeOutputs != null && includeOutputs) { query.includeOutputs(); } if (disableBinaryFetching != null && disableBinaryFetching) { query.disableBinaryFetching(); } if (disableCustomObjectDeserialization != null && disableCustomObjectDeserialization) { query.disableCustomObjectDeserialization(); } HistoricDecisionInstance instance = query.singleResult(); if (instance == null) { throw new InvalidRequestException(Status.NOT_FOUND, "Historic decision instance with id '" + decisionInstanceId + "' does not exist"); } return HistoricDecisionInstanceDto.fromHistoricDecisionInstance(instance); } }
@Test public void testHistoricDecisionInstance() { VariableMap variables = Variables.createVariables().putValue("status", "bronze").putValue("sum", 100); ProcessInstance pi = runtimeService.startProcessInstanceByKey("testProcess", variables); HistoricDecisionInstance historicDecisionInstance = historyService.createHistoricDecisionInstanceQuery().includeInputs().includeOutputs().singleResult(); assertThat(historicDecisionInstance, is(notNullValue())); assertThat(historicDecisionInstance.getDecisionDefinitionKey(), is("decision")); assertThat(historicDecisionInstance.getDecisionDefinitionName(), is("Check Order")); assertThat(historicDecisionInstance.getInputs().size(), is(2)); assertThat(historicDecisionInstance.getOutputs().size(), is(2)); Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult(); taskService.complete(task.getId()); }
@Deployment(resources = { DECISION_PROCESS, DECISION_SINGLE_OUTPUT_DMN }) public void testDeleteHistoricDecisionInstanceByInstanceId() { // given startProcessInstanceAndEvaluateDecision(); HistoricDecisionInstanceQuery query = historyService.createHistoricDecisionInstanceQuery().decisionDefinitionKey(DECISION_DEFINITION_KEY); assertThat(query.count(), is(1L)); HistoricDecisionInstance historicDecisionInstance = query.includeInputs().includeOutputs().singleResult(); // when historyService.deleteHistoricDecisionInstanceByInstanceId(historicDecisionInstance.getId()); // then assertThat(query.count(), is(0L)); }
@Test @Deployment(resources = { "org/camunda/bpm/engine/test/dmn/deployment/drdDish.dmn11.xml" }) public void shouldNotResolveHistoricDecisionInputInstance() { // given // when decisionService.evaluateDecisionTableByKey("dish-decision", Variables.createVariables() .putValue("temperature", 32) .putValue("dayType", "Weekend")); HistoricDecisionInstance historicDecisionInstance = historyService.createHistoricDecisionInstanceQuery() .rootDecisionInstancesOnly() .includeInputs() .singleResult(); // assume assertThat(historicDecisionInstance, notNullValue()); List<HistoricDecisionInputInstance> historicDecisionInputInstances = historicDecisionInstance.getInputs(); // then assertThat(historicDecisionInputInstances.get(0).getRootProcessInstanceId(), nullValue()); assertThat(historicDecisionInputInstances.get(1).getRootProcessInstanceId(), nullValue()); }
@Test @Deployment(resources = { "org/camunda/bpm/engine/test/dmn/deployment/drdDish.dmn11.xml" }) public void shouldNotResolveHistoricDecisionInputInstance() { // given // when decisionService.evaluateDecisionTableByKey("dish-decision", Variables.createVariables() .putValue("temperature", 32) .putValue("dayType", "Weekend")); HistoricDecisionInstance historicDecisionInstance = historyService.createHistoricDecisionInstanceQuery() .rootDecisionInstancesOnly() .includeInputs() .singleResult(); // assume assertThat(historicDecisionInstance, notNullValue()); List<HistoricDecisionInputInstance> historicDecisionInputInstances = historicDecisionInstance.getInputs(); // then assertThat(historicDecisionInputInstances.get(0).getRemovalTime(), nullValue()); assertThat(historicDecisionInputInstances.get(1).getRemovalTime(), nullValue()); }
@Test public void deleteHistoricDecisionInstanceByInstanceIdWithAuthenticatedTenant() { // given testRule.deployForTenant(TENANT_ONE, DMN); evaluateDecisionTable(null); HistoricDecisionInstanceQuery query = historyService.createHistoricDecisionInstanceQuery(); HistoricDecisionInstance historicDecisionInstance = query.includeInputs().includeOutputs().singleResult(); // when identityService.setAuthentication("user", null, Arrays.asList(TENANT_ONE)); historyService.deleteHistoricDecisionInstanceByInstanceId(historicDecisionInstance.getId()); // then identityService.clearAuthentication(); assertThat(query.count(), is(0L)); }
@Test public void testHistoricDecisionInputInstanceBinary() { testRule.deploy(DECISION_PROCESS, DECISION_SINGLE_OUTPUT_DMN); startProcessInstanceAndEvaluateDecision(new JavaSerializable("foo")); HistoricDecisionInstance historicDecisionInstance = engineRule.getHistoryService().createHistoricDecisionInstanceQuery().includeInputs().singleResult(); List<HistoricDecisionInputInstance> inputInstances = historicDecisionInstance.getInputs(); assertEquals(1, inputInstances.size()); String byteArrayValueId = ((HistoricDecisionInputInstanceEntity) inputInstances.get(0)).getByteArrayValueId(); // when ByteArrayEntity byteArrayEntity = configuration.getCommandExecutorTxRequired().execute(new GetByteArrayCommand(byteArrayValueId)); checkBinary(byteArrayEntity); }
public void testDeleteHistoricDecisionInstanceByInstanceIdWithoutAuthorization() { // given createGrantAuthorization(DECISION_DEFINITION, DECISION_DEFINITION_KEY, userId, READ_HISTORY); startProcessInstanceAndEvaluateDecision(); HistoricDecisionInstanceQuery query = historyService.createHistoricDecisionInstanceQuery(); HistoricDecisionInstance historicDecisionInstance = query.includeInputs().includeOutputs().singleResult(); try { // when historyService.deleteHistoricDecisionInstanceByInstanceId(historicDecisionInstance.getId()); fail("expect authorization exception"); } catch (AuthorizationException e) { // then assertThat(e.getMessage(), is("The user with id 'test' does not have 'DELETE_HISTORY' permission on resource 'testDecision' of type 'DecisionDefinition'.")); } }
public void testDeleteHistoricDecisionInstanceByInstanceIdWithDeleteHistoryPermissionOnDecisionDefinition() { // given createGrantAuthorization(DECISION_DEFINITION, DECISION_DEFINITION_KEY, userId, DELETE_HISTORY, READ_HISTORY); startProcessInstanceAndEvaluateDecision(); HistoricDecisionInstanceQuery query = historyService.createHistoricDecisionInstanceQuery(); verifyQueryResults(query, 1); HistoricDecisionInstance historicDecisionInstance = query.includeInputs().includeOutputs().singleResult(); // when historyService.deleteHistoricDecisionInstanceByInstanceId(historicDecisionInstance.getId()); // then verifyQueryResults(query, 0); }
@Test public void deleteHistoricDecisionInstanceByInstanceIdWithDisabledTenantCheck() { // given testRule.deployForTenant(TENANT_ONE, DMN); testRule.deployForTenant(TENANT_TWO, DMN); evaluateDecisionTable(TENANT_ONE); evaluateDecisionTable(TENANT_TWO); HistoricDecisionInstanceQuery query = historyService.createHistoricDecisionInstanceQuery(); List<HistoricDecisionInstance> historicDecisionInstances = query.includeInputs().includeOutputs().list(); assertThat(historicDecisionInstances.size(), is(2)); // when user has no authorization identityService.setAuthentication("user", null, null); // and when tenant check is disabled processEngineConfiguration.setTenantCheckEnabled(false); // and when all decision instances are deleted for(HistoricDecisionInstance in: historicDecisionInstances){ historyService.deleteHistoricDecisionInstanceByInstanceId(in.getId()); } // then identityService.clearAuthentication(); assertThat(query.count(), is(0L)); }
@Test public void failToDeleteHistoricDecisionInstanceByInstanceIdNoAuthenticatedTenants() { // given testRule.deployForTenant(TENANT_ONE, DMN); evaluateDecisionTable(null); HistoricDecisionInstanceQuery query = historyService.createHistoricDecisionInstanceQuery(); HistoricDecisionInstance historicDecisionInstance = query.includeInputs().includeOutputs().singleResult(); // when identityService.setAuthentication("user", null, null); // then thrown.expect(ProcessEngineException.class); thrown.expectMessage("Cannot delete the historic decision instance"); historyService.deleteHistoricDecisionInstanceByInstanceId(historicDecisionInstance.getId()); }