23  /  48

Встраивание приложений в виде пользовательских типов полей

Просмотров: 34204
Дата последнего изменения: 06.04.2022
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
1
2
3
4
5

Создание типа поля и поля

Зарегистрируйте тип поля.

Создайте пользовательское поле вручную либо, через API. Например, для Лидов CRM используется crm.lead.userfield.add.

Обработка данных во фрейме

Когда открывается форма, допустим, карточка лида в CRM, в которой выводится поле нашего пользовательского типа, то в карточке, фактически, выводится фрейм с приложением. В этот фрейм передаются все данные о поле, значении и режиме работы. Для приложения все выглядит так, как если бы оно было открыто в месте встройки с идентификатором USERFIELD_TYPE.

Вот пример POST-данных, пришедших в фрейм:

Array
(
    [DOMAIN] => sometestportal.bitrix24.com
    [PROTOCOL] => 1
    [LANG] => ru
    [APP_SID] => 14d2c95b446cb049375e4a045dc2a177
    [AUTH_ID] => xomlj71xez3p4q8bqsb5icqjcgjetf0p
    [AUTH_EXPIRES] => 3600
    [REFRESH_ID] => 51556ja184k22cqot442w0lp1quxg0p2
    [member_id] => 6f61b5484aff6f8aa3fef768153d0226
    [status] => L
    [PLACEMENT] => USERFIELD_TYPE
    [PLACEMENT_OPTIONS] => {"MODE":"view","ENTITY_ID":"CRM_LEAD","FIELD_NAME":"UF_CRM_1511508634350","ENTITY_VALUE_ID":"2","VALUE":["\u0435\u0445\u0430\u043b \u0433\u0440\u0435\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u043a\u0443","\u0432\u0438\u0434\u0438\u0442 \u0433\u0440\u0435\u043a\u0430 \u0432 \u0440\u0435\u043a\u0435 \u0440\u0430\u043a","c\u0443\u043d\u0443\u043b \u0433\u0440\u0435\u043a\u0430 \u0440\u0443\u043a\u0443 \u0432 \u0440\u0435\u043a\u0443","\u0440\u0430\u043a \u0437\u0430 \u0440\u0443\u043a\u0443 \u0433\u0440\u0435\u043a\u0430 \u0446\u0430\u043f"],"MULTIPLE":"Y","MANDATORY":"N","XML_ID":null}
)

Детально разберём json-строку PLACEMENT_OPTIONS:

Array
(
    [MODE] => view
    [ENTITY_ID] => CRM_LEAD
    [FIELD_NAME] => UF_CRM_1511508634350
    [ENTITY_VALUE_ID] => 2
    [VALUE] => Array
        (
            [0] => ехал грека через реку
            [1] => видит грека в реке рак
            [2] => cунул грека руку в реку
            [3] => рак за руку грека цап
        )

    [MULTIPLE] => Y
    [MANDATORY] => N
    [XML_ID] => 
)

Ключи:

Ключ Описание
MODE Режим, в котором вызвано поле. Значения: view - просмотр, edit - редактирование
ENTITY_ID Идентификатор сущности, к которой привязано поле
FIELD_NAME Идентификатор пользовательского поля
ENTITY_VALUE_ID Идентификатор элемента сущности, значение поля которого редактируется
VALUE Текущее значение поля. Для множественного поля массив значений.
MULTIPLE Флаг множественности поля
MANDATORY Флаг обязательности поля
XML_ID Внешний код поля

js-интерфейс

Для поля также доступен js-интерфейс получения и установки значения:

Вызов метода:

BX24.placement.call('getValue', function(value){console.log(value)});

Результат выполнения метода:

["ехал грека через реку", "видит грека в реке рак", "cунул грека руку в реку", "рак за руку греку цап"]

Вызов метода:

BX24.placement.call('setValue', ["ехал грека через реку", "видит грека в реке рак", "cунул грека руку в реку", "рак за руку греку цап"], function(){console.log('value set')});

Результат выполнения метода:

value set

Нужно учитывать, что js-интерфейс служит исключительно для передачи данных в форму. Пока форма тем или иным способом не будет сохранена пользователем, значение в базу не попадет.

Демо-приложение

Демо-приложение, которое регистрирует обычное текстовое поле со своим интерфейсом ввода и вывода. Скачать


9
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии