Удаление событий, связанных с определённым элементом CRM, таким как лид, сделка, контакт или компания
Для удаления событий, связанных с определённым элементом CRM используется метод CCrmEvent::DeleteByElement($entityTypeName, $entityID)
Примеры использования метода CCrmEvent::DeleteByElement
1. Удаление событий у Лида
<?php
$elementType = CCrmOwnerType::Lead;
$elementId = 123; // ID Лида
CCrmEvent::DeleteByElement($elementType, $elementId);
2. Удаление событий у Сделки
<?php
$elementType = CCrmOwnerType::Deal;
$elementId = 123; // ID Сделки
CCrmEvent::DeleteByElement($elementType, $elementId);
3. Удаление событий у Контакта
<?php
$elementType = CCrmOwnerType::Contact;
$elementId = 123; // ID Контакта
CCrmEvent::DeleteByElement($elementType, $elementId);
3. Удаление событий у Компании
<?php
$elementType = CCrmOwnerType::Company;
$elementId = 123; // ID Компании
CCrmEvent::DeleteByElement($elementType, $elementId);
Очистка истории событий сделок, контактов, лидов, компаний
Для того чтобы очистить историю событий в лидах, контактах, сделках, компаниях можно воспользоваться методом CCrmEvent::Delete($ID, $arOptions = array())
В качестве аргумента $ID используется не идентификатор события, а идентификатор записи из таблицы b_crm_event_relations. В этой таблице содержаться записи связывающие конкретное событие и сущность (лид, сделка, контакт, компания), к которой относится событие.
В качестве примера, очистим 50 000 записей ( limit = 50000 ) в таблице событий (b_crm_event) старше 01.01.2023:
PS: используйте ограничение в кол-ве записей, чтобы скрипт не падал по памяти
<?php
use Bitrix\Crm\EventRelationsTable;
use Bitrix\Crm\EventTable;
\Bitrix\Main\Loader::includeModule('crm');
$arEvents = EventTable::GetList([
'order' => ['ID' => 'ASC'],
'filter' => [
'<DATE_CREATE' => '01.01.2023 00:00:00'
],
'select' => [
'ID',
'DATE_CREATE'
],
'limit' => 50000
])->fetchCollection();
$idList = $arEvents->getIdList();
if(count($idList) < 1) {
die();
}
$relations = EventRelationsTable::getList([
'filter' => [
'EVENT_ID' => $idList
],
'select' => [
'ID'
]
])->fetchCollection();
$idRelationList = $relations->getIdList();
foreach ($idRelationList as $id) {
(new CCrmEvent())->Delete((int)$id, ['CURRENT_USER' => 1]);
}