← К документации

Бизнес-процессы

Запуск бизнес-процесса из PHP

StartWorkflow для сделки: документ, параметры шаблона, ID запущенного процесса и ошибки.

PHP-примеры относятся к коробочному Bitrix24. Код для действия «PHP-код» вставляется без открывающего тега PHP; ядро и контекст действия уже доступны.

Запуск по ID шаблона

Этот фрагмент выполняется в PHP-коде коробки с подключённым ядром. Передайте ID существующих шаблона и сделки; шаблон должен относиться к документам сделок.

<?php

if (!\Bitrix\Main\Loader::includeModule('bizproc')
    || !\Bitrix\Main\Loader::includeModule('crm')
) {
    throw new \RuntimeException('Нужны модули bizproc и crm');
}

$template_id = 123;
$deal_id = 456;
$errors = [];
$workflow_id = \CBPDocument::StartWorkflow(
    $template_id,
    ['crm', 'CCrmDocumentDeal', 'DEAL_' . $deal_id],
    [],
    $errors
);

if ($workflow_id === '' || !$workflow_id || $errors !== []) {
    throw new \RuntimeException('БП не запущен; разберите массив errors');
}

Возвращённый ID подтверждает запуск экземпляра. Он не доказывает, что все действия процесса завершились успешно: процесс может ожидать пользователя, паузу или внешнее событие.

Параметры и пользователь

Третий аргумент — значения параметров, объявленных в шаблоне. Произвольный ключ TargetUser сам по себе не назначает исполнителя всех PHP-действий и не является универсальным переключателем прав.

Проверка того, кто может запустить процесс для конкретного документа, относится к вызывающему коду. Нельзя принимать ID сделки и шаблона из публичного запроса без проверки доступа.

Повторный запуск из события

Обработчик изменения сделки может сработать повторно из-за действий самого БП. Защита от рекурсии в памяти действует только в текущем PHP-запросе. Для запуска «один раз на внешнее событие» нужен устойчивый ключ события и запись о его обработке.

События и защита от повторного вызова

Источники