Перейти к содержанию

Исходящие обработчики

Исходящий обработчик — процедура на языке 1С, которая формирует тело сообщения из 1С-объекта. Вызывается модулем при обработке очереди регистрации исходящих сообщений.

Регистрация обработчика

Обработчики регистрируются в процедуре ПриПолученииПоставляемыхОбъектовИнтеграции модуля ДатаХабПоставляемыеОбъектыИнтеграцииПереопределяемый. Каждый обработчик описывается структурой с полями:

Поле Значение
ИмяКлассаОбъекта Полное имя метаданного 1С (напр. Справочник.ПричиныДефектов)
КлассСообщения ClassId в DataHUB (напр. Catalog_ПричиныДефектов)
ТипИнтеграции Перечисления.ДатаХабТипыИнтеграции.Исходящая
МетодХранения ПоСсылке — объект сериализуется при обработке; хранится только ссылка
Статус Перечисления.ДатаХабСтатусыОбработчиков.Включен
ОчередностьОбработки Число (по умолчанию 100); меньше — выше приоритет
ИмяПроцедурыОбработкиВКонфигурации Имя процедуры в том же общем модуле
Версия Целое число, инкрементируется при изменении

Сигнатура процедуры

Процедура ИмяОбработчика(
    ПроцедураОбработки,
    ОбъектОбработки,
    Результат,
    Отказ,
    Обработчик,
    ДополнительныеСвойства,
    ЗадержкаОбработкиСообщенияПриОшибке) Экспорт
Параметр Направление Описание
ОбъектОбработки Вход Ссылка на 1С-объект, инициировавший событие
Результат Выход Структура, которая станет полем Body в JSON-конверте
Отказ Выход Истина — отменить отправку, удалить из очереди
Обработчик Вход Описание обработчика (ИмяКлассаОбъекта, КлассСообщения и др.)
ЗадержкаОбработкиСообщенияПриОшибке Выход Переопределить задержку до следующей попытки (секунды)

Типовая реализация

Процедура Справочник_ПричиныДефектов_Исходящая(
    ПроцедураОбработки, ОбъектОбработки, Результат, Отказ,
    Обработчик, ДополнительныеСвойства, ЗадержкаОбработкиСообщенияПриОшибке) Экспорт

    // Не отправлять удалённые объекты
    Если ОбъектОбработки.ПометкаУдаления Тогда
        Отказ = Истина;
    КонецЕсли;

    Если Не Отказ Тогда

        Результат = Новый Структура;

        // Добавить массив идентификаторов объекта во всех системах
        ДатаХабИнтеграция.ДобавитьВСтруктуруЗначениеДляВыгрузки(Результат, "Id", ОбъектОбработки);

        // Получить поля объекта запросом и добавить в Результат
        Запрос = Новый Запрос;
        Запрос.УстановитьПараметр("Ссылка", ОбъектОбработки);
        Запрос.Текст =
        "ВЫБРАТЬ
        |   ПричиныДефектов.Наименование КАК Наименование
        |ИЗ
        |   Справочник.ПричиныДефектов КАК ПричиныДефектов
        |ГДЕ
        |   ПричиныДефектов.Ссылка = &Ссылка";

        РезультатЗапроса = Запрос.ВыполнитьПакет();
        Шапка = РезультатЗапроса[0].Выгрузить();
        ДанныеЭлемента = Шапка[0];
        Для Каждого Колонка Из Шапка.Колонки Цикл
            ДатаХабИнтеграция.ДобавитьВСтруктуруЗначениеДляВыгрузки(
                Результат, Колонка.Имя, ДанныеЭлемента[Колонка.Имя]);
        КонецЦикла;

    КонецЕсли;

КонецПроцедуры

Ключевые методы ДатаХабИнтеграция

ДобавитьВСтруктуруЗначениеДляВыгрузки(Структура, ИмяПоля, Значение) — добавляет поле в результирующую структуру с корректным преобразованием типа. При передаче ссылки на объект ("Id") формирует массив идентификаторов [{SystemID, SystemName, EntityID}, ...] для всех известных систем из таблицы идентификаторов.

Соглашение об именовании

Рекомендуемый формат имени процедуры:

{ВидМетаданного}_{ИмяОбъекта}_Исходящая

Например: Справочник_Контрагенты_Исходящая, Документ_РеализацияТоваровУслуг_Исходящая.

Имя процедуры указывается в поле ИмяПроцедурыОбработкиВКонфигурации при регистрации обработчика.

Режим хранения «По ссылке»

При МетодХранения = ПоСсылке подписка записывает в очередь регистрации только ссылку на объект. Сериализация выполняется в момент вызова обработчика — то есть по актуальному состоянию объекта на момент обработки, а не на момент события записи. Если объект за это время изменился повторно, отправится последняя версия.

Форма записи очереди регистрации

Каждое событие, попавшее в очередь регистрации исходящих, имеет свою запись в регистре. Статус и счётчик попыток обновляются по мере обработки.

Форма регистрации исходящего сообщения