Обеспечение уникальности сообщений с помощью операции копирования
В «1С:Шине» возможны сценарии с использованием сервисов интеграции «1С:Предприятия», при которых из одного входящего или вновь созданного сообщения генерируются несколько новых сообщений с одинаковыми идентификаторами. Сервис интеграции проверяет идентификаторы сообщений на уникальность и обрабатывает только первое сообщение, а последующие считает дублями и пропускает.
Для решения этой проблемы необходимо копировать исходное сообщение: получить его копию с теми же свойствами, телом и параметрами, но с новым идентификатором. Копия создается с помощью метода стандартной библиотеки Копировать() типа СообщениеИнтеграции.
Вы можете создать копию сообщения:
- в узле Транслятор
- после узлов Http и Sql с группой участников;
- после узла МаршрутизаторПоСодержимому с несколькими целевыми узлами;
- в обработчике ОбработкаСообщения узла Sql после получения результата операции от БД.
Примеры обработчиков узла «Транслятор»
-
В этом примере создается копия сообщения с новым идентификатором и специальным параметром, в который сохраняется идентификатор исходного сообщения. Таким образом устанавливается корреляция между отправленным запросом и полученным ответом:
метод КопироватьСообщение(Контекст: КонтекстВызова, Сообщение: ИмяПроцессаИнтеграции.Сообщение): СообщениеИнтеграции
знч СообщениеКопия = Сообщение.Копировать()
.УстановитьПараметр("ИдКорреляции", Сообщение.Ид)
возврат СообщениеКопия
; -
В этом примере с помощью конструктора типа СообщениеИнтеграции создается новое сообщение, которое содержит копию параметров и тела исходного сообщения. Служебные заголовки и свойство УзлыПути исходного сообщения не переносятся:
метод СоздатьСообщение(Контекст: КонтекстВызова, Сообщение: ИмяПроцессаИнтеграции.Сообщение): СообщениеИнтеграции
исп ТелоПоток = Сообщение.ПолучитьТелоКакПоток()
знч НовоеСообщение = новый СообщениеИнтеграции(Сообщение.Параметры, ТелоПоток)
возврат НовоеСообщение
;