Документация для разработчиков
Темная тема

TimelineEntry

CRUD операции с событиями таймлайна осуществляются через \Bitrix\Crm\TimelineEntry. При этом, для каждого типа события существует свой наследник, реализующий метод create. Добавление новых событий осуществляется именно через него.

В рамках работы над таймлайном смарт-процессов был написан сервис \Bitrix\Crm\TimelineEntry\Facade, позволяющий через единую точку входа создавать различные типы событий. А факт того, что это сервис, облегчает тестирование кода и дает возможность мокать необходимое поведение.

Внутреннее устройство

Важно! Данный блок написан исключительно с информационной целью. Пожалуйста, не используйте таблеты в явном виде. Этим вы нарушаете инкапсуляцию и усложняете сопровождение кода!

Данные о событиях таймлайна хранятся в трех таблицах:


  1. b_crm_timeline (\Bitrix\Crm\Timeline\Entity\TimelineTable) - хранит основную часть данных (тип события, автор, описание и т.д.).

    Поля ASSOCIATED_ENTITY_TYPE_ID и ASSOCIATED_ENTITY_ID описывают, про какой элемент идет речь в событии. Если был создан или изменен элемент, то здесь будет указание на этот элемент. Если было создано дело (Activity), то здесь будет указание на дело.

    Поле TYPE_ID указывает на тип события. Здесь хранятся константы класса \Bitrix\Crm\Timeline\TimelineType. Обычно каждый тип события имеет собственную константу, но тем не менее несколько событий могут иметь одно и то же значение. Например, многие типы "дел" (Activity) имеют один и тот же TYPE_ID = TimelineType::ACTIVITY.


  2. b_crm_timeline_bind (\Bitrix\Crm\Timeline\Entity\TimelineBindingTable) - хранит данные о том, в таймлайнах каких сущностей необходимо отобразить событие. Имеет связь "один ко многим" с b_crm_timeline. Соответственно, одно и то же событие может быть отражено в нескольких таймлайнах одновременно.

  3. b_crm_timeline_search (\Bitrix\Crm\Timeline\Entity\TimelineSearchTable) - хранит полнотекстовый индекс для поиска по событиям.

Когда в компоненте crm.timeline происходит выборка событий, которые нужно отрисовать в таймлайне элемента с конкретными entityTypeId и entityId, осуществляется фильтрация по b_crm_timeline_bind.ENTITY_TYPE_ID = entityTypeId AND b_crm_timeline_bind.ENTITY_ID = entityId. Все события, прошедшие такой фильтр, попадают в интерфейс.

Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
1
Константин Савин
Сообщение не промодерировано, возможны ошибки и неточности.
Получение комментария сделки из сделки таймлайна
\Bitrix\Main\Loader::includeModule('crm');
$rs = Bitrix\Crm\Timeline\Entity\TimelineTable::getList(array(
 'order' => array("ID" => "DESC"),
'select'=>array("ID", "COMMENT", "TYPE_ID", "AUTHOR_ID", "BINDINGS"),
'filter' => ['TYPE_ID' => 7,'CRM_TIMELINE_ENTITY_TIMELINE_BINDINGS_ENTITY_ID' => '16'],
));
while($ar = $rs->Fetch())
{
  echo '<pre>';
  print_r($ar);
  echo '</pre>';
}
1
Вадим Абрамов
Сообщение не промодерировано, возможны ошибки и неточности.
Добавление комментария с приложенным файлом с Диска.
Код
$arrComment=[
   'TEXT' => "Документы сделки,
   'SETTINGS' => array('HAS_FILES' => 'Y'),
   'AUTHOR_ID' => 1,                   
   'BINDINGS' => [['ENTITY_TYPE_ID' => \CCrmOwnerType::Deal, 'ENTITY_ID' => $arDeal['ID']]],            
   'FILES' => ['n467346'], //ID файла на Диске
];               
$comment_id=\Bitrix\Crm\Timeline\CommentEntry::create($arrComment);
0
Almat Zhandauletov
Сообщение не промодерировано, возможны ошибки и неточности.
Как получить все комментарий из сделки?
Код
public function getComments(int $id): array
{
    $result = TimelineTable::getList(
        ['select' => ['CREATED', 'COMMENT'],
            'filter' => [
                'TYPE_ID' => TimelineType::COMMENT,
                'BINDINGS.ENTITY_ID' => $id],
        ]);

    return $result->fetchAll();
}
$id - ИД сделки
4
Алексей Мельников
Сообщение не промодерировано, возможны ошибки и неточности.
Почему подобного примера нет в документации?? :cry:

Пример того, как можно сделать запись в timeline (таймлайн). Кейс: поменялось какое либо кастомное поле в карточке сущности и мы хотим записать это в таймлайн
Код
// Делаем запись в таймлайне
// \CCrmOwnerType::Quote - список констант находится здесь /bitrix/modules/crm/classes/general/crm_owner_type.php

$resId = \Bitrix\Crm\Timeline\ModificationEntry::create(
array(
   'ENTITY_TYPE_ID' => \CCrmOwnerType::Quote,
   'ENTITY_ID' => $arResult['ID'],  // ID компании, к которой применится запись
   'SETTINGS' => array(
      'FIELD' => 'Мое название поля',  // Можно вписать любое название, получится заголовок вида "Значение поля "Мое название поля" изменено"
      'START_NAME' => 'Какое значение было',  // Это поле можно оставить пустым, если хотим чтобы была такая запись в описании под заголовком: "Какое значение стало", а не: "Какое значение было" -> "Какое значение стало"
      'FINISH_NAME' => 'Какое значение стало',
   ),
   'AUTHOR_ID' => $arResult['ASSIGNED_BY_ID'], //ID пользователя, от которого будет добавлена запись в таймлайн
   'BINDINGS' => array(array('ENTITY_TYPE_ID' => CCrmOwnerType::Company, 'ENTITY_ID' => $arResult['ID']))
));
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх