@Anton_98

Как в Битрикс24 (коробка)сохранение данных в HightBlock?

Добрый день!

Подскажите, как в Битрикс24 (коробка)сохранение данных в HightBlock об изменении каждого элемента CRM (Лид, Сделка, Компания)?

Создал HL-блоки с полями:
USER_ID - Привязка к пользователям (. хранит Пользователь который сделал изменения ),
ENTITY_ID- Строка (хранит: Хранит тип сущности. Например: CRM_LEAD, CRM_CONTACT и т.д )
ELEMENT_ID - Число (хранит: ID исправляемого элемента )
CHANGE_LOG - Текст (хранит: Хранит перечень всех полей которые были исправлены в формате JSON строки )
DATE- Текст (хранит: Дата внесение изменений )

Создал событие в local/php_interface/init.php

use Bitrix\Main\Loader;
Loader::includeModule("highloadblock");
use Bitrix\Highloadblock as HL;
use Bitrix\Main\Entity;

AddEventHandler("crm", "OnAfterCrmLeadUpdate", "SaveLeadEventToHlBlock");
function SaveLeadEventToHlBlock(&$arFields)
{
    global $USER;
    $hlbl = 2; // Указываем ID нашего highloadblock блока к которому будет делать запросы.
    $hlblock = HL\HighloadBlockTable::getById($hlbl)->fetch();
    $entity = HL\HighloadBlockTable::compileEntity($hlblock);
    $entity_data_class = $entity->getDataClass();
    var_dump($arFields);
// Массив полей для добавления
    $data = array(
        "UF_USER_ID" => $USER->GetID(),
        "UF_ENTITY_ID" => '33',
        "UF_ELEMENT_ID" => '1',
        "UF_CHANGE_LOG" => 'JSON',
        "UF_DATE" => date("d.m.Y H:i:s")
    );

    $result = $entity_data_class::add($data);
}


DATE и USER_ID я получаю и созраняю, вот как сохранить туда данные ENTITY_ID, ELEMENT_ID и CHANGE_LOG не пойму
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ответы на вопрос 1
По хорошему это всё должно быть в классе и на d7, но развивая ваш пример вот.

Быстрая реализация через говнокод =)

AddEventHandler("crm", "OnAfterCrmLeadUpdate", "saveLeadEventToHlBlock");
AddEventHandler("crm", "OnAfterCrmDealUpdate", "saveDealEventToHlBlock");
AddEventHandler("crm", "OnAfterCrmContactUpdate", "saveContactEventToHlBlock");

function saveLeadEventToHlBlock(&$arFields){
         saveChangeCrmEntity('CRM_LEAD',  $arFields);
}

function saveDealEventToHlBlock(&$arFields){
         saveChangeCrmEntity('CRM_DEAL',  $arFields);
}

function saveContactEventToHlBlock(&$arFields){
         saveChangeCrmEntity('CRM_CONTACT',  $arFields);
}


function saveChangeCrmEntity(string $entityType,  array $fields)
{
    global $USER;
    $hlbl = 2; 
    $hlblock = HL\HighloadBlockTable::getById($hlbl)->fetch();
    $entity = HL\HighloadBlockTable::compileEntity($hlblock);
    $entity_data_class = $entity->getDataClass();

    $data = array(
        "UF_USER_ID" => $USER->GetID(),
        "UF_ENTITY_ID" =>  $entityType,
        "UF_ELEMENT_ID" =>  $fields['ID'],
        "UF_CHANGE_LOG" => \Bitrix\Main\Web\Json::encode($fields),
        "UF_DATE" => date("d.m.Y H:i:s")
    );

    $result = $entity_data_class::add($data);
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы