SAPфорум.RU https://sapboard.ru/forum/ |
|
Web-сервис SAP в 1С. Проблемы с предачей таблицы. https://sapboard.ru/forum/viewtopic.php?f=70&t=90782 |
Страница 1 из 2 |
Автор: | Korvax [ Вт, июн 23 2015, 12:59 ] |
Заголовок сообщения: | Web-сервис SAP в 1С. Проблемы с предачей таблицы. |
Добрый день. Есть веб сервис на стороне SAP (сгенерирован на основе ФМ), обращение к нему идет из 1С. На входе таблица и переменная, соответственно от 1С приходит xml подобного вида: Code: <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header /> <soap:Body> <m:Z_CREATE xmlns:m="urn:sap-com:document:sap:rfc:functions"> <IT_MATNR xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <m:item>10000001</m:item> <m:item>10000002</m:item> </IT_MATNR> <IV_BATCH xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">1111111111</IV_BATCH> </m:Z_CREATE> </soap:Body> </soap:Envelope> SAP не может определить строки таблицы по тегу <m:item> и соответственно таблица оказывается пустой. Если руками исправить <m:item> на <item>, все работает нормально. Вопросов собственно три: 1. Зачем 1С добавляет ссылку на пространство имен к тегу <m:item>? 2. Что можно сделать на стороне SAP для нормального анализа постпупающих данных? 3. Если у кого есть опыт по работе с SAP - 1С, какие еще сюрпризы готовит 1С? P.s. И еще вопрос, как сообщить веб-сервису SAP что к нему прийдут данные со ссылкой на пространство имен? Т.е. как добавить атрибут elementFormDefault = «qualified» для элемента xsd:schema в WSDL SAP? |
Автор: | Chaser009 [ Ср, июн 24 2015, 03:46 ] |
Заголовок сообщения: | Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы. |
Здравствуйте! По опыту, 1С вообще очень своеобразно работает с XDTO и веб-сервисами. На моей памяти был, например, случай, когда 1С почему-то воспринимала структуру с параметром и таблицей внутри просто как два отдельных параметра. Элементы у меня 1С тоже нэймспэйсами любила метить. Лечил с помощью указания "Qualify schema - Elements" при определении типа данных в ESR. По поводу RFC-сообщения - не скажу, не сталкивался. Типы данных для вызова из 1С как получаете, создаете ws-ссылку по wsdl c описанием сервиса? Или как-то еще? Мы, намучившись с подобными вещами, пришли к решению: создаем описания типов данных и сообщений на стороне 1С, загружаем их в ESR как External Definition и берем как типы сообщений для интерфейса 1С. Потом генерируем wsdl и создаем по нему ws-ссылку в 1С. Ну а в PI мэппинг из структуры 1С в структуру RFC и обратно. В таком виде проблем пока не было. |
Автор: | Force1984 [ Ср, июн 24 2015, 04:19 ] |
Заголовок сообщения: | Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы. |
Добрый день. У нас для решения этой проблемы было создано xslt преобразование, которое исправляет пространство имен сразу при получении xml. |
Автор: | Korvax [ Ср, июн 24 2015, 08:50 ] |
Заголовок сообщения: | Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы. |
Здравствуйте! Chaser009 написал: Типы данных для вызова из 1С как получаете, создаете ws-ссылку по wsdl c описанием сервиса? Или как-то еще? Да, пытаемся работать по "нормальному" варианту.Chaser009 написал: Мы, намучившись с подобными вещами, пришли к решению: Мы видимо еще не намучались, и в поисках своего решения Просто интересно очень стало, ведь явно проблема работы на стороне 1С, неужели им никто не собщил и они не предпринимают никаких попыток решить проблему? Force1984 написал(а): Добрый день. Не совсем понятно в какой момент вызывать преобразование? У меня веб сервис на базе ФМ, на входе данные и на выходе данные, доступа к xml нету.
У нас для решения этой проблемы было создано xslt преобразование, которое исправляет пространство имен сразу при получении xml. |
Автор: | Chaser009 [ Ср, июн 24 2015, 10:20 ] |
Заголовок сообщения: | Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы. |
Так вы PI-то используете или напрямую веб-сервис вызываете? Насчет сообщить 1С: народ на форумах воет по поводу ругани 1С на теги "wsp:Policy" при импорте wsdl, начиная с 8.1. На дворе уже 8.3 - воз и ныне там. |
Автор: | Force1984 [ Ср, июн 24 2015, 10:35 ] |
Заголовок сообщения: | Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы. |
Мы внедрились в один из методов класса CL_SOAP_HTTP_EXTENSION через расширения. Этот класс вызывается при приеме xml и xml в нем доступен и его можно обработать. |
Автор: | Chaser009 [ Ср, июн 24 2015, 11:02 ] |
Заголовок сообщения: | Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы. |
Force1984 написал(а): Мы внедрились в один из методов класса CL_SOAP_HTTP_EXTENSION через расширения. Этот класс вызывается при приеме xml и xml в нем доступен и его можно обработать. Я поэтому и спрашиваю, используется ли PI. Тогда и внедряться никуда не надо. |
Автор: | Korvax [ Ср, июн 24 2015, 11:03 ] |
Заголовок сообщения: | Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы. |
Chaser009 написал: Так вы PI-то используете или напрямую веб-сервис вызываете? Вызываем напрямую, т.к. в идеале операции должны выполняться под разными пользователями, т.е. Иванов вызвал создание поставки и она создалась именно под Ивановым. Ну и еще пара причин не очень весомых.Chaser009 написал: Насчет сообщить 1С: народ на форумах воет по поводу ругани 1С на теги "wsp:Policy" при импорте wsdl, начиная с 8.1. На дворе уже 8.3 - воз и ныне там. Всё лишнее в т.ч. и policy обрезали при генерации wsdl в soamanager, пока работаем без них.Force1984 написал(а): Мы внедрились в один из методов класса CL_SOAP_HTTP_EXTENSION через расширения. Этот класс вызывается при приеме xml и xml в нем доступен и его можно обработать. Как то вы.. жестоко )))
|
Автор: | Force1984 [ Ср, июн 24 2015, 11:48 ] |
Заголовок сообщения: | Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы. |
Зато все работает стабильно уже года три, а 1с-ники так ничего и не исправили. |
Автор: | Chaser009 [ Чт, июн 25 2015, 03:55 ] |
Заголовок сообщения: | Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы. |
Korvax написал: Вызываем напрямую, т.к. в идеале операции должны выполняться под разными пользователями, т.е. Иванов вызвал создание поставки и она создалась именно под Ивановым. Ну и еще пара причин не очень весомых. А что мешает из 1С пользователя передавать? Просто, если у вас PI есть, логичнее его такими вещами нагрузить, там и способов побольше всякие камушки подводные обходить. |
Автор: | Korvax [ Чт, июн 25 2015, 08:16 ] |
Заголовок сообщения: | Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы. |
Chaser009 написал: А что мешает из 1С пользователя передавать? У нас есть SAP BC. Уже пробовали, все работает. Только у SAP не во всех модулях можно на входе подать имя пользователя, создавшего документ. А вызов метода в SAP в этом случае будет в любом случае по одним техническим пользователем.
Просто, если у вас PI есть, логичнее его такими вещами нагрузить, там и способов побольше всякие камушки подводные обходить. |
Автор: | Андрей Петин [ Вт, июн 30 2015, 11:33 ] |
Заголовок сообщения: | Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы. |
Тоже были проблемы с использованием нашего сервиса со стороны 1С, когда тип сообщения для стороны 1С (т.е. используемый в WSDL) был задан как Message Type. Дело было тоже в нэймспейсах. Пришлось вместо Message Type делать External Definition и прописывать там Qualified. Например: <xsd:element name="year" type="xsd:string" minOccurs="0" form="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> |
Автор: | Korvax [ Ср, июл 01 2015, 16:32 ] |
Заголовок сообщения: | Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы. |
Андрей Петин написал: Пришлось вместо Message Type делать External Definition и прописывать там Qualified. А можно чуть подробнее где изменяли (SAP, wsdl, 1C?) и как это повлияло на структуру запроса?
|
Автор: | Андрей Петин [ Чт, июл 02 2015, 17:06 ] |
Заголовок сообщения: | Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы. |
Korvax написал: Андрей Петин написал: Пришлось вместо Message Type делать External Definition и прописывать там Qualified. А можно чуть подробнее где изменяли (SAP, wsdl, 1C?) и как это повлияло на структуру запроса?Изменения были в SAP PI. В 1С ничего не изменилось. В wsdl изменилось автоматически. В SAP PI был канал типа SOAP Sender - то есть мы предоставили веб-сервис, чтоб его вызывали из 1C. Отдали им wsdl-файл для вызова сервиса. То есть был синхронный вызов: SOAP (вызов веб-сервиса из 1C) -> SAP PI -> SAP ERP и обратно ответ. Вроде бы ситуация такая же, как у вас. Внутри SAP PI типы сообщений для интерфейсов, участвующих в обмене, были сформированы с помощью объекта Message Type. При тестировании веб-сервиса оказалось, что когда поступает сообщение с элементами такого вида: Code: <mt_PlanExportRequestBody xmlns='(некий нэймспейс)' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'> <year>2014</year> то этот узел не преобразуется в мэппинге, то есть полностью игнорируется. Причем нормально всё работало, если узел приходил с префиксом, например, ns0, вот так: Code: <ns0:mt_PlanExportRequestBody xmlns:ns0='(некий нэймспейс)' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'> Но разработчики со стороны 1С сообщили, что повлиять на это не могут. Пришлось в определении интерфейса, обслуживающего SOAP-вызов, тип сообщения задавать не с помощью Message Type, а с помощью External Definition, чтобы самостоятельно можно было создать xsd-файл и вписать туда дополнительные атрибуты. Нужно было вписать elementFormDefault="qualified": Code: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="(некий нэймспейс)" targetNamespace="(некий нэймспейс)" elementFormDefault="qualified"> И для входящего интерфейса, и для исходящего. После этого мэппинги работали корректно. Вот выше вам пишут, что вроде бы можно установить свойство Qualify schema в типах данных, но у меня в SAP PI 7.0, видимо, такого нету. |
Автор: | Chaser009 [ Пт, июл 03 2015, 03:01 ] |
Заголовок сообщения: | Re: Web-сервис SAP в 1С. Проблемы с предачей таблицы. |
Андрей Петин написал: При тестировании веб-сервиса оказалось, что когда поступает сообщение с элементами такого вида: Один-в-один и у нас такое же было. 1С напрочь отказывалась ставить префикс. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |