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

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

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

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

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

Один из наших клиентов поставил следующую задачу: нужно чтобы в ленте событий карточки компании 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 (например, контактов), вы можете создать скрипт на основе приведенного примера из статьи.

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

Прочитано 22317 раз
Мои услуги

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

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

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

Скачать

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

Наверх