Lead field (crm.lead.fields) - Возвращает описание полей лида, в том числе пользовательских.
Продолжаем разработку модуля интеграции с Битрикс24 и в данном уроке мы получим список полей сущности lead (лиды).
Этот функционал понадобится нам для выполнения обмена лидами между 1С и Битрикс24.
Ссылка на документацию (crm.lead.fields).
Для тех кто любит смотреть, видео в конце статьи. Скачать готовое расширение для 1С:Бухгалтерия вы можете по ссылке ниже. Версия расширения которое мы используем в данном уроке 1.0.1.
Первую часть вы можете почитать здесь — 1С БИТРИКС 24. ИНТЕГРАЦИЯ 1С И БИТРИКС 24. АВТОРИЗАЦИЯ
[/member]
Перед началом курса пройдите регистрацию и создайте свой Битрикс24.
Для начала добавим новое перечисление.
Перейдем к обработке администрирования и доработаем ее. Так как функция получения полей будет универсальной, то привязываться к конкретной сущности мы не будем и добавим новые реквизиты для универсального отображения получаемых данных.
Добавим команду «Получить поля сущности» и разместим на форме.
В обработчике напишем код.
&НаКлиенте
Процедура ПолучитьПоляСущности(Команда)
СтрокаJSON = ПолучитьПоляСущностиНаСервере(Сущность);
Результат = Обработать_Fields(СтрокаJSON);
Если Результат = Неопределено Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Получение данных от Битрикс24 прошло с ошибками, смотрите журнал регистрации." + Символы.ПС +
"Возможно обновился токен. Попробуйте выполнить получение данных еще раз.");
КонецЕсли;
Попытка
ТаблицаПолейСущности.Очистить();
Для каждого Строка Из Результат Цикл
Текст = "";
НовСтр = ТаблицаПолейСущности.Добавить();
НовСтр.Наименование = Строка.Ключ;
Для каждого ПолеКлюч Из Строка.Значение Цикл
Попытка
НовСтр[ПолеКлюч.Ключ] = ПолеКлюч.Значение;
Исключение
Текст = Текст + "(" + ПолеКлюч.Ключ + ":" + ПолеКлюч.Значение + ")" + Символы.Таб;
КонецПопытки;
КонецЦикла;
НовСтр.Описание = Текст;
КонецЦикла;
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Ошибка обработки данных." + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
&НаСервереБезКонтекста
Функция Обработать_Fields(СтрокаJSON)
Возврат ns_Core.Обработать_Fields(СтрокаJSON);
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьПоляСущностиНаСервере(Сущность)
Возврат ns_Core.Получить_Fields(Сущность);
КонецФункции
Так как здесь будет много универсальных функций, то разместим мы их в общем модуле Core.
Опишем функцию получения списка полей сущности в формате JSON. Чтение JSON и обработку этих данных.
Функция Получить_Fields(Сущность) Экспорт Если НЕ ЗначениеЗаполнено(Сущность) Тогда Возврат Неопределено; КонецЕсли; ПараметрыПодключения = РегистрыСведений.ns_НастройкиБитрикс24.ПолучитьСписокНастроек(); Возврат ОтправитьRESTЗапрос(ПараметрыПодключения, Строка(Сущность) + ".fields"); КонецФункции Функция Обработать_Fields(СтрокаJSON) Экспорт РезультатЗапроса = ПрочитатьJSONБитрикс24(СтрокаJSON); Если РезультатЗапроса = Неопределено Тогда Возврат Неопределено; КонецЕсли; Если РезультатЗапроса.Свойство("error") Тогда Если РезультатЗапроса.Свойство("error_description") Тогда Возврат ОбработатьОшибкуБитрикс24("Обработать_Fields", РезультатЗапроса.error_description); Иначе Возврат Неопределено; КонецЕсли; КонецЕсли; Если РезультатЗапроса.Свойство("result") Тогда Возврат РезультатЗапроса.result; КонецЕсли; Возврат Неопределено; КонецФункции Функция ПрочитатьJSONБитрикс24(СтрокаJSON) Экспорт Попытка ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(СтрокаJSON); Возврат ПрочитатьJSON(ЧтениеJSON); Исключение Возврат ОбработатьОшибкуБитрикс24("ПрочитатьJSONБитрикс24", ОписаниеОшибки()); КонецПопытки; КонецФункции
Для получения полей нам надо отправить REST запрос определенного формата к Битрикс24. Добавим функцию в наш модуль:
Функция ОтправитьRESTЗапрос(ПараметрыПодключения, RESTЗапрос, ТелоЗапроса = "")
Если НЕ ЗначениеЗаполнено(RESTЗапрос) Тогда
Возврат Неопределено;
КонецЕсли;
Попытка
Соединение = ПолучитьHTTPСоединение(Перечисления.ns_ВидыHTTPЗапросов.rest, ПараметрыПодключения);
ЗапросHTTP = ЗапросHTTP_REST(ПараметрыПодключения, RESTЗапрос, ТелоЗапроса);
Ответ = Соединение.Получить(ЗапросHTTP);
Возврат Ответ.ПолучитьТелоКакСтроку();
Исключение
Возврат ОбработатьОшибкуБитрикс24("ОтправитьRESTЗапрос", ОписаниеОшибки());
КонецПопытки;
КонецФункции
Функция ЗапросHTTP_REST(ПараметрыПодключения, RESTЗапрос, ТелоЗапроса)
АдресРесурсаПараметры = Новый Соответствие;
АдресРесурсаПараметры.Вставить("auth", ПараметрыПодключения[Перечисления.ns_ВидыНастроекБ24.AccessToken]);
ЗапросHTTP = Новый HTTPЗапрос();
ЗапросHTTP.АдресРесурса = СформироватьАдресРесурса("rest/" + RESTЗапрос, АдресРесурсаПараметры);
ЗапросHTTP.Заголовки.Вставить("Cookie", ПараметрыПодключения[Перечисления.ns_ВидыНастроекБ24.Cookie]);
ЗапросHTTP.Заголовки.Вставить("Content-type", "application/json");
ЗапросHTTP.УстановитьТелоИзСтроки(ТелоЗапроса, "UTF-8");
Возврат ЗапросHTTP;
КонецФункции
Так же добавим функцию «ОбработатьОшибкуБитрикс24» и сделаем рефакторинг кода. Ключевой особенностью этой функции будет обработка специфических ошибок Битрикс24.
Первое что мы обработаем — это окончание кода AccessToken. Для его обновления в мы получали RefreshToken. Разработчики рекомендуют делать обновление токена только когда получен ответ с ошибкой «The access token provided has expired». Хотя вы можете просто обновлять его примерно раз в час.
Функция ОбработатьОшибкуБитрикс24(КонтекстОшибки, ОписаниеОшибки) Экспорт ЗаписьЖурналаРегистрации("Битрикс24", УровеньЖурналаРегистрации.Ошибка,,, КонтекстОшибки + Символы.ПС + ОписаниеОшибки); Если СтрНайти(ОписаниеОшибки, "The access token provided has expired") > 0 Тогда ОбновитьТокен(); КонецЕсли; Возврат Неопределено; КонецФункции
И описываю функцию обновления токена.
Функция ОбновитьТокен() Экспорт
Попытка
ПараметрыПодключения = РегистрыСведений.ns_НастройкиБитрикс24.ПолучитьСписокНастроек();
Соединение = ПолучитьHTTPСоединение(Перечисления.ns_ВидыHTTPЗапросов.oauth, ПараметрыПодключения);
Если Соединение = Неопределено Тогда
Возврат ОбработатьОшибкуБитрикс24("ОбновитьТокен", "Ошибка получения соединения.");
КонецЕсли;
ЗапросHTTP = ЗапросHTTP_RefreshToken(ПараметрыПодключения);
Ответ = Соединение.Получить(ЗапросHTTP);
Если Ответ.КодСостояния = 200 Тогда
ДанныеToken = ПрочитатьJSONБитрикс24(Ответ.ПолучитьТелоКакСтроку());
РегистрыСведений.ns_НастройкиБитрикс24.ЗаписатьНастройку(Перечисления.ns_ВидыНастроекБ24.AccessToken, ДанныеToken.access_token);
РегистрыСведений.ns_НастройкиБитрикс24.ЗаписатьНастройку(Перечисления.ns_ВидыНастроекБ24.RefreshToken, ДанныеToken.refresh_token);
РегистрыСведений.ns_НастройкиБитрикс24.ЗаписатьНастройку(Перечисления.ns_ВидыНастроекБ24.RefreshTime, ТекущаяДата() + ДанныеToken.expires_in);
Иначе
Возврат ОбработатьОшибкуБитрикс24("ОбновитьТокен", "Ошибка обновления токена. Код состояния = " + Ответ.КодСостояния + Символы.ПС + Ответ.ПолучитьТелоКакСтроку());
КонецЕсли;
Исключение
ОбработатьОшибкуБитрикс24("ОбновитьТокен", ОписаниеОшибки());
КонецПопытки;
Возврат Истина;
КонецФункции
На этом пока все, а в следующем уроке мы получим лиды из Битрикс 24 и сохраним их в 1С.
Посмотреть полный урок на видео вы можете ниже.
(1) комментарий