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.
Проклятые маркетологи :twisted: все время переименовывают - в 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: Отставить, смотреть пост ниже. :oops:

А для 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 - без. :D
Я двоеточие ставлю - вроде работает.

Автор:  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/