SAPфорум.RU https://sapboard.ru/forum/ |
|
SOAP-2-RFC https://sapboard.ru/forum/viewtopic.php?f=70&t=85618 |
Страница 1 из 4 |
Автор: | doleynikov [ Ср, янв 22 2014, 12:38 ] |
Заголовок сообщения: | SOAP-2-RFC |
делаю такую интеграцию: есть внешний клиент, который будет по SOAP делать запрос, не который должна ответить САПовская RFCшка. запрос FRC синхронный, запрос по SOAP - асинхронный. запрос и ответ передаются 1:1 как нужно RFC. Правильно ли я понимаю, что нужно сделать? ESB 1)в программный компонент импортировать RFC 2)определить синхронный интерфейс для RFC с указанием его запроса и ответа. 3)определить синхронный интерфейс для SOAP и указать запрос-ответ от RFC. IB 0)импортировать SOFTWARE COMPONENT как Бизнес систему 1) создать 3 коммуникационных канала a) прием SOAP запроса b) обращение к RFC (у нас уже определен для других нужд) с) передача ответа на SOAP 2)Receiver Determination для SOAP->RFC (SAP) 3) соответствующий INTARFACE DETERMINATION 4) SENDER AGREEMENT для отправки SOAP запроса в САП RFC Вот тут я что-то запутался. Голова усохла - не помещается вся схема. Помогите привести в порядок. к Этой RFC есть вызовы из других интеграций, как система отделит их при обработке ответа, чтобы мне приходили только ответы на мои вызовы? |
Автор: | pitroff [ Ср, янв 22 2014, 13:43 ] |
Заголовок сообщения: | Re: SOAP-2-RFC |
Async-sync bridge спасет Вашу голову. Для 7.0, для других версий - аналогично: http://help.sap.com/saphelp_nw70/helpda ... ameset.htm Суть в следующем: 1) Принять асинхронный вызов SOAP - тут SAP PI должен закрыть соединение с клиентом, но дождаться ответа от RFC. Этим занимается модуль RequestResponseBean 2) Вызвать синхронный RFC и дождаться от него ответа - этим занимается тот же модуль адаптера RequestResponseBean (подробнее - по ссылке выше). Это гарантирует получение нужного ответа от RFC. 3) Отправить ответ на SOAP клиента - отправлять будет модуль ResponseOnewayBean, ответ будет перенаправлен на канал связи SOAP receiver - то, куда PI должен отправить асинхронный SOAP-ответ. Итого: IB - три интерфейса: асинхронный SOAP - запрос, синхронный RFC, асинхронный SOAP-ответ. ID: бизнес-сервис для SOAP три канала связи: SOAP sender, SOAP receiver, RFC receiver; связка Reciever Det - Interface Det - RecAgr для пути SOAP -> запрос -> RFC; связка BusService-CommChannel для отправки ответа -> SOAP Sender Agr для SOAP канала - получателя исходного запроса Вроде все. Пишу по памяти, если что-то не пойдет - будем дальше разбираться. |
Автор: | doleynikov [ Ср, янв 22 2014, 14:26 ] |
Заголовок сообщения: | Re: SOAP-2-RFC |
Спасибо у меня сложность с куском Цитата: связка BusService-CommChannel для отправки ответа -> SOAP Sender Agr для SOAP канала - получателя исходного запроса у меня 7.1 и таких названий я не вижу. "BusService" Чему это соответствует? и еще Цитата: Sender Agr для SOAP канала - получателя исходного запроса Это часть цепочки Цитата: связка Reciever Det - Interface Det - RecAgr для пути SOAP -> запрос -> RFC; или нет?
|
Автор: | doleynikov [ Ср, янв 22 2014, 14:38 ] |
Заголовок сообщения: | Re: SOAP-2-RFC |
странно. Для простоты отладки сделал пока не SOAP а файловые каналы запроса-ответа. Получаю такое сообщение Code: Error: com.sap.aii.af.service.cpa.CPAException: com.sap.aii.af.service.cpa.impl.exception.CPALookupException: Channel object configured for adaptertype SOAP|http://sap.com/xi/XI/System, instead of File|http://sap.com/xi/XI/System. где есть необходимость в SOAP? или такая схема не работает для файлов? или SOAP в именах объектов предполагает использование только SOAP? |
Автор: | pitroff [ Ср, янв 22 2014, 14:52 ] |
Заголовок сообщения: | Re: SOAP-2-RFC |
doleynikov написал(а): Цитата: связка BusService-CommChannel для отправки ответа -> SOAP Sender Agr для SOAP канала - получателя исходного запроса у меня 7.1 и таких названий я не вижу. "BusService" Чему это соответствует? Business Component? Это система, которая создается и описывается прямо в ID - без использования SLD. Проклятые маркетологи все время переименовывают - в 7.0 это был Business Service. Это необязательно (можно и Business System в SLD создать), но проще и чуть быстрее (не нужно создавать technical system и вообще заходить в SLD). Зависит от принятого у Вас стандарта - либо все пишем в SLD, либо все внешние системы обозначаем как Business Component. doleynikov написал(а): и еще Цитата: Sender Agr для SOAP канала - получателя исходного запроса Это часть цепочки Цитата: связка Reciever Det - Interface Det - RecAgr для пути SOAP -> запрос -> RFC; или нет?Да, верно. Просто я привык "развязывать" интерфейс на три части - до PI, мэппинг-обработка и путь до получателя. ) |
Автор: | pitroff [ Ср, янв 22 2014, 14:55 ] |
Заголовок сообщения: | Re: SOAP-2-RFC |
doleynikov написал(а): странно. Для простоты отладки сделал пока не SOAP а файловые каналы запроса-ответа. Получаю такое сообщение Code: Error: com.sap.aii.af.service.cpa.CPAException: com.sap.aii.af.service.cpa.impl.exception.CPALookupException: Channel object configured for adaptertype SOAP|http://sap.com/xi/XI/System, instead of File|http://sap.com/xi/XI/System. где есть необходимость в SOAP? или такая схема не работает для файлов? или SOAP в именах объектов предполагает использование только SOAP? Проверьте активацию всех объектов в ID. CPAException - это ошибка чтения из cache, возможно что в кэше сейчас активны старые версии объектов. Посмотрите также sender и receiver agreement на предмет файловых каналов. Еще вариант - параметры модуля ResponseOnewayBean, там тоже должен быть файловый канал. |
Автор: | doleynikov [ Ср, янв 22 2014, 15:28 ] |
Заголовок сообщения: | Re: SOAP-2-RFC |
все активировано. вроде и sender / receiver агрименты правильные. Насчет БизнесСистемы: у меня есть созданная система для этого объекта интеграции. Там часть процессов уже сделана. в частности уже работает выгрузка номенклатуры. Интеграцию для вызова RFC я создавал в этой системе в непересекающихся объектах. Правильно ли это? ЗЫ: сообщения о неправильном типе адаптера возникают только когда есть файл с данными для запроса. Когда его нет - адаптер исправно проверяет ФТП и ошибок не возникает. Может это поможет диагностировать проблему? ЗЫ:ЗЫ: НАШЕЛ! я - лошара! в настройках модулей указал неправильный ключ модуля. Должно быть 1-3-3, а я сделал 1-2-3. Вот система и не понимала, чего от нее хотят. Как-раз неправильно указанный параметр содержал имя канала! Наверное PI пытался выдать результат в некий "канал по-умолчанию" Вроде бы все работает. Если появятся вопросы - я еще задам. Спасибо! |
Автор: | pitroff [ Ср, янв 22 2014, 15:57 ] |
Заголовок сообщения: | Re: SOAP-2-RFC |
doleynikov написал(а): Насчет БизнесСистемы: у меня есть созданная система для этого объекта интеграции. Там часть процессов уже сделана. в частности уже работает выгрузка номенклатуры. Интеграцию для вызова RFC я создавал в этой системе в непересекающихся объектах. Правильно ли это? Да, правильно. Я всегда делаю так - все внутренние SAP-системы настраиваю на отсылку данных в SLD автоматически (RZ70) и определяю для них Business System. Все non-SAP настраиваю в ID как Business Component, присваивая ей нужные мне интерфейсы и каналы связи. Единственное исключение - если у non-SAP огромное количество интерфейсов. Тогда проще прописать ее в SLD, назначить Software Component и все интерфейсы создавать в этом SC - тогда во время настройки ID будет брать список интерфейсов иcходя из SC. doleynikov написал(а): Вроде бы все работает. Если появятся вопросы - я еще задам. Спасибо! Ну и славно. Не за что. ) |
Автор: | doleynikov [ Вт, янв 28 2014, 11:34 ] |
Заголовок сообщения: | Re: SOAP-2-RFC |
Добрый день, коллеги! Тестирование на файловых каналах прошло отлично, но при переделке на SOAP столкнулся с вопросом, что отдавать программистам? какие WSDL будут достаточны, чтобы сделать сервис? то же самое, если приемный сервис уже готов, что делать, чтобы программер добавил интерфейс к своему софту? я в сервисах не волоку, даже вопрос программеру поставить затрудняюсь. Он говорит, что WSDL нужен, а как правильный получить в PI - не знаю. Подскажите! |
Автор: | pitroff [ Вт, янв 28 2014, 12:12 ] |
Заголовок сообщения: | Re: SOAP-2-RFC |
Это уже мелочи. [s]WSDL для sender SOAP генерируется на основе созданного интерфейса из Integration builder: https://scn.sap.com/thread/1560171[/s] UPD: Отставить, смотреть пост ниже. А для receiver - нужен просто wsdl сервиса, он где-то то-ли во вкладках, то-ли в меню Service Interface. Выгрузить в файл и отдать программеру. |
Автор: | doleynikov [ Вт, янв 28 2014, 13:12 ] |
Заголовок сообщения: | Re: SOAP-2-RFC |
Спасибо, попробуем. |
Автор: | pitroff [ Вт, янв 28 2014, 20:28 ] |
Заголовок сообщения: | Re: SOAP-2-RFC |
Прошу прощения, отвечал с утра и без системы - кое-где наврал. ) 1) SOAP Sender WSDL Генерируем в Configuration Builder, меню Tools -> Display WSDL... Открывается помощник, в котором задаем следующее: - URL of web server (кнопку Propose URL не тыкать и ей не верить - врет с испокон веков) Вбиваем строку такого вида http://<host name>:<port name>/XISOAPAdapter/MessageServlet?channel=<party name>:<service name>:<channel name> Данные подставляем свои, если party не нужен - пропускаем, но двоеточие после этого необходимо, то есть http://блабла?channel =:NashSystem:NashChannel Этот URL будет занесен в WSDL и именно на него должен будет поступить вызов от внешнего клиента. - Interface - выбираем тот самый наш Outbound Interface с запросом от внешней системы - Sender - вносим имя системы-отправителя(как она называется в PI, имя должно быть тем же, что и в URL), имя интерфейса/пространство имен Проверяем все данные, жмем Finish - получаем WSDL, которую отдаем программисту со словами: "Вот WSDL для вызова PI". 2) Receiver SOAP Генерируем в Integration Builder, выбираем свой Inbound Service Interface и в нем меню Tools -> Export WSDL WSDL сохраняется в локальный файл и отдается программисту со словами - "нам нужен вот такой сервис, мы на него будем слать ответ". Можно, конечно, sender service через SOAMANAGER провести - но это в Вашем случае будет лишний геморрой. ) Правильность первой WSDL можно до передачи проверить в SOAPUI - очень удобный freeware для всяких SOAP дел, рекомендую. |
Автор: | doleynikov [ Пт, янв 31 2014, 15:47 ] |
Заголовок сообщения: | Re: SOAP-2-RFC |
А подскажите еще такой вопрос, где можно посмотреть правильный HOST:PORT ? <service name> - это имя сервиса асинхронного сервиса передачи запроса в Enterprise Service Builder? |
Автор: | pitroff [ Пт, янв 31 2014, 19:54 ] |
Заголовок сообщения: | Re: SOAP-2-RFC |
<service name> - это имя системы-отправителя (Business System или Business Component - как у Вас определено в Configuration Builder) <host>:<port> - это http-порт J2EE сервера PI, обычно имя хоста + 5XX00, где XX - номер инстанции Вот тут, в "result" про url подробнее есть: http://help.sap.com/saphelp_nwpi711/hel ... ameset.htm P.S.: Кстати, авторы этой статьи хелпа так и не смогли договориться про то, нужно ли двоеточие, если party отсутствует. %) В Prerequisites написано - с двоеточием, в Result - без. Я двоеточие ставлю - вроде работает. |
Автор: | doleynikov [ Пн, фев 03 2014, 11:34 ] |
Заголовок сообщения: | Re: SOAP-2-RFC |
Что-то не выходит каменный цветок. У меня SOAP адаптеры сделаны на AXIS фреймворке. У меня в модулях такое: Code: 1 AF_Adapters/axis/HandlerBean Local Enterprise Bean xireq 2 AF_Adapters/axis/AFAdapterBean Local Enterprise Bean afreq 3 AF_Modules/RequestResponseBean Local Enterprise Bean 1 4 CallSapAdapter Local Enterprise Bean sap 5 AF_Modules/ResponseOnewayBean Local Enterprise Bean 3 6 AF_Adapters/axis/AFAdapterBean Local Enterprise Bean afresp 7 AF_Adapters/axis/HandlerBean Local Enterprise Bean xires А вот что в параметрах Code: 1 passTrough true 3 ReceiverService ISTORE 3 reseiverCannel SOAP_Receiver_D sap module.pivot true xireq handler.type java:com.sap.aii.axis.xi.XI30InboundHandler xires handler.type java:com.sap.aii.axis.xi.XI30InboundHandler Делаю WSDL на SenderAgreement и пробую обратиться из SOAPUI. Заполняю тестовый запрос как делал в текстовом файле, теми-же значениями. в логах канала не появляется никаких сообщений. Получается даже обращение на канал не приходит? Канал сам в странном статусе: Code: ISTORE_SOAP_SENDER Channel started but inactive PS: Как я понял, это потому, что не было сообщений, но я не могу отправить сообщение с SOAPUI. может научите, кто знает? PSS: Проклятый прокси! Теперь обращение прошло, но есть сообщение: Code: HTTP/1.1 500 Internal Server Error Что это?
server: SAP NetWeaver Application Server 7.20 / AS Java 7.10 content-type: text/xml; charset=utf-8 content-encoding: gzip date: Tue, 04 Feb 2014 05:52:27 GMT transfer-encoding: chunked <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.generalException</faultcode> <faultstring>failed to invoke the module proessor; nested exception is: java.lang.NullPointerException: while trying to invoke the method com.sap.aii.adapter.axis.ra.Adapter.getService() of a null object returned from com.sap.aii.adapter.axis.ra.AdapterManager.getAdapter(java.lang.String)</faultstring> <detail> <ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">sap-pi-00-d.xxxxxx.ru</ns1:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> |
Страница 1 из 4 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |