/** * find out single activity's highlighted flowIds * * @param activity * @param hisActInstList * @param isExclusive if true only return one flowId(Such as exclusiveGateway, BoundaryEvent On Task) * @return */ private List<String> getHighlightedFlows(List<PvmTransition> pvmTransitionList, LinkedList<HistoricActivityInstance> hisActInstList, boolean isParallel) { List<String> highLightedFlowIds = new ArrayList<String>(); PvmTransition earliestTrans = null; HistoricActivityInstance earliestHisActInst = null; for (PvmTransition pvmTransition : pvmTransitionList) { String destActId = pvmTransition.getDestination().getId(); HistoricActivityInstance destHisActInst = findHisActInst(hisActInstList, destActId); if (destHisActInst != null) { if (isParallel) { highLightedFlowIds.add(pvmTransition.getId()); } else if (earliestHisActInst == null || (earliestHisActInst.getId().compareTo(destHisActInst.getId()) > 0)) { earliestTrans = pvmTransition; earliestHisActInst = destHisActInst; } } } if ((!isParallel) && earliestTrans != null) { highLightedFlowIds.add(earliestTrans.getId()); } return highLightedFlowIds; }
/** * find out single activity's highlighted flowIds * * @param activity * @param hisActInstList * @param isExclusive if true only return one flowId(Such as exclusiveGateway, BoundaryEvent On Task) * @return */ private List<String> getHighlightedFlows(List<PvmTransition> pvmTransitionList, LinkedList<HistoricActivityInstance> hisActInstList, boolean isParallel) { List<String> highLightedFlowIds = new ArrayList<String>(); PvmTransition earliestTrans = null; HistoricActivityInstance earliestHisActInst = null; for (PvmTransition pvmTransition : pvmTransitionList) { String destActId = pvmTransition.getDestination().getId(); HistoricActivityInstance destHisActInst = findHisActInst(hisActInstList, destActId); if (destHisActInst != null) { if (isParallel) { highLightedFlowIds.add(pvmTransition.getId()); } else if (earliestHisActInst == null || (earliestHisActInst.getId().compareTo(destHisActInst.getId()) > 0)) { earliestTrans = pvmTransition; earliestHisActInst = destHisActInst; } } } if ((!isParallel) && earliestTrans != null) { highLightedFlowIds.add(earliestTrans.getId()); } return highLightedFlowIds; }
private String findCurrentTaskId(List<HistoricActivityInstance> historicInstances, List<ProgressMessage> progressMessages) { Date currentTaskStartTime = null; String currentTaskId = null; for (HistoricActivityInstance historicInstance : historicInstances) { if (currentTaskStartTime == null || currentTaskStartTime.before(historicInstance.getStartTime())) { currentTaskStartTime = historicInstance.getStartTime(); currentTaskId = historicInstance.getId(); } } LOGGER.debug("Last known execution time from historic activities: " + currentTaskStartTime); for (ProgressMessage progressMessage : progressMessages) { if (currentTaskStartTime == null || currentTaskStartTime.before(progressMessage.getTimestamp())) { currentTaskStartTime = progressMessage.getTimestamp(); currentTaskId = progressMessage.getTaskId(); } } LOGGER.debug("Last known execution time from progress messagses: " + currentTaskStartTime); return currentTaskId; }
private SlpTaskState calculateTaskState(Step step, HistoricActivityInstance historicActivity) { StepMetadata currentStepMetadata = step.getStepMetadata(); if (historicActivity.getId().equals(processState.getCurrentTaskId())) { processState.setCurrentReached(true); return processState.getCurrentTaskState(); } SlpTaskState targetState = currentStepMetadata.getTargetState(); SlpTaskState defaultTargetState = null; if (historicActivity.getEndTime() != null) { return SlpTaskState.SLP_TASK_STATE_FINISHED; } if (historicActivity.getActivityType().equals("receiveTask")) { defaultTargetState = SlpTaskState.SLP_TASK_STATE_ACTION_REQUIRED; } else { defaultTargetState = SlpTaskState.SLP_TASK_STATE_RUNNING; } SlpTaskState state = targetState != null ? targetState : defaultTargetState; return state; }
/** * get var updates in the node * @param historicActivityInstance * @return */ private Map<String, Object> getVarUpdates(HistoricActivityInstance historicActivityInstance) { Map<String, Object> updates = new HashMap<String,Object>(); List<HistoricDetail> historicUpdates = historyService.createHistoricDetailQuery() .processInstanceId( historicActivityInstance.getProcessInstanceId()) .activityInstanceId( historicActivityInstance.getId()) .variableUpdates() .list(); for (HistoricDetail historicDetail : historicUpdates) updates.put( ((HistoricVariableUpdate) historicDetail).getVariableName(), ((HistoricVariableUpdate) historicDetail).getValue()); return updates; }
@Override public void printActivityData(PrintWriter out, boolean verbose, boolean quite, HistoricActivityInstance actInst) { this.setVerbose(verbose); this.setQuiet(quite); if (quite) { // don't print activity variable update per activity return; } List<HistoricDetail> varList = null; try { varList = this.processEngine.getHistoryService().createHistoricDetailQuery() .variableUpdates().activityInstanceId(actInst.getId()).orderByTime().desc().list(); } catch (ActivitiException ex) { //silent about the error. and log it. LOG.log(Level.INFO, "Error in getting process variables. " + ex.getMessage(), ex); } if (varList != null && varList.size() > 0) { out.println("-------- Task Variables"); printVariables(out, varList); } else { LOG.info("------ No Task Variables! for " + actInst.getActivityId()); } }
@Override public void printActivityData(PrintWriter out, boolean verbose, boolean quite, HistoricActivityInstance actInst) { this.setVerbose(verbose); this.setQuiet(quite); if (quite) { // don't print activity variable update per activity return; } List<HistoricDetail> varList = null; try { varList = this.processEngine.getHistoryService().createHistoricDetailQuery() .variableUpdates().activityInstanceId(actInst.getId()).orderByTime().desc().list(); } catch (ActivitiException ex) { //silent about the error. and log it. LOG.log(Level.INFO, "Error in getting process variables. " + ex.getMessage(), ex); } if (varList != null && varList.size() > 0) { out.println("-------- Task Variables"); printVariables(out, varList); } else { LOG.info("------ No Task Variables! for " + actInst.getActivityId()); } }
@Override public void handle(SimulationEvent event) { // start process now String processInstanceId = (String) event.getProperty(PROCESS_INSTANCE_ID); // get process variables for startEvent HistoricActivityInstance activityInstance = historyService.createHistoricActivityInstanceQuery() .processInstanceId(processInstanceId) .activityType("startEvent") .singleResult(); List<HistoricDetail> details = historyService.createHistoricDetailQuery() .processInstanceId( processInstanceId ) .activityInstanceId( activityInstance.getId()) .variableUpdates() .list(); // fulfill variables Map<String, Object> variables = new HashMap<String,Object>(); for ( HistoricDetail detail : details) { variables.put( ((HistoricVariableUpdate) detail).getVariableName(), ((HistoricVariableUpdate) detail).getValue()); } variables.put( PROCESS_INSTANCE_ID, processInstanceId); log.debug("[{}] Starting new processKey[{}] properties[{}]", ClockUtil.getCurrentTime(), processToStartKey, variables); SimulationRunContext.getRuntimeService().startProcessInstanceByKey( processToStartKey, variables); }
/** * @param historicProcessInstance HistoricProcessInstance * @return Map */ public Map<String, Object> getStartVariables(HistoricProcessInstance historicProcessInstance) { if (historicProcessInstance.getStartActivityId() == null) { return Collections.emptyMap(); } // Get historic variable values for start-event HistoricActivityInstance startEvent = activitiUtil.getHistoryService() .createHistoricActivityInstanceQuery() .processInstanceId(historicProcessInstance.getId()) .activityId(historicProcessInstance.getStartActivityId()) .singleResult(); Map<String, Object> variables = getHistoricActivityVariables(startEvent.getId()); return variables; }
/** * @param historicProcessInstance HistoricProcessInstance * @return Map */ public Map<String, Object> getStartVariables(HistoricProcessInstance historicProcessInstance) { if (historicProcessInstance.getStartActivityId() == null) { return Collections.emptyMap(); } // Get historic variable values for start-event HistoricActivityInstance startEvent = activitiUtil.getHistoryService() .createHistoricActivityInstanceQuery() .processInstanceId(historicProcessInstance.getId()) .activityId(historicProcessInstance.getStartActivityId()) .singleResult(); Map<String, Object> variables = getHistoricActivityVariables(startEvent.getId()); return variables; }
@Override public void execute(ActivityExecution execution) throws Exception { String processInstanceId = (String) execution.getVariable(PlaybackStartProcessEventHandler.PROCESS_INSTANCE_ID); HistoryService historyService = (HistoryService) Context.getProcessEngineConfiguration().getBeans().get(PLAYBACK_HISTORY_SERVICE); // get process variables for the current activityId HistoricActivityInstance activityInstance = historyService.createHistoricActivityInstanceQuery() .processInstanceId(processInstanceId) .activityId( execution.getCurrentActivityId() ) .singleResult(); List<HistoricDetail> details = historyService.createHistoricDetailQuery() .processInstanceId( processInstanceId ) .activityInstanceId( activityInstance.getId()) .variableUpdates() .list(); // fulfill variables Map<String, Object> variables = new HashMap<String,Object>(); for ( HistoricDetail detail : details) { variables.put( ((HistoricVariableUpdate) detail).getVariableName(), ((HistoricVariableUpdate) detail).getValue()); } execution.setVariables(variables); PvmTransition transition = execution.getActivity().getOutgoingTransitions().get(0); execution.take(transition); }
.list(); for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) { historicActivityInstancMap.put(historicActivityInstance.getId(), (HistoricActivityInstanceEntity) historicActivityInstance);
.list(); for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) { System.out.println("任务ID:" + historicActivityInstance.getId()); System.out.println("流程实例ID:" + historicActivityInstance.getProcessInstanceId()); System.out.println("活动名称:" + historicActivityInstance.getActivityName());
.list(); for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) { System.out.println("任务ID:" + historicActivityInstance.getId()); System.out.println("流程实例ID:" + historicActivityInstance.getProcessInstanceId()); System.out.println("活动名称:" + historicActivityInstance.getActivityName());
.list(); for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) { System.out.println("任务ID:" + historicActivityInstance.getId()); System.out.println("流程实例ID:" + historicActivityInstance.getProcessInstanceId()); System.out.println("活动名称:" + historicActivityInstance.getActivityName());
@Override public long simulateTaskExecution(TaskEntity execTask, Map<String, Object> variables) { String playbackProcessInstanceId = (String) runtimeService.getVariable(execTask.getExecutionId(), PlaybackStartProcessEventHandler.PROCESS_INSTANCE_ID); // activity instance has to by only one HistoricActivityInstance activityInstance = playbackHistoryService.createHistoricActivityInstanceQuery() .processInstanceId(playbackProcessInstanceId) .activityId(execTask.getTaskDefinitionKey()) .singleResult(); if ( activityInstance == null ) //use backupExecutor return backUpExecutor.simulateTaskExecution(execTask, variables); List<HistoricDetail> playbackDetails = playbackHistoryService.createHistoricDetailQuery() .activityInstanceId(activityInstance.getId()) .processInstanceId(playbackProcessInstanceId) .variableUpdates() .list(); // fulfill variables for ( HistoricDetail detail : playbackDetails) { variables.put( ((HistoricVariableUpdate) detail).getVariableName(), ((HistoricVariableUpdate) detail).getValue()); } //@TODO change in version 5.12 return activityInstance.getDurationInMillis(); }
public HistoricActivityInstanceResponse createHistoricActivityInstanceResponse(HistoricActivityInstance activityInstance, RestUrlBuilder urlBuilder) { HistoricActivityInstanceResponse result = new HistoricActivityInstanceResponse(); result.setActivityId(activityInstance.getActivityId()); result.setActivityName(activityInstance.getActivityName()); result.setActivityType(activityInstance.getActivityType()); result.setAssignee(activityInstance.getAssignee()); result.setCalledProcessInstanceId(activityInstance.getCalledProcessInstanceId()); result.setDurationInMillis(activityInstance.getDurationInMillis()); result.setEndTime(activityInstance.getEndTime()); result.setExecutionId(activityInstance.getExecutionId()); result.setId(activityInstance.getId()); result.setProcessDefinitionId(activityInstance.getProcessDefinitionId()); result.setProcessDefinitionUrl(urlBuilder.buildUrl(RestUrls.URL_PROCESS_DEFINITION, activityInstance.getProcessDefinitionId())); result.setProcessInstanceId(activityInstance.getProcessInstanceId()); result.setProcessInstanceUrl(urlBuilder.buildUrl(RestUrls.URL_HISTORIC_PROCESS_INSTANCE, activityInstance.getId())); result.setStartTime(activityInstance.getStartTime()); result.setTaskId(activityInstance.getTaskId()); result.setTenantId(activityInstance.getTenantId()); return result; }