- Модуль: 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;
}