Представляю вашему вниманию цикл статей по работе с пока еще мало знакомым многим битрикс-разработчикам инструментом оперирования данными с CRM Битрикс24 через абстрактные фабрики. В первой статье мы рассмотрели базовые операции с элементами сущностей Смарт-процессов — создание, изменение, удаление.

Ознакомиться с первой частью:

Сейчас же рассмотрим прочие операции с элементом и списком элементов Смарт-процессов, а именно:

  1. Получение списка элементов смарт-процесса

  2. Получение данных конкретного элемента смарт-процесса

  3. Добавление связанного контакта к элементу Смарт-процесса

  4. Получение связей с другими сущностями CRM или смарт-процессами через relationManager

Как мы уже разбирали в прошлой статье, для оперирования элементами Смарт-процесса необходимо использовать такого "зверя" как абстрактную фабрику, на которую в последствии перенесут оперирование всем сущностями CRM. С некоторыми работает в экспериментальном режиме уже сейчас.

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

\Bitrix\Main\LoaderLoader::includeModule('crm');
$typeid = '147';//Идентификатор смарт-процесса
$factory = \Bitrix\Crm\ServiceService\Container::getInstance()->getFactory($typeid);

Да, можно вызовы методов сократить через use, но я не делаю этого намеренно, чтобы читающие данную статью проще понимали расположение неймспейсов.

1. Получение элемента смарт процесса

В первом примере разберем способ получения массива данных конкретного элемента смарт-процесса. Как уже указывал выше, считаем что фабрику мы инициализировали и можем выполнять с ней действия. Тогда в простейшем виде вытащить массив данных элемента Смарт-процесса с ID=1 можно следующим способом:

$sourceItemId = 1;//Идентификатор
$item = $factory->getItem($sourceItemId);
print_r($item->getData());

Данный способ предполагает получение объекта конкретного элемента, который как и фабрика содержит свой набор методов, в частности метод getData(), возвращающий массив значение полей элемента. Описание большинства методов, доступных из объекта элемента, можно посмотреть в официальной документации по D7.

А как же быть "счастливым" обладателям облачной версии, где нельзя добавлять свой PHP код в логику, а получить данные элемента Смарт-процесса все таки хочется? Для облака есть специальный Rest метод crm.item.get, который нам в этом поможет.

Пример запроса на получение данных элемента Смарт-процесса из JavaScript:

let item = return BX.ajax.runAction('crm.api.item.get',
            {
                data:
                    {
                        id: entityId,//Идентификатор элемента
                        entityTypeId: entityTypeId//Идентификатор Смарт-процесса
                    }
            });

2. Получение списка элементов Смарт-процесса

Для выполнения данной операции в простейшем виде на нужен будет метод фабрики getItems. Возвращает он такие-же объекты элемента, как в предыдущем разделе, для удобства упакованные в один массив. Пример реализации на PHP для коробочной версии Битрикс24, опять же считаем что фабрику мы уже инициализировали:

 $items = $faсtory->getItems([
'filter' => ['@ID' => $ids],//тут задаем фильтр для выборки, можно по полям элемента
'select' => ['ID', 'UF_CRM_2_FIELD', 'TITLE'],//Какие поля получить, можно указать * если нужны все
'order' => ['UF_CRM_2_FIELD' => 'ASC'],//Указываем поле по которому будет сортироваться выборка и направление сортировки
'limit'=>1000,//Сколько элементов выбрать за запрос
'offset' =>0//С какого элемента по счету начать выборку
        ]);

Далее нам остается пройтись по полученному массиву и таким способом получить объекты для каждого элемента выборки, например с помощью кода из раздела 1 данной статьи.

В RestAPI с получением списка элементов поможет метод crm.item.list.

Пример использования данного метода во front-end:

let items = BX.ajax.runAction('crm.api.item.list',
            {
                data:
                    {
                        entityTypeId: entityTypeId//Идентификатор Смарт-процесса
                    }
            });

Такой запрос получит массив всех элементов указанного смарт-процесса.

3. Добавление связанного контакта к Смарт-процессу

Помимо получение данных об элементе, из объекта элемента также можно получить данные о привязанных контактах. Пример реализации:

$sourceItemId = 1;//Идентификатор
$item = $factory->getItem($sourceItemId);
//Получить текущие связи элемента с контактами
$contactsBind = $item->getContactBindings();
//Результат вернется в том же формате, в котором его отдает метод \Bitrix\Crm\Binding\EntityBinding::prepareEntityBindings()
// добавить связь с контактом с ид = 1
$item->bindContacts(\Bitrix\Crm\Binding\EntityBinding::prepareEntityBindings(\CCrmOwnerType::Contact, [1]));
// удалить связь с контактом с ид = 1
$item->unBindContacts(\Bitrix\Crm\Binding\EntityBinding::prepareEntityBindings(\CCrmOwnerType::Contact, [1]));

Таким образом через встроенные методы объекта элемента мы можем оперировать привязанными контактами смарт-процесса.

4. Работа с прочими связями элемента через relationManager

Так как Смарт-процессы могут связываться не только с контактами, разберем пример получения данных о привязках через relationManager. Это такой специальный объект-сервис, позволяющий совершать действия с API связей между различными сущностями. Подробнее о нем можно почитать в официальной документации по ссылке выше. Пример кода для получения связей определенного элемента Смарт-процесса:

$relationManager = \Bitrix\Crm\Service\Container::getInstance()->getRelationManager();
//Получаем объект идентификатора элемента с помощью идентификатора Смарт-процесса и идентификатора элемента
$itemIdentifier = new \Bitrix\Crm\ItemIdentifier($entityTypeId, $entityId);
//Получаем связанные элементы
$bindedElements =  $relationManager->getElements($itemIdentifier);
//Получаем дочерние элементы
$childElements = $relationManager->getChildElements($itemIdentifier);
//Получаем родительские элементы
$parentElements = $relationManager->getParentElements($itemIdentifier);

Планы на следующие части

В рамках цикла статей по работе со Смарт-процессами через API Битрикс24 коробочной версии планируются еще статьи:

  1. Базовые операции

  2. Работа со списком элемента Смарт-процесса и связями между ними

  3. Как реализовать обработчики события для Смарт-процессов

Ссылки на них будут появляться здесь по мере написания этих статей.

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

Всем спасибо за внимание!

Комментарии (0)