Матвей Земсков

Заметки веб-мастера

Суббота, 20 марта 2021 23:58

Битрикс CRM - работаем с комментариями в Timeline через API

Оцените материал
(0 голосов)

Один из наших клиентов поставил следующую задачу: нужно чтобы в ленте событий карточки компании CRM был постоянно закреплен комментарий с определенной информацией. Компаний в которые нужно было добавить и закрепить комментарии было немало (несколько сотен). Информация о них по нашей просьбе была предоставлена в виде csv-файла, в котором содержались наименование и идентификаторы сущностей в Б24, а также содержимое комментария.

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

В процессе решения задачи был создан скрипт. Алгоритм его работы следующий:

• Сначала открываем csv-файл и обходим в цикле все строки, содержащиеся в нем. Получаем данные из каждой строки с помощью функции fgetcsv().

• В массиве, который возвращает fgetcsv(), в элементе с индексом 0 хранится идентификатор компании в Б24. Сохраним его в переменную ($id)

• Для добавления комментария нам нужно знать ответственного за компанию (поле ASSIGNED_BY_ID). Получаем эти данные с помощью CCrmCompany::GetListEx() и сохраняем в переменную $assignedByID

• Далее создаем комментарий:

PHP

		$resId = \Bitrix\Crm\Timeline\CommentEntry::create(
			array(
				'TEXT' => $data[2],
				'SETTINGS' => array(), 
				'AUTHOR_ID' => $assignedByID, //ID пользователя, от которого будет добавлен комментарий
				'BINDINGS' => array(array('ENTITY_TYPE_ID' => CCrmOwnerType::Company, 'ENTITY_ID' => $id))
		)); 

В этом коде нужно обратить внимание на параметр BINDINGS. В нем указывается привязка комментария к сущности. Значение 'ENTITY_TYPE_ID' указывает на тип сущности. Оно хранится в классе CCrmOwnerType. Кроме Company в классе существуют следующие константы Contact, Lead, Deal, Invoice, Activity, Quote, Requisite, DealCategory, CustomActivityType.

• Для закрепления комментария используем метод update класса Bitrix\Crm\Timeline\Entity\TimelineBindingTable:

PHP

$resultUpdating = Bitrix\Crm\Timeline\Entity\TimelineBindingTable::update(
                  array('OWNER_ID' => $resId, 'ENTITY_ID' => $id, 'ENTITY_TYPE_ID' => CCrmOwnerType::Company),
                  array('IS_FIXED' => 'Y')
                  );

• Результат изменений можно получить следующим образом:

PHP

$affected = $resultUpdating->getAffectedRowsCount();

Если все прошло успешно, то значение $affected будет больше 0.

На всякий я решил сохранить идентификаторы компаний и созданных комментариев в файл. На случай если нужно будет их открепить или вообще удалить. Для этого в начале скрипта создал пустой массив $arResult. В нем сохранял информацию о каждом комментарии также в виде массивов:

PHP

$arResult[$i] = Array('COMMENT_ID'=>$resId, 'COMPANY_ID'=>$id);

И поместил в PHP-файл:

PHP

$arrResTxt = "<?\r\n";
$arrResTxt .= 'return '.var_export($arResult, true).';';
file_put_contents('arr_comments_fixed.php', $arrResTxt);

При необходимости вы можете использовать этот массив в любом скрипте подключив его следующим способом:

PHP

$arrayFromFile = require('arr_comments_fixed.php'); 

Если у вам нужно добавить и закрепить комментарии в таймлане других сущностей CRM (например, контактов), вы можете создать скрипт на основе приведенного примера из статьи.

Скачать пример кода из статьи

Прочитано 266 раз

Добавить комментарий


Мои услуги

Предлагаю следующие услуги:

  • Верстка шаблона сайта из дизайн-макета для CMS «1С-Битрикс Управление сайтом» и CMS “Joomla”
  • Создание форм различной сложности (обратная связь, анкеты и тп) для указанных CMS
  • Настройка и кастомизация компонентов и модулей для указанных CMS
  • Доработка модулей и компонентов для указанных CMS, добавление нестандартного функционала
  • Разработка лендингов (landing-pages)

По все вопросам обращайтесь через форму обратной связи

Скачать

Предлагаю вашему вниманию:

Наверх