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

EventHistory

API


EventHistory - сервис записи истории элемента.

В CRM записывается история действий с элементом (сделкой, предложением, смарт-процессом) - его просмотр, удаление, изменение. Например, в истории может содержаться информация о том, какое поле было отредактировано, его старое и новое значение.

Найти историю можно во вкладке "История" детальной карточки элемента.

Чтобы обеспечить запись истории действий со смарт-процессами и предложениями, был написан сервис \Bitrix\Crm\Service\EventHistory и вспомогательные классы.

Объект класса EventHistory - это сервис, получаемый через контейнер. Его задача состоит в том, чтобы зарегистрировать какое-либо событие, связанное с элементом. Чаще всего это его изменение, просмотр и т.п.

Соответственно, класс имеет семейство публичных методов register*, которые вызываются, чтобы зарегистрировать какое-либо событие. Например, registerUpdate вызывается, чтобы зарегистрировать обновление элемента. Все эти методы возвращают объект \Bitrix\Main\Result, в котором будут находиться ошибки, если что-то пошло не так.

Все методы register* принимают на вход объект класса EventHistory\TrackedObject, который получается через фабрику. EventHistory\TrackedObject подготавливает данные для записи события. Готовые данные передаются в виде объекта EventHistory\EventHistoryData.

Примеры


Зарегистрировать просмотр элемента
use Bitrix\Crm\Service\Container;

$factory = Container::getInstance()->getFactory(\CCrmOwnerType::Quote);

$item = $factory->getItem(1);

$trackedObject = $factory->getTrackedObject($item);

/** @var \Bitrix\Main\Result $result */
$result = Container::getInstance()->getEventHistory()->registerView($trackedObject);

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

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

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

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

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
0
Олег
Для регистрации изменения полей trackedObject обязательно инициализировать с двумя параметрами, иначе будет ошибка получения предыдущих значений объекта.
А также обязательно setTrackedFieldNames, по умолчанию список отслеживаемых полей пустой.
Код
$factory = Service\Container::getInstance()->getFactory(\CCrmOwnerType::Quote);
$item = $factory->getItem(1);

$item->setClosedate('25.02.2022');

$operation = $factory->getUpdateOperation($item);
$result = $operation->launch();

$trackedObject = $factory->getTrackedObject($operation->getItemBeforeSave(),$item);
$trackedObject->setTrackedFieldNames(['CLOSEDATE']);


$result = Container::getInstance()->getEventHistory()->registerUpdate($trackedObject);
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх