========================================
Как получить и сохранить файл запроса (Прокси.GetCursOnDate(WSПараметр)) который должен быть отправлен к внешнему веб-сервису.
Ну и вдогонку аналогично получить файл ответа от внешнего веб-сервиса.
Поставлю вопрос по другому.
Вышеприведенный код делает запрос к веб-сервису в следующем формате:
======================================================================
======================================================================
Ну и проблем с этим запросом не возникает.
Мне надо получить работающий запрос немного в другом формате:
======================================================================
======================================================================
Собственно суть вопроса как с помощью кода в первом посте получить такой запрос?
ПС: Пример не связан с работой конкретного веб-сервиса
В те ворота или нет, но у меня работа с веб-сервисами реализована через HTTPСоединение и метод ОтправитьДляОбработки() те реализована работа post-запросами.
И для этого мне как раз пришлось "разпарсить" xdto Объект в xml
ФайлЗапрос = ПолучитьИмяВременногоФайла("xml"); ПолучитьТелоHttpЗапросаДляОбъектаXDTO(Фабрика,Содержание,ФайлЗапрос,НастройкаЗаписиУзлов);// Содержание ОбъектXDTO
Функция ПолучитьТелоHttpЗапросаДляОбъектаXDTO(Фабрика, ОбъектXDTO, Путь = Неопределено, НастройкаЗаписиУзлов = Неопределено)
Перем Результат;
ФайлЗапрос = ПолучитьИмяВременногоФайла("xml");
// Создадим файл запроса
// Файл запроса смотрим в SoapUI
//
//<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sap-com:document:sap:rfc:functions">
// <soapenv:Header/>
// <soapenv:Body>
//
// ... здесь будет наш SOAP запрос
//
// </soapenv:Body>
//</soapenv:Envelope>
//
// UPD: от namespace soapenv можно отказаться в пользу основного Пространства имен
//
// Работа с DOM смотри пример по ссылке: http://www.forum.mista.ru/topic.php?id=626447
Uri ="http://schemas.xmlsoap.org/soap/envelope/"; Корень ="Envelope";
Если Не ПустаяСтрока(Путь)тогда
ЗаписьXML.ОткрытьФайл(Путь); Иначе
ЗаписьXML.УстановитьСтроку();// обязательный метод, иначе ЗаписьDOM.Записать(..) падает в ошибку
КонецЕсли;
И да, чтобы получить объект запроса необходимо фабрикой XDTO Прокси создать объект типа "MethodName" посмотрите фабрику - он там будет
// Вспомогательная процедура. см. метод ПолучитьОтветСервисаPostЗапросом(...)
Процедура ЗаполнитьЗаписьУзловDOMДляОбъектаXDTO(ЗаписьУзловDOM, ОбъектXDTO, Имя = Неопределено, Фабрика = Неопределено, Счетчик =1, НастройкаЗаписиУзлов = Неопределено)
Перем индекс;
Если ОбъектXDTO = Неопределено Тогда
Возврат;// FIX, 2013.05.27, Если переданное свойсвто объекта не заполненного то метод падал в ошибку
КонецЕсли;
ТипXDTO = ОбъектXDTO.Тип();
Если ПустаяСтрока(Имя)Тогда Имя = ТипXDTO.Имя; КонецЕсли;
Для Каждого СвойствоXDTO ИЗ ОбъектXDTO.Свойства()Цикл
Если ТипЗнч(СвойствоXDTO.Тип)= Тип("ТипЗначенияXDTO")Тогда
// Для свойств объекта XDTO реквизиты записываем без префикса,
// на них будет распостраняться пространство имен самого объекта
ЗаписатьНачалоЭлемента(ЗаписьУзловDOM,СвойствоXDTO.Имя,СвойствоXDTO.URIПространстваИмен, Счетчик, НастройкаЗаписиУзлов);
// FIX. Если значение реквизита Неопределено (не был определен) - здесь падало в ошубку
// FIX 2. Для "стандартных" пакетов данных 1С интерпритирует данные в Дата, Число, тп. Потребовалась фабрикаxdto.
// FIX 3. ЗначениеЗаполнено(0) - вернет ложь. Исправлено на проверку Неопределено.
Если ОбъектXDTO[СвойствоXDTO.Имя]<>Неопределено Тогда
Если ТипЗнч(ОбъектXDTO[СвойствоXDTO.Имя])= Тип("СписокXDTO")Тогда
Для индекс =0 По ОбъектXDTO[СвойствоXDTO.Имя].Количество()-1 Цикл
ЗаполнитьЗаписьУзловDOMДляОбъектаXDTO(ЗаписьУзловDOM, ОбъектXDTO[СвойствоXDTO.Имя][индекс], СвойствоXDTO.Имя, Фабрика, Счетчик, НастройкаЗаписиУзлов); КонецЦикла;
Иначе
ЗаполнитьЗаписьУзловDOMДляОбъектаXDTO(ЗаписьУзловDOM, ОбъектXDTO[СвойствоXDTO.Имя], СвойствоXDTO.Имя, Фабрика, Счетчик, НастройкаЗаписиУзлов); КонецЕсли;
(4) xzorkiix, Спасибо за ответ. Буду пробовать собирать в ручную, хотя это конечно печально. Наворотить такую систему а потом типа "ассемблером" программировать.