Чтение и запись сообщения обмена
Запись сообщения обмена
УзелОтправитель = ПланыОбмена.РИБ.ЭтотУзел();УзелПолучатель = ПланыОбмена.РИБ.НайтиПоКоду("М1");
ИмяФайлаСообщения = СтрШаблон("C:\temp\demo_exchange\Message_%1_%2.xml", УзелОтправитель.Код, УзелПолучатель.Код);
// Открываем файл для записиЗаписьXML = Новый ЗаписьXML();ЗаписьXML.ОткрытьФайл(ИмяФайлаСообщения);
// Создаем запись сообщенияЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелПолучатель);
// Записываем изменения в файлПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения);
ЗаписьСообщения.ЗакончитьЗапись();
// Закрываем файлЗаписьXML.Закрыть();
Сообщение = Новый СообщениеПользователю;Сообщение.Текст = "Сообщение обмена успешно сформировано!";Сообщение.Сообщить();
Чтение сообщения обмена
Вариант 1
УзелОтправитель = ПланыОбмена.РИБ.НайтиПоКоду("М1");УзелПолучатель = ПланыОбмена.РИБ.ЭтотУзел();
ИмяФайлаСообщения = СтрШаблон("C:\temp\demo_exchange\Message_%1_%2.xml", УзелОтправитель.Код, УзелПолучатель.Код);
// Открываем файл для чтенияЧтениеXML = Новый ЧтениеXML;ЧтениеXML.ОткрытьФайл(ИмяФайлаСообщения);
// Создаем чтение сообщенияЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
// Чтение сообщения обменаПопытка ЧтениеСообщения.НачатьЧтение(ЧтениеXML); ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения);Исключение ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); Сообщение = Новый СообщениеПользователю; Сообщение.Текст = ТекстОшибки; Сообщение.Сообщить();КонецПопытки;
// Завершить чтение сообщенияЧтениеСообщения.ЗакончитьЧтение();ЧтениеXML.Закрыть();
Вариант 2
Функция ПрочитатьИПрименитьСообщениеОбмена(УзелОбмена, ИмяФайла) Экспорт
Результат = Новый Структура; Результат.Вставить("Успешно", Ложь); Результат.Вставить("ОписаниеОшибки", ""); Результат.Вставить("КоличествоОбъектов", 0);
Попытка // Проверяем существование файла Файл = Новый Файл(ИмяФайла); Если НЕ Файл.Существует() Тогда ВызватьИсключение "Файл сообщения не найден"; КонецЕсли;
// Открываем файл для чтения ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.ОткрытьФайл(ИмяФайла);
// Создаем чтение сообщения ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
// Проверяем соответствие узлов Если ЧтениеСообщения.Отправитель <> УзелОбмена Тогда ВызватьИсключение СтрШаблон( "Сообщение от другого узла. Ожидается: %1, Получено: %2", УзелОбмена, ЧтениеСообщения.Отправитель); КонецЕсли;
// Проверяем номер сообщения НомерПринятого = УзелОбмена.НомерПринятого; НомерСообщения = ЧтениеСообщения.НомерСообщения;
Если НомерСообщения <= НомерПринятого Тогда ВызватьИсключение СтрШаблон( "Сообщение уже было принято. Номер сообщения: %1, Последний принятый: %2", НомерСообщения, НомерПринятого); КонецЕсли;
// Начинаем транзакцию НачатьТранзакцию();
Попытка // Читаем и записываем объекты Пока ЧтениеСообщения.Прочитать() Цикл
Данные = ЧтениеСообщения.Данные;
// Устанавливаем режим загрузки Если ТипЗнч(Данные) <> Тип("УдалениеОбъекта") Тогда Данные.ОбменДанными.Загрузка = Истина; Данные.ОбменДанными.Отправитель = УзелОбмена; Данные.Записать(); Иначе // Удаление объекта Попытка УдаляемыйОбъект = Данные.Ссылка.ПолучитьОбъект(); Если УдаляемыйОбъект <> Неопределено Тогда УдаляемыйОбъект.ОбменДанными.Загрузка = Истина; УдаляемыйОбъект.Удалить(); КонецЕсли; Исключение // Объект уже удален КонецПопытки; КонецЕсли;
Результат.КоличествоОбъектов = Результат.КоличествоОбъектов + 1;
КонецЦикла;
// Обновляем номер принятого сообщения УзелОбъектОбмена = УзелОбмена.ПолучитьОбъект(); УзелОбъектОбмена.НомерПринятого = НомерСообщения; УзелОбъектОбмена.Записать();
// Фиксируем транзакцию ЗафиксироватьТранзакцию();
Результат.Успешно = Истина;
Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки;
// Закрываем чтение ЧтениеСообщения.ЗакончитьЧтение(); ЧтениеXML.Закрыть();
Исключение Результат.ОписаниеОшибки = ОписаниеОшибки();
// Записываем в журнал регистрации ЗаписьЖурналаРегистрации("Обмен.ЧтениеСообщения", УровеньЖурналаРегистрации.Ошибка, , УзелОбмена, Результат.ОписаниеОшибки); КонецПопытки;
Возврат Результат;
КонецФункции