• Модуль: bizproc
  • Путь к файлу: ~/bitrix/modules/bizproc/lib/script/queue/stepper.php
  • Класс: BitrixBizprocScriptQueueStepper
  • Вызов: Stepper::executeDocument
private function executeDocument(EO_ScriptQueueDocument $document, EO_Script $script)
{
	$document->setStatus(Status::EXECUTING)->save();

	$document->fillQueue();
	$queue = $document->getQueue();
	$documentType = $documentId = [$script->getModuleId(), $script->getEntity(), $script->getDocumentType()];
	$documentId[2] = $document->getDocumentId();

	$workflowId = null;
	$errors = [];

	$canStart = CBPDocument::canUserOperateDocument(
		CBPCanUserOperateOperation::StartWorkflow,
		$queue->getStartedBy(),
		$documentId
	);

	if ($canStart)
	{
		$startParameters = $queue->getWorkflowParameters();
		if (!is_array($startParameters))
		{
			$startParameters = [];
		}

		$startParameters[CBPDocument::PARAM_TAGRET_USER] = $queue->getStartedBy();
		$startParameters[CBPDocument::PARAM_USE_FORCED_TRACKING] = true;
		$startParameters[CBPDocument::PARAM_IGNORE_SIMULTANEOUS_PROCESSES_LIMIT] = true;
		$startParameters[CBPDocument::PARAM_DOCUMENT_TYPE] = $documentType;
		$startParameters[CBPDocument::PARAM_DOCUMENT_EVENT_TYPE] = CBPDocumentEventType::Script;

		$workflowId = CBPDocument::StartWorkflow($script->getWorkflowTemplateId(), $documentId, $startParameters, $errors);
	}
	else
	{
		$errors[] = ['message' => MainLocalizationLoc::getMessage('BIZPROC_SCRIPT_QUEUE_CAN_START_ERROR')];
	}

	if ($workflowId)
	{
		$document->setWorkflowId($workflowId);
		$document->setStatus(Status::COMPLETED);
	}
	if ($errors)
	{
		$document->setStatus(Status::FAULT);
		$document->setStatusMessage(reset($errors)['message']);
	}

	$document->save();
	return self::CONTINUE_EXECUTION;
}