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

Примеры реализации

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

// В модуле ДатаХабПоставляемыеОбъектыИнтеграцииПереопределяемый

Процедура ПриПолученииПоставляемыхОбъектовИнтеграции(
    ОписанияПоставляемыхОбъектовИнтеграции, ПараметрОбновления) Экспорт

    // Входящий: Catalog_Контрагенты -> Справочник.Контрагенты
    ОписаниеОбъектаИнтеграции = ДатаХабПоставляемыеОбъектыИнтеграции.НовоеОписаниеОбъектаИнтеграции();
    ОписанияПоставляемыхОбъектовИнтеграции.Добавить(ОписаниеОбъектаИнтеграции);
    ОписаниеОбъектаИнтеграции.Наименование             = "Catalog_Контрагенты -> Справочник.Контрагенты";
    ОписаниеОбъектаИнтеграции.ИмяКлассаОбъекта         = "Catalog_Контрагенты";
    ОписаниеОбъектаИнтеграции.ИмяОбъекта               = "Справочник.Контрагенты";
    ОписаниеОбъектаИнтеграции.ТипИнтеграции             = Перечисления.ДатаХабТипыИнтеграции.Входящая;
    ОписаниеОбъектаИнтеграции.Статус                    = Перечисления.ДатаХабСтатусыОбработчиков.Включен;
    ОписаниеОбъектаИнтеграции.ОчередностьОбработки      = 100;
    ОписаниеОбъектаИнтеграции.ИмяПроцедурыОбработкиВКонфигурации = "Catalog_Контрагенты_Входящая";
    ОписаниеОбъектаИнтеграции.Версия                    = 1;

    // Исходящий: Справочник.Контрагенты -> Catalog_Контрагенты
    ОписаниеОбъектаИнтеграции = ДатаХабПоставляемыеОбъектыИнтеграции.НовоеОписаниеОбъектаИнтеграции();
    ОписанияПоставляемыхОбъектовИнтеграции.Добавить(ОписаниеОбъектаИнтеграции);
    ОписаниеОбъектаИнтеграции.Наименование             = "Справочник.Контрагенты -> Catalog_Контрагенты";
    ОписаниеОбъектаИнтеграции.ИмяКлассаОбъекта         = "Справочник.Контрагенты";
    ОписаниеОбъектаИнтеграции.КлассСообщения            = "Catalog_Контрагенты";
    ОписаниеОбъектаИнтеграции.МетодХранения             = Перечисления.ДатаХабМетодХранения.ПоСсылке;
    ОписаниеОбъектаИнтеграции.ТипИнтеграции             = Перечисления.ДатаХабТипыИнтеграции.Исходящая;
    ОписаниеОбъектаИнтеграции.Статус                    = Перечисления.ДатаХабСтатусыОбработчиков.Включен;
    ОписаниеОбъектаИнтеграции.ОчередностьОбработки      = 100;
    ОписаниеОбъектаИнтеграции.ИмяПроцедурыОбработкиВКонфигурации = "Справочник_Контрагенты_Исходящая";
    ОписаниеОбъектаИнтеграции.Версия                    = 1;

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

Исходящий обработчик справочника

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

    Если ОбъектОбработки.ПометкаУдаления Тогда
        Отказ = Истина;
        Возврат;
    КонецЕсли;

    Результат = Новый Структура;
    ДатаХабИнтеграция.ДобавитьВСтруктуруЗначениеДляВыгрузки(Результат, "Id", ОбъектОбработки);

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

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

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

Входящий обработчик справочника

Процедура Catalog_Контрагенты_Входящая(
    ПроцедураОбработки, ОбъектОбработки, Отказ, ОбъектСообщение,
    Обработчик, Результат, ЗадержкаОбработкиСообщенияПриОшибке) Экспорт

    ТипПриемника   = Обработчик.ИмяКлассаОбъекта;  // "Catalog_Контрагенты"
    ИмяСправочника = "Контрагенты";

    НачатьТранзакцию();
    Попытка

        Объект = ДатаХабИнтеграция.НайтиСоздатьСправочникОбъект(
            ОбъектОбработки.Id, ИмяСправочника, ТипПриемника);

        Объект.Наименование = ОбъектОбработки.Наименование;

        Если ОбъектОбработки.Свойство("ИНН") Тогда
            Объект.ИНН = ОбъектОбработки.ИНН;
        КонецЕсли;

        Если ОбъектОбработки.Свойство("КПП") Тогда
            Объект.КПП = ОбъектОбработки.КПП;
        КонецЕсли;

        Объект.ДополнительныеСвойства.Вставить("ДатаХабНеобрабатывать", Истина);

        Если Не Объект.ПроверитьЗаполнение() Тогда
            ВызватьИсключение "Не заполнены обязательные поля";
        КонецЕсли;

        Объект.Записать();
        Результат = Объект.Ссылка;

        ЗафиксироватьТранзакцию();
    Исключение
        ОтменитьТранзакцию();
        ВызватьИсключение ОписаниеОшибки();
    КонецПопытки;

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

Обработка ссылок на зависимые объекты

Если объект ссылается на другой, который может ещё не прийти из шины, используется ЗадержкаОбработкиСообщенияПриОшибке для организации ожидания:

// Попытка найти связанный объект
ГруппаКонтрагента = ДатаХабИнтеграция.НайтиОбъектПоИдентификатору(
    ОбъектОбработки.ГруппаId, "ГруппыКонтрагентов", "Catalog_ГруппыКонтрагентов");

Если ГруппаКонтрагента = Неопределено Тогда
    // Зависимость не пришла — отложить обработку на 30 секунд
    ЗадержкаОбработкиСообщенияПриОшибке = 30;
    ВызватьИсключение "Зависимый объект ГруппыКонтрагентов не найден";
КонецЕсли;