@Override public Void execute(Context context) { CaseEventSupport caseEventSupport = getCaseEventSupport(context); caseEventSupport.fireBeforeCaseReopened(caseId, deploymentId, caseDefinitionId, data); KieSession ksession = ((RegistryContext) context).lookup(KieSession.class); if (data != null && !data.isEmpty()) { logger.debug("Updating case file in working memory"); Collection<? extends Object> caseFiles = ksession.getObjects(new ClassObjectFilter(CaseFileInstance.class)); if (caseFiles.size() == 0) { throw new CaseNotFoundException("Case with id " + caseId + " was not found"); } CaseFileInstance caseFile = (CaseFileInstance) caseFiles.iterator().next(); FactHandle factHandle = ksession.getFactHandle(caseFile); caseFile.addAll(data); ksession.update(factHandle, caseFile); } logger.debug( "Starting process instance for case {} and case definition {}", caseId, caseDefinitionId); CorrelationKey correlationKey = correlationKeyFactory.newCorrelationKey(caseId); Map<String, Object> params = new HashMap<>(); // set case id to allow it to use CaseContext when creating runtime engine params.put(EnvironmentName.CASE_ID, caseId); long processInstanceId = processService.startProcess(deploymentId, caseDefinitionId, correlationKey, params); logger.debug( "Case {} successfully reopened (process instance id {})", caseId, processInstanceId); caseEventSupport.fireAfterCaseReopened( caseId, deploymentId, caseDefinitionId, data, processInstanceId); return null; }
/** * Starts a process with parameters. * * @param processId * @param parameters */ public void startProcess(final String processId, final Map<String, Object> parameters) { if (deploymentService.getDeployedUnit(myUnitId) == null) { DeploymentUnit unit = new KModuleDeploymentUnit("com.jeetemplates.bpm", "jbpm6-mykjar", "1.0.0-SNAPSHOT"); myUnitId = unit.getIdentifier(); deploymentService.deploy(unit); } processService.startProcess(myUnitId, processId, parameters); }