On this page
comment
Работа с комментариями лидов
Примеры работы с комментариями лидов в Битрикс24: перенос, получение и создание.
Перенос всех комментариев из одного лида в другой
Этот PHP-код позволяет перенести все комментарии из одного лида в другой в Битрикс24.
use Bitrix\Crm\Timeline\Entity\TimelineBindingTable;
use Bitrix\Crm\Timeline\TimelineType;
$entityTypeID = CCrmOwnerType::Lead; // Тип сущности (например, лид)
$oldEntityID = {{LeadID}}; // Текущий ID сущности (лида)
$newEntityID = {{LeadID}}; // Новый ID сущности (лида)
TimelineBindingTable::rebind($entityTypeID, $oldEntityID, $newEntityID, [TimelineType::COMMENT]);
Получение всех комментариев таймлайна по исходному лиду и создание их в целевом лиде
Данный скрипт позволяет получить все комментарии из таймлайна одного лида и создать их в другом целевом лиде.
use Bitrix\Crm\Timeline\CommentEntry;
use Bitrix\Crm\Timeline\Entity\TimelineBindingTable;
use Bitrix\Crm\Timeline\Entity\TimelineTable;
\Bitrix\Main\Loader::includeModule('crm');
$sourceLeadId = $this->GetRootActivity()->GetVariable("SourceLeadID");
$targetLeadId = $this->GetRootActivity()->GetVariable("TargetLeadID");
$authorId = $this->GetRootActivity()->GetVariable("AuthorID");
$commentsTransferredCount = 0;
$transferStatus = true;
$errorMessage = '';
if (!$sourceLeadId || !$targetLeadId || !$authorId) {
$errorMessage = "КРИТИЧНО: Не все обязательные параметры для переноса комментариев указаны.";
$this->WriteToTrackingService($errorMessage);
$transferStatus = false;
} else {
$obTimeLineEntity = TimelineTable::getList([
'order' => ['CREATED' => 'ASC'], // Сортируем по возрастанию, чтобы сохранить порядок
'filter' => [
'BINDINGS.ENTITY_TYPE_ID' => \CCrmOwnerType::Lead,
'BINDINGS.ENTITY_ID' => $sourceLeadId,
'!COMMENT' => false,
],
'select' => ['*'],
]);
$commentData = [];
while ($arFields = $obTimeLineEntity->fetch()) {
if (!empty($arFields['COMMENT'])) {
$commentData[] = $arFields;
}
}
foreach ($commentData as $comment) {
$commentFields = [
'TEXT' => $comment['COMMENT'],
'AUTHOR_ID' => $authorId,
'BINDINGS' => [
[
'ENTITY_TYPE_ID' => \CCrmOwnerType::Lead,
'ENTITY_ID' => $targetLeadId,
],
],
];
$result = CommentEntry::create($commentFields);
if ($result->isSuccess()) {
$commentsTransferredCount++;
} else {
$transferStatus = false;
$this->WriteToTrackingService("ОШИБКА: Не удалось создать комментарий. " . implode(', ', $result->getErrorMessages()));
}
}
}
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("CommentsTransferredCount", $commentsTransferredCount);
$rootActivity->SetVariable("CommentsTransferStatus", $transferStatus);
$rootActivity->SetVariable("CommentsTransferErrorMessage", $errorMessage);
Получение всех комментариев таймлайна по лиду
Этот PHP-код позволяет получить все комментарии из таймлайна указанного лида.
use Bitrix\Crm\Timeline\Entity\TimelineTable;
\Bitrix\Main\Loader::includeModule('crm');
$leadId = $this->GetRootActivity()->GetVariable("LeadID");
$foundCommentsCount = 0;
$commentIDs = [];
$errorMessage = '';
if (!$leadId) {
$errorMessage = "КРИТИЧНО: Не указан ID лида для получения комментариев.";
$this->WriteToTrackingService($errorMessage);
} else {
$obTimeLineEntity = TimelineTable::getList([
'order' => ['CREATED' => 'DESC'],
'filter' => [
'BINDINGS.ENTITY_TYPE_ID' => \CCrmOwnerType::Lead,
'BINDINGS.ENTITY_ID' => $leadId,
'!COMMENT' => false,
],
'select' => ['ID'],
]);
while ($arFields = $obTimeLineEntity->fetch()) {
$commentIDs[] = $arFields['ID'];
}
$foundCommentsCount = count($commentIDs);
}
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("FoundCommentsCount", $foundCommentsCount);
$rootActivity->SetVariable("CommentIDs", implode(",", $commentIDs));
$rootActivity->SetVariable("CommentSearchErrorMessage", $errorMessage);
Присоединяйтесь к нашему Telegram-каналу для получения актуальных новостей и поддержки: https://t.me/+ACzHjl0ZO585OTky