Добрый день.
Поступила задача заполнять список значений поля смарт-процесса из 1С через веб-хук, так как толком нет информации, то вот мой вариант. На infostart.ru это моя первая статья, прошу сильно не пинать.
В Битриксе есть функция "userfieldconfig.update", которая обновляет пользовательское поле смарт-процесса, особенность в том, что если поле имеет тип список, то добавить значение нелья, можно только заменить массив, где параметр "field?userTypeId=enumeration" обязателен. Параметр "enum" массив значений с лимитом 460 записей. Для создания нового значения достаточно указать значение(value), для обновления надо указать ID и новое значение(value).
Для получения ID пользовательского поля использовал функцию "userfieldconfig.list" со значением" crm" в параметре "moduleId".
https://Адрес/rest/НомерРест/ТипоТокен/userfieldconfig.list?moduleId=crm
Далее выявил ID поля, у меня это 942.
Формат передачи через адресную строку:
https://Адрес/rest/НомерРест/ТипоТокен/userfieldconfig.get?id=942&moduleId=crm&field?userTypeId=enumeration&enum[0][value]=тест
в 1С это выглядит так:
НомерСТроки = 0;
СтрокаПараметров = "id="+ИДСписка+"&moduleId=crm&field[userTypeId]=enumeration";
Для Каждого СтрокаТЗ из ТЗ ЦИКЛ
//Если у нас есть ID то обновляем значение
Если ЗначениеЗаполнено(СтрокаТЗ.IDBitriex24) тогда
СтрокаПараметров = СтрокаПараметров +"&field[enum]["+Формат(НомерСТроки,"ЧГ=0")+"][id]="+СокрЛП(СтрокаТЗ.IDBitriex24);
КонецЕсли;
СтрокаПараметров = СтрокаПараметров +"&field[enum]["+Формат(НомерСТроки,"ЧГ=0")+"][value]="+СокрЛП(СтрокаТЗ.Наименование);
НомерСТроки=НомерСТроки+1;
// Проверка на лимит записей.
Если НомерСТроки = 460 тогда
Прервать;
КонецЕсли;
КонецЦИкла;
// 1С "0" добвляет как ""
СтрокаПараметров = СтрЗАменить(СтрокаПараметров,"[]","[0]");
AccessToken = "";
Сервер = "";
ИдХука = "";
АдресБитрикс24 = "/rest/"+ ИдХука+ "/" + AccessToken + "/" ;
SSL = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows());
Соединение = Новый HTTPСоединение(Сервер+АдресБитрикс24,,,,, 0, SSL);
RESTЗапрос ="userfieldconfig.update";
Заголовки = Новый Соответствие;
Запрос = Новый HTTPЗапрос(RESTЗапрос + "?" , Заголовки);
Запрос.УстановитьТелоИзСтроки( СтрокаПараметров);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
// Модуль добавления ID в базу
Использую метод POST, так как количество передаваемых символов больше 2000.
Особенности функции "userfieldconfig.update" - некоторые символы заменяет на пробелы, к примеру, строку "Тест+1" запишет как "Тест 1", также если есть одинаковые значение "value", обновления не произойдёт, и код ответа будет 200.
Обработка выгрузит выбранный справочник в список значений пользовательского поля. При добавлении в 1С реквизита справочника IDBitriex24 будет выполнено обновление значения. Кода записи и сопоставления полученного ID в 1С нет.