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

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

Немного о веб-технологиях

Мой блог содержит заметки о различных веб-технологиях, как клиентских, так и серверных. Здесь будут раскрыты вопросы html-верстки, программирования на javaScript и jQuery,разработки на PHP. Не останутся без внимания популярные системы управления сайтом «1С-Битрикс», Joomla и другие. О работе с ними, я также буду писать.

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

В своем блоге я собираюсь публиковать статьи о современных веб-технологиях (HTML5, CSS3 и других). Если в процессе работы над проектами я открываю для себя «свежее» решение какой-либо задачи, я записываю сюда информацию об этом, что позволяет мне при необходимости применять полученные знания в будущем.

Надеюсь информация будет полезна для посетителей.

 
Суббота, 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 (например, контактов), вы можете создать скрипт на основе приведенного примера из статьи.

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

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

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


Свежие заметки
Наверх