- Модуль: bizproc
- Путь к файлу: ~/bitrix/modules/bizproc/lib/script/manager.php
- Класс: BitrixBizprocScriptManager
- Вызов: Manager::startScript
static function startScript(
int $scriptId,
int $userId,
array $documentIds,
array $parameters = []
): StartScriptResult
{
$result = new StartScriptResult();
$script = self::getById($scriptId);
if (!$script)
{
return $result->addScriptNotExistError();
}
if (!$script->getActive())
{
return $result->addInactiveScriptError();
}
$script->fill('WORKFLOW_TEMPLATE');
$template = $script->getWorkflowTemplate();
if (!$template)
{
return $result->addTemplateNotExistError();
}
$templateParameters = $template->getParameters();
if ($templateParameters)
{
if (empty($parameters))
{
return $result->addEmptyTemplateParameterError();
}
$errors = [];
$parameters = CBPWorkflowTemplateLoader::checkWorkflowParameters(
$templateParameters,
$parameters,
$template->getDocumentComplexType(),
$errors
);
if ($errors)
{
return $result->addInvalidParameterErrors($errors);
}
}
$documentIds = array_unique($documentIds);
$addResult = ScriptQueueTable::add([
'SCRIPT_ID' => $scriptId,
'STARTED_DATE' => new MainTypeDateTime(),
'STARTED_BY' => $userId,
'STATUS' => QueueStatus::QUEUED,
'MODIFIED_DATE' => new MainTypeDateTime(),
'WORKFLOW_PARAMETERS' => $parameters,
]);
$queueId = null;
if ($addResult->isSuccess())
{
$queueId = $addResult->getId();
$documentRows = array_map(
function ($id) use ($queueId)
{
return [
'QUEUE_ID' => $queueId,
'DOCUMENT_ID' => $id,
'STATUS' => QueueStatus::QUEUED,
];
},
$documentIds
);
ScriptQueueDocumentTable::addMulti($documentRows, true);
}
QueueStepper::bind(1, [$queueId, $scriptId]);
$result->setData([
'queueId' => $queueId,
]);
return $result;
}