← К заметкам

Заметки

Как читать и обновлять UF-поля через crm.item.*

В универсальном API стандартные поля называются id, title, а пользовательские по умолчанию возвращаются в camelCase. Для работы с исходными кодами UF_CRM_* используйте useOriginalUfNames: 'Y' последовательно во всех запросах.

Обновить существующее строковое поле

В примере код поля демонстрационный. Замените его существующим строковым полем своего типа CRM; сначала запрос проверяет его наличие в схеме.

const entity_type_id = 128;
const item_id = 1001;
const field_name = 'UF_CRM_10_COMMENT';

BX24.callMethod('crm.item.fields', {
    entityTypeId: entity_type_id,
    useOriginalUfNames: 'Y'
}, function (schema_result) {
    if (schema_result.error()) {
        console.error(schema_result.error());
        return;
    }
    const field = schema_result.data().fields[field_name];
    if (!field || field.isReadOnly || field.isMultiple || field.type !== 'string') {
        console.error('Нужно существующее одиночное строковое поле.');
        return;
    }
    BX24.callMethod('crm.item.update', {
        entityTypeId: entity_type_id,
        id: item_id,
        useOriginalUfNames: 'Y',
        fields: { [field_name]: 'Обновлено из REST' }
    }, function (result) {
        if (result.error()) {
            console.error(result.error());
            return;
        }
        console.log(result.data().item[field_name]);
    });
});

Чтение и другие типы

В crm.item.get передавайте тот же useOriginalUfNames и читайте поле из result.data().item. Множественное поле требует массива, список — ID значения, а файл — собственного формата загрузки. Этот пример не универсальный сериализатор полей.

В старой коробке сначала проверьте поддержку параметра. Если её нет, используйте имена, реально возвращённые crm.item.fields, без самостоятельного преобразования регистра.

Источники