23  /  48

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

Просмотров: 43198
Дата последнего изменения: 21.12.2023
Сложность урока:
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С-Битрикс»

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