Автоматический запуск бизнес-процессов и роботов

Урок 247 из 248
Автор: Анна Кокина
Сложность урока:
4 уровень - сложно, требуется сосредоточиться, внимание деталям и точному следованию инструкции.
4 из 5
Просмотров: 15700
Дата изменения: 08.11.2023
Недоступно в лицензиях:
Текущую редакцию Вашего 1С-Битрикс можно просмотреть на странице Обновление платформы (Marketplace > Обновление платформы).
Все лицензии БУС

Автоматизация в CRM представлена бизнес-процессами (БП) и роботами. Обязанность инициировать запуск автоматизации возлагается на сам модуль CRM.

  Автозапуск бизнес-процессов

Автоматический запуск выполняется при добавлении или изменении сущности. Любая бизнес-логика, создающая или изменяющая сущность, должна после создания/изменения сущности выполнить следующий код:

$startParameters = []; //BP parameters

\CCrmBizProcHelper::AutoStartWorkflows(
    \CCrmOwnerType::Deal, // \CCrmOwnerType::Lead, ...
    $id,
    $isNew ? \CCrmBizProcEventType::Create : \CCrmBizProcEventType::Edit,
    $errors,
    $startParameters
);

где:

  • $startParameters – значения параметров автоматически запускаемых шаблонов БП (если настроены);
  • $id – идентификатор сущности;
  • $isNew – если сущность только что создана, передаем событие \CCrmBizProcEventType::Create, в остальных случаях передаём \CCrmBizProcEventType::Edit;
  • $errors – переменная будет содержать массив ошибок, если запуск БП прошел неудачно.

  Автозапуск роботов

Алгоритм запуска роботов аналогичен алгоритму запуска бизнес-процессов, однако использует более современный API.

После создания сущности и автозапуска бизнес-процесса необходимо выполнить следующий код:

//Region automation
$starter = new \Bitrix\Crm\Automation\Starter(\CCrmOwnerType::Deal, $id);
$starter->runOnAdd();
//end region

После изменения сущности и автозапуска бизнес-процесса нужно выполнить:

//Region automation
$starter = new \Bitrix\Crm\Automation\Starter(CCrmOwnerType::Deal, $id);
$starter->runOnUpdate($currentFields, $previousFields);
//end region

где:

  • $currentFields – массив текущих значений полей сущности;
  • $previousFields – массив предыдущих значений полей сущности.

Значения полей очень важны для запуска роботов, так как по ним определятся факт смены стадии и анализируются изменения полей (для триггеров Изменены поля и Изменен ответственный).

При этом, если в сущности бизнес-логикой меняется только стадия, то допускается передать только массив текущих полей с новой стадией, а массив предыдущих полей оставить пустым. Но этим можно пользоваться в крайнем случае (если запрос предыдущих значений полей избыточен в Вашем контексте):

//Region automation
$starter = new \Bitrix\Crm\Automation\Starter(CCrmOwnerType::Deal, $id);
$starter->runOnUpdate(['STAGE_ID' => 'NEXT'], []);
//end region

API запуска роботов поддерживает работу с контекстом. Можно указать пользователя, от которого будут запускаться роботы и интерфейс (сайт, мобильное приложение, REST, бизнес-процесс, импорт сущностей).

На данный момент контекст не анализируется ядром БП и не влияет на запуск бизнес-процессов и роботов, но в будущем будет учитываться. Рекомендуем сразу проставлять пользователя и интерфейс, чтобы позже не дописывать код:

$starter = new Bitrix\Crm\Automation\Starter(CCrmOwnerType::Deal, $id);

//Установка пользователя по ID
$starter->setUserId(1);
//Установка текущего пользователя
$starter->setUserIdFromCurrent();

//интерфейс сайта
$starter->setContextToWeb(); // используется по умолчанию, если не установлен другой

//интерфейс мобильного приложения
$starter->setContextToMobile();

//интерфейс REST приложения или Вебхука
$starter->setContextToRest();

//интерфейс БП (Роботы запускаются действиями БП)
$starter->setContextToBizproc();

//интерфейс импорта сущностей
$starter->setContextToImport();

//Запуск из другого модуля
$starter->setContextModuleId('voximplant');

  Пример запуска всей автоматизации (БП+Роботы)

Окончательный вариант запуска всей автоматизации (бизнес-процессы и роботы) с учетом ранее рассмотренных алгоритмов (реальный пример из компонента crm.deal.details):

\CCrmBizProcHelper::AutoStartWorkflows(
    \CCrmOwnerType::Deal,
    $ID,
    $isNew ? \CCrmBizProcEventType::Create : \CCrmBizProcEventType::Edit,
    $arErrors,
    isset($_POST['bizproc_parameters']) ? $_POST['bizproc_parameters'] : null
);

$starter = new \Bitrix\Crm\Automation\Starter(\CCrmOwnerType::Deal, $ID);
$starter->setUserIdFromCurrent();

if($isNew)
{
    $starter->runOnAdd();
}
elseif(is_array($previousFields))
{
    $starter->runOnUpdate($fields, $previousFields);
}



Нам жаль это слышать… Но мы постараемся быть лучше!

Мы благодарны Вам за помощь в улучшении документации.

Спасибо, мы рады что смогли помочь Вам. Ниже Вы можете оставить свой отзыв или пожелание :)
Мы стараемся сделать документацию понятнее и доступнее,
и Ваше мнение важно для нас
Курсы разработаны в компании «1С-Битрикс»