TimelineEntry
CRUD операции с событиями таймлайна осуществляются через \Bitrix\Crm\TimelineEntry
. При этом, для каждого типа события существует свой наследник, реализующий метод create
. Добавление новых событий осуществляется именно через него.
В рамках работы над таймлайном смарт-процессов был написан сервис \Bitrix\Crm\TimelineEntry\Facade
, позволяющий через единую точку входа создавать различные типы событий. А факт того, что это сервис, облегчает
тестирование кода и дает возможность мокать необходимое поведение.
Внутреннее устройство
Важно! Данный блок написан исключительно с информационной целью. Пожалуйста, не используйте таблеты в явном виде. Этим вы нарушаете инкапсуляцию и усложняете сопровождение кода!
Данные о событиях таймлайна хранятся в трех таблицах:
-
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
. -
b_crm_timeline_bind (
\Bitrix\Crm\Timeline\Entity\TimelineBindingTable
) - хранит данные о том, в таймлайнах каких сущностей необходимо отобразить событие. Имеет связь "один ко многим" сb_crm_timeline
. Соответственно, одно и то же событие может быть отражено в нескольких таймлайнах одновременно. -
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
. Все события, прошедшие такой фильтр, попадают в интерфейс.
Сообщение не промодерировано, возможны ошибки и неточности.
|
Получение комментария сделки из сделки таймлайна
\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>'; } |
Сообщение не промодерировано, возможны ошибки и неточности.
|
||
Добавление комментария с приложенным файлом с Диска.
| ||
Сообщение не промодерировано, возможны ошибки и неточности.
|
||
Как получить все комментарий из сделки?
| ||
Сообщение не промодерировано, возможны ошибки и неточности.
|
||
Почему подобного примера нет в документации??
Пример того, как можно сделать запись в timeline (таймлайн). Кейс: поменялось какое либо кастомное поле в карточке сущности и мы хотим записать это в таймлайн
| ||
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.