Исходящие обработчики
Исходящий обработчик — процедура на языке 1С, которая формирует тело сообщения из 1С-объекта. Вызывается модулем при обработке очереди регистрации исходящих сообщений.
Регистрация обработчика
Обработчики регистрируются в процедуре ПриПолученииПоставляемыхОбъектовИнтеграции модуля ДатаХабПоставляемыеОбъектыИнтеграцииПереопределяемый. Каждый обработчик описывается структурой с полями:
| Поле | Значение |
|---|---|
ИмяКлассаОбъекта |
Полное имя метаданного 1С (напр. Справочник.ПричиныДефектов) |
КлассСообщения |
ClassId в DataHUB (напр. Catalog_ПричиныДефектов) |
ТипИнтеграции |
Перечисления.ДатаХабТипыИнтеграции.Исходящая |
МетодХранения |
ПоСсылке — объект сериализуется при обработке; хранится только ссылка |
Статус |
Перечисления.ДатаХабСтатусыОбработчиков.Включен |
ОчередностьОбработки |
Число (по умолчанию 100); меньше — выше приоритет |
ИмяПроцедурыОбработкиВКонфигурации |
Имя процедуры в том же общем модуле |
Версия |
Целое число, инкрементируется при изменении |
Сигнатура процедуры
Процедура ИмяОбработчика(
ПроцедураОбработки,
ОбъектОбработки,
Результат,
Отказ,
Обработчик,
ДополнительныеСвойства,
ЗадержкаОбработкиСообщенияПриОшибке) Экспорт
| Параметр | Направление | Описание |
|---|---|---|
ОбъектОбработки |
Вход | Ссылка на 1С-объект, инициировавший событие |
Результат |
Выход | Структура, которая станет полем Body в JSON-конверте |
Отказ |
Выход | Истина — отменить отправку, удалить из очереди |
Обработчик |
Вход | Описание обработчика (ИмяКлассаОбъекта, КлассСообщения и др.) |
ЗадержкаОбработкиСообщенияПриОшибке |
Выход | Переопределить задержку до следующей попытки (секунды) |
Типовая реализация
Процедура Справочник_ПричиныДефектов_Исходящая(
ПроцедураОбработки, ОбъектОбработки, Результат, Отказ,
Обработчик, ДополнительныеСвойства, ЗадержкаОбработкиСообщенияПриОшибке) Экспорт
// Не отправлять удалённые объекты
Если ОбъектОбработки.ПометкаУдаления Тогда
Отказ = Истина;
КонецЕсли;
Если Не Отказ Тогда
Результат = Новый Структура;
// Добавить массив идентификаторов объекта во всех системах
ДатаХабИнтеграция.ДобавитьВСтруктуруЗначениеДляВыгрузки(Результат, "Id", ОбъектОбработки);
// Получить поля объекта запросом и добавить в Результат
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", ОбъектОбработки);
Запрос.Текст =
"ВЫБРАТЬ
| ПричиныДефектов.Наименование КАК Наименование
|ИЗ
| Справочник.ПричиныДефектов КАК ПричиныДефектов
|ГДЕ
| ПричиныДефектов.Ссылка = &Ссылка";
РезультатЗапроса = Запрос.ВыполнитьПакет();
Шапка = РезультатЗапроса[0].Выгрузить();
ДанныеЭлемента = Шапка[0];
Для Каждого Колонка Из Шапка.Колонки Цикл
ДатаХабИнтеграция.ДобавитьВСтруктуруЗначениеДляВыгрузки(
Результат, Колонка.Имя, ДанныеЭлемента[Колонка.Имя]);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Ключевые методы ДатаХабИнтеграция
ДобавитьВСтруктуруЗначениеДляВыгрузки(Структура, ИмяПоля, Значение) — добавляет поле в результирующую структуру с корректным преобразованием типа. При передаче ссылки на объект ("Id") формирует массив идентификаторов [{SystemID, SystemName, EntityID}, ...] для всех известных систем из таблицы идентификаторов.
Соглашение об именовании
Рекомендуемый формат имени процедуры:
Например: Справочник_Контрагенты_Исходящая, Документ_РеализацияТоваровУслуг_Исходящая.
Имя процедуры указывается в поле ИмяПроцедурыОбработкиВКонфигурации при регистрации обработчика.
Режим хранения «По ссылке»
При МетодХранения = ПоСсылке подписка записывает в очередь регистрации только ссылку на объект. Сериализация выполняется в момент вызова обработчика — то есть по актуальному состоянию объекта на момент обработки, а не на момент события записи. Если объект за это время изменился повторно, отправится последняя версия.
Форма записи очереди регистрации
Каждое событие, попавшее в очередь регистрации исходящих, имеет свою запись в регистре. Статус и счётчик попыток обновляются по мере обработки.
