public void startActivitiProcessInstance(StartProcessCommand spic, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException, ObjectAlreadyExistsException { String owner = spic.getProcessOwner(); if (owner != null) { activitiEngine.getIdentityService().setAuthenticatedUserId(owner); } RuntimeService rs = activitiEngine.getProcessEngine().getRuntimeService(); ProcessInstanceBuilder builder = rs.createProcessInstanceBuilder() .processDefinitionKey(spic.getProcessName()) .processInstanceName(spic.getProcessInstanceName()); for (Map.Entry<String, Object> varEntry : spic.getVariables().entrySet()) { builder.addVariable(varEntry.getKey(), varEntry.getValue()); } ProcessInstance pi = builder.start(); if (spic.isSendStartConfirmation()) { // let us send a reply back (useful for listener-free processes) ProcessStartedEvent event = new ProcessStartedEvent( pi.getProcessInstanceId(), ((ExecutionEntity) pi).getVariables(), // a bit of hack... processInterfaceFinder); event.setRunning(!pi.isEnded()); LOGGER.trace("Event to be sent to IDM: {}", event); wfTaskController.onProcessEvent(event, true, task, result); } }