Бизнес-процессы
Запуск бизнес-процесса из PHP
Как запустить бизнес-процесс из коробочного PHP-кода через CBPDocument::StartWorkflow.
Для запуска бизнес-процесса из PHP обычно используется CBPDocument::StartWorkflow().
Самое важное — правильно собрать ID шаблона, document id и параметры процесса.
Основной запуск
Минимальный набор: модуль bizproc, ID шаблона, document id и массив ошибок.
StartWorkflow
Метод принимает ID шаблона бизнес-процесса, document id, параметры запуска и массив ошибок.
\Bitrix\Main\Loader::includeModule('bizproc');
/**
* Запускает бизнес-процесс.
*/
function startWorkflow(int $template_id, array $document_id, array $parameters = []): array
{
$error_messages = [];
$workflow_id = \CBPDocument::StartWorkflow(
$template_id,
$document_id,
$parameters,
$error_messages
);
return [
'workflow_id' => (string) $workflow_id,
'is_success' => !empty($workflow_id) && empty($error_messages),
'error_messages' => $error_messages,
];
} Запустить по сделке
Для сделки CRM document id обычно собирается как
['crm', 'CCrmDocumentDeal', 'DEAL_' . $deal_id].
\Bitrix\Main\Loader::includeModule('bizproc');
/**
* Собирает document id сделки.
*/
function buildDealDocumentId(int $deal_id): array
{
return [
'crm',
'CCrmDocumentDeal',
'DEAL_' . $deal_id,
];
}
/**
* Запускает бизнес-процесс по сделке.
*/
function startDealWorkflow(int $template_id, int $deal_id, int $user_id): array
{
$error_messages = [];
$workflow_id = \CBPDocument::StartWorkflow(
$template_id,
buildDealDocumentId($deal_id),
[
'TargetUser' => 'user_' . $user_id,
],
$error_messages
);
return [
'workflow_id' => (string) $workflow_id,
'is_success' => !empty($workflow_id) && empty($error_messages),
'error_messages' => $error_messages,
];
}
$start_result = startDealWorkflow($template_id, $deal_id, $user_id);
print_r($start_result); Передать параметры
Если у шаблона есть параметры, их можно передать третьим аргументом. Ключи должны совпадать с кодами параметров шаблона.
$parameters = [
'TargetUser' => 'user_' . $user_id,
'manager_id' => $manager_id,
'comment_text' => 'Запущено из PHP',
];
$start_result = startWorkflow(
$template_id,
buildDealDocumentId($deal_id),
$parameters
);
print_r($start_result); Шаблоны
Если ID шаблона неизвестен, его можно получить из списка шаблонов по типу документа.
Получить шаблоны документа
\Bitrix\Main\Loader::includeModule('bizproc');
/**
* Получает активные шаблоны бизнес-процессов для сделок.
*/
function fetchDealWorkflowTemplates(): array
{
$templates = [];
$document_type = [
'crm',
'CCrmDocumentDeal',
'DEAL',
];
$template_result = \CBPWorkflowTemplateLoader::GetList(
[
'ID' => 'ASC',
],
[
'DOCUMENT_TYPE' => $document_type,
'ACTIVE' => 'Y',
],
false,
false,
[
'ID',
'NAME',
'DESCRIPTION',
'PARAMETERS',
]
);
while ($template = $template_result->Fetch()) {
$templates[] = $template;
}
return $templates;
}
$templates = fetchDealWorkflowTemplates();
print_r($templates); Проверить ошибки запуска
Если процесс не запустился, первым делом нужно смотреть массив ошибок, который
передаётся четвёртым аргументом в StartWorkflow().
$start_result = startDealWorkflow($template_id, $deal_id, $user_id);
if (!$start_result['is_success']) {
AddMessage2Log(
[
'message' => 'Ошибка запуска бизнес-процесса',
'result' => $start_result,
],
'bizproc_start'
);
}