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

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. Все события, прошедшие такой фильтр, попадают в интерфейс.

© «Битрикс», 2001-2024, «1С-Битрикс», 2024