/** * {@inheritdoc} */ public function executeCommand(ProcessEngine $engine) { $def = $engine->getRepositoryService()->createProcessDefinitionQuery()->processDefinitionId($this->definitionId)->findOne(); $definition = $def->getModel(); $startNode = $definition->findNode($this->startNodeId); $process = new VirtualExecution(UUID::createRandom(), $engine, $definition); $process->setBusinessKey($this->businessKey); $process->setNode($startNode); foreach (unserialize($this->variables) as $k => $v) { $process->setVariable($k, $v); } $engine->registerExecution($process); $engine->info('Started {process} using process definition "{key}" ({id})', ['process' => (string) $process, 'key' => $def->getKey(), 'id' => (string) $def->getId()]); $process->execute($startNode); return $process->getId(); }
/** * Delegate signal to a target node using the same execution. * * @param VirtualExecution $execution * @param string $signal * @param array $variables * @param array $delegation * @return boolean Returns true if the signal could be delegated. */ protected function delegateSignal(VirtualExecution $execution, $signal, array $variables, array $delegation) { if (empty($delegation['nodeId'])) { return false; } $node = $execution->getProcessModel()->findNode($delegation['nodeId']); $execution->getEngine()->debug('Delegating signal <{signal}> to {node}', ['signal' => $signal === NULL ? 'NULL' : $signal, 'node' => (string) $node]); $execution->setNode($node); $execution->waitForSignal(); $execution->signal($signal, $variables); return true; }