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