Полный цикл в digital

Работа со Смарт Процессами в модуле CRM Битрикс24

Все взаимодействие с новым API в модуле CRM и смарт-процессами в частности осуществляется посредством взаимодействия с сервисами из контейнера \Bitrix\Crm\Service\Container. Это означает что перед выполнением любой операции необходимо:

  1. Получить контейнер
  2. Достать из контейнера нужный сервис
  3. Выполнить нужное действие

В некоторых случаях можно обойтись без контейнеров, но использование их строго рекомендовано, чтобы обеспечивать возможность наследования и переопределения действий.

Пример получения контейнера для дальнейшей работы:

\Bitrix\Main\Loader::IncludeModule('crm');

// получаем контейнер
$container = \Bitrix\Crm\Service\Container::getInstance();

Получить зарегистрированные Смарт Процессы

Для получения списка смарт-процессов необходимо сначала получить название таблета, с которым можно работать, дальше работа строится как и с любым другим DataManager объектом:

\Bitrix\Main\Loader::IncludeModule('crm');

// получаем контейнер
$container = \Bitrix\Crm\Service\Container::getInstance();

// получаем пространство имен Bitrix\Crm\Model\Dynamic\TypeTable
$typeDataClass = $container->getDynamicTypeDataClass();

// запрос в базу
$listDynamicTypes = $typeDataClass::getList([
    'select' => ['*']
]);

// получаем все смарт процессы
var_dump($listDynamicTypes->fetchAll());

Создание и редактирование процесса

При работе с ORM нет отдельных операций на создание и редактирование процесса, вместо этого все это определяется единым методом сохранения и обновлением сопутствующей информации.

Ход сохранения смарт-процесса:

  1. Получение объекта \Bitrix\Crm\Model\Dynamic\Type
  2. Изменение полей, сохранение смарт-процесса
  3. Сохранение конверсионной схемы
  4. Обновление разрешений для пользовательских полей
  5. Обновление связей
  6. Обновление раздела, если выводится в собственном разделе

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

\Bitrix\Main\Loader::IncludeModule('crm');

// получаем контейнер
$container = \Bitrix\Crm\Service\Container::getInstance();

// получаем пространство имен Bitrix\Crm\Model\Dynamic\TypeTable
$typeDataClass = $container->getDynamicTypeDataClass();

// получаем объект \Bitrix\Crm\Model\Dynamic\Type для создания нового Смарт Процесса
$type = $typeDataClass::createObject();

// устанавливаем заголовок
$type->set('TITLE', 'NDA')
// устанавливаем название на латиницы
->set('NAME', 'NDA')
// устанавливаем символьный код
->set('CODE', 'NDA')
// устанавливаем флаг, разрешающий использование пользовательских полей
->set('IS_USE_IN_USERFIELD_ENABLED', 'Y');

// сохраняем Смарт Процесс
$result = $type->save();

// проверка на успешность создания Смарт Процесса
if (!$result->isSuccess()) {
    /**
     * Get error \Bitrix\Main\Error[] $result->getErrors()
     * Get error messages string[] $result->getErrorMessages()
     */
    return false;
}

// получим строковый идентификатор типа Смарт Процесса
$entityTypeName = \CCrmOwnerType::ResolveName($type->getEntityTypeId());

// набор полей у которых мы обновим статус
$settings = [
    // поля связанные с задачей
    'TASKS_TASK|UF_CRM_TASK' => 'true',
    // поля связанные с шаблоном задачи
    //'TASKS_TASK_TEMPLATE|UF_CRM_TAS'  => 'true',
    // поля связанные с событием календаря
    //'CALENDAR_EVENT|UF_CRM_CAL_EVENT' => 'true',
];

// получим массив пользовательских полей, которые связаны с полями CRM в других модулях
$userFieldsMap = \Bitrix\Crm\UserField\UserFieldManager::getLinkedUserFieldsMap();

foreach ($settings as $name => $isEnabled) {
    if (isset($userFieldsMap[$name])) {
        // сохраняет новый статус сущности с именем $entityTypeName в настройках пользовательского поля $userFieldsMap в базе данных
        \Bitrix\Crm\UserField\UserFieldManager::enableEntityInUserField(
            $userFieldsMap[$name],
            $entityTypeName,
            $isEnabled === 'true'
        );
    }
}

Удаление процесса

Удаление смарт-процесса мало чем отличается от удаления объекта ORM.

Ход сохранения смарт-процесса:

  1. Получить объект процесса
  2. Вызвать метод удаления
\Bitrix\Main\Loader::IncludeModule('crm');

// получаем контейнер
$container = \Bitrix\Crm\Service\Container::getInstance();

// получаем пространство имен Bitrix\Crm\Model\Dynamic\TypeTable
$typeDataClass = $container->getDynamicTypeDataClass();

// запрос в базу с получением одного объекта
$type = $typeDataClass::getList([
    'select' => ['*'],
    // фильтруем по ID смарт процесса
    'filter' => ['=ID' => 7],
])->fetchObject();

// удаляем Смарт Процесс
$result = $type->delete();

// проверка на успешность удаления Смарт Процесса
if (!$result->isSuccess()) {
    /**
     * Get error \Bitrix\Main\Error[] $result->getErrors()
     * Get error messages string[] $result->getErrorMessages()
     */
    return false;
}

Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!