Текущее время: Чт, мар 28 2024, 12:16

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Integration process, Send synchronous и Fault Message
СообщениеДобавлено: Чт, апр 28 2011, 18:03 
Начинающий
Начинающий

Зарегистрирован:
Чт, апр 28 2011, 17:47
Сообщения: 13
Приветствую почтенное сообщество!

Господа, не откажите в любезности помочь с такой проблемой. Есть некий integration process, в котором используется объект Send в режиме Synchronous. В свою очередь, для него определен интерфейс, в котором есть request, response и fault message. В последнем приходит application exception, которое генерит сервис-получатель. Вопрос: можно ли как-нибудь в Integration process получить это исключение в виде сообщения, чтобы прогнать через mapping и куда-нибудь отправить? Тема вроде бы тривиальная, но никак не могу сообразить, как это сделать. Если нет, то каким вообще способом можно добраться до содержимого такого исключения?

Заранее благодарен.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Integration process, Send synchronous и Fault Message
СообщениеДобавлено: Пт, апр 29 2011, 07:51 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 17:44
Сообщения: 1001
Откуда: что и все
Пол: Мужской
несмотря на всю тривиальность, сделать подобную штуку пришлось через свой меппинг, т.к. не смог понять как использовать Fault Message и кто его заполняет. У кого-нибудь получилось штатным способом?

(я лезу в таблицы абапа и джавы и выгребаю оттуда все детали ошибки)

_________________
Telegram-chat: PO, CPI-PI, java, groovy


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Integration process, Send synchronous и Fault Message
СообщениеДобавлено: Пт, апр 29 2011, 07:55 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 17:44
Сообщения: 1001
Откуда: что и все
Пол: Мужской
кстати есть идея и желание написать http-прокси который бы ловил неотлавливаемые SOAP-адаптером ошибки и возвращал их как SOAP fault, а то задолбал уже саповский подход к этой теме ("а вы сторонним приложением узнайте в чём там ошибка").

_________________
Telegram-chat: PO, CPI-PI, java, groovy


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Integration process, Send synchronous и Fault Message
СообщениеДобавлено: Пт, апр 29 2011, 13:19 
Начинающий
Начинающий

Зарегистрирован:
Чт, апр 28 2011, 17:47
Сообщения: 13
chumpa написал:
несмотря на всю тривиальность, сделать подобную штуку пришлось через свой меппинг, т.к. не смог понять как использовать Fault Message и кто его заполняет. У кого-нибудь получилось штатным способом?

(я лезу в таблицы абапа и джавы и выгребаю оттуда все детали ошибки)


Я готов даже на свой маппинг, но вот откуда взять сообщение для него? Каким образом в Integration process'е можно получить содержимое ошибки?
И не знает ли кто, как можно в Integration process'е добраться до тэга SAP:Error из заголовка сообщения?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Integration process, Send synchronous и Fault Message
СообщениеДобавлено: Пт, апр 29 2011, 15:09 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 17:44
Сообщения: 1001
Откуда: что и все
Пол: Мужской
я именно до SAP:* полей и добираюсь. А заодно и до деталей комм.канала через OutboundBinding.
на входе меппинга -- MessageId реквеста, только он по цепочке определяется.

Вот код абаповского меппинга:
Code:
I_MESSAGEID   TYPE SXMSMGUID
O_PROP_MAIN   TYPE STRING
O_PROP_RUNTIME   TYPE STRING
O_PROP_ERROR   TYPE STRING
O_PROP_OB   TYPE STRING


method RETRIEVE_PERSISTED .
  data: l_sxmspmast  type tabname
     , ls_sxmspmast  type sxmspmast
     , ls_sxmspmast2 type sxmspmast
     , lt_msgkey     type SXMSMSGKEY_TAB
     , ls_msgkey     type line of SXMSMSGKEY_TAB
     , lt_verst      type SXMSVERST
     , ls_verst      type line of SXMSVERST
     , ls_prop       type SXMSPROPS
     , ls_sysuuid    type sysuuid
     .

  CALL METHOD CL_XMS_PERSIST=>GET_CURRENT_TABLE_CONTAINER
    IMPORTING
      EX_MASTER       = l_sxmspmast
      .
  select single msgguid pid
    from (l_sxmspmast)
    into (ls_sxmspmast-msgguid, ls_sxmspmast-pid)
    where eo_refid_i = 'MSGID'
      and eo_refvl_i = i_messageid
      and msgguid ne i_messageid .
  if sy-subrc eq 0 .
    select single msgguid pid
      from (l_sxmspmast)
      into (ls_sxmspmast2-msgguid, ls_sxmspmast2-pid)
      where ( ref_to_msg eq ls_sxmspmast-msgguid
         or ref_to_rec_msg eq ls_sxmspmast-msgguid
         ) and msgguid ne ls_sxmspmast-msgguid
    .
    if sy-subrc eq 0 .
      ls_msgkey-msgguid = ls_sxmspmast2-msgguid .
      ls_msgkey-pid = ls_sxmspmast2-pid .
      append ls_msgkey to lt_msgkey .
    else .
      ls_msgkey-msgguid = ls_sxmspmast-msgguid .
      ls_msgkey-pid = ls_sxmspmast-pid .
      append ls_msgkey to lt_msgkey .
    endif .
  else .
    ls_msgkey-msgguid = i_messageid .
    select single pid from (l_sxmspmast) into ls_msgkey-pid where msgguid eq ls_sysuuid-c .
    append ls_msgkey to lt_msgkey .
  endif .
  if lt_msgkey[] is not initial .
    CALL METHOD CL_XMS_PERSIST_ADM=>GET_MSG_PERSIST_TAB
      EXPORTING
        IM_MSGKEY_TAB     = lt_msgkey[]
      IMPORTING
        EX_SXMSVERST      = lt_verst[]
        .
    read table lt_verst into ls_verst index 1 .
    if sy-subrc eq 0 .
      loop at ls_verst-t_prop into ls_prop .
        if ls_prop-lcname eq 'Error' .
          O_PROP_ERROR = ls_prop-CONTENT .
        elseif ls_prop-lcname eq 'Main' .
          O_PROP_MAIN = ls_prop-CONTENT .
        elseif ls_prop-lcname eq 'RunTime' .
          O_PROP_RUNTIME = ls_prop-CONTENT .
        elseif ls_prop-lcname eq 'OutboundBinding' .
          O_PROP_OB = ls_prop-CONTENT .
        elseif ls_prop-lcname eq 'HTMLError' .
*          O_PROP_OB = ls_prop-CONTENT .
        elseif ls_prop-lcname eq 'DynamicConfiguration' .
*          O_PROP_OB = ls_prop-CONTENT .
        else .
          if sy-uname eq 'KUZNETCOVIN' .
            write: / ls_prop-lcname .
          endif .
        endif .
      endloop .
    endif .
  endif .

endmethod .


Это ядро перехвата ошибок, вокруг него навешана обвязка которая в итоге шлёт письмо пользователю или может генерировать более осмысленные алерты.

Интеграционный процесс выглядит так: https://docs.google.com/leaf?id=0B9qJfWgtLP3KZGJkMjk0OGQtMTQ1OC00MDJlLWE5ODItZWJlZTNjNjc4NTI2&hl=ru

Меппинг: https://docs.google.com/leaf?id=0B9qJfWgtLP3KMWFjYzMzMDYtMDQ4ZC00ZjgzLThkZTAtNTAyNDQxNjVjOWU2&hl=ru

Только в ZCL_XI_GET_ERROR_DETAILS используется IF_MAPPING~EXECUTE который делает некую ненужную скорее всего вам обвязку. Ядро его, RETRIEVE_PERSISTED, я описал ранее.

_________________
Telegram-chat: PO, CPI-PI, java, groovy


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Integration process, Send synchronous и Fault Message
СообщениеДобавлено: Пт, апр 29 2011, 16:07 
Начинающий
Начинающий

Зарегистрирован:
Чт, апр 28 2011, 17:47
Сообщения: 13
Спасибо большое за подробности. К сожалению, я ABAP'а не знаю (да и PI у нас 7.0, параметры в маппинг не передать), но технология понятна. Теперь хоть ясно, в какую сторону копать :)

И еще дилетантский вопрос, если позволите: до этих же таблиц можно добраться, если написать маппинг на Java?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Integration process, Send synchronous и Fault Message
СообщениеДобавлено: Пт, апр 29 2011, 16:22 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 17:44
Сообщения: 1001
Откуда: что и все
Пол: Мужской
можно на 7.0 написать без параметров.
До этих таблиц из джавы лучше не добираться, т.к. написан код который взят из САПовского ФМа и лучше делать всё как делает САП. А самое главное -- CALL METHOD CL_XMS_PERSIST_ADM=>GET_MSG_PERSIST_TAB сымитировать на джаве ой как проблематично в силу того что кластерные поля хранятся в нечитаемом джавой виде.
К тому же всё-таки джава и абап это 2 разные схемы БД и надо заморачиваться с доступом.

Хотите, напишу вам на абапе под 7.0? всё равно хотел выкладывать на гуглорепозиторий, самому интересен опыт портирования. Параметры тут не нужны принципиально, а лишь облегчают доступ, в семёрошной версии будет лишь немного другой меппинг и request message на входе, то есть несколько абаповских меппингов с одним классом придётся плодить.

_________________
Telegram-chat: PO, CPI-PI, java, groovy


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Integration process, Send synchronous и Fault Message
СообщениеДобавлено: Пт, апр 29 2011, 16:36 
Начинающий
Начинающий

Зарегистрирован:
Чт, апр 28 2011, 17:47
Сообщения: 13
chumpa написал:
Хотите, напишу вам на абапе под 7.0? всё равно хотел выкладывать на гуглорепозиторий, самому интересен опыт портирования. Параметры тут не нужны принципиально, а лишь облегчают доступ, в семёрошной версии будет лишь немного другой меппинг и request message на входе, то есть несколько абаповских меппингов с одним классом придётся плодить.


Только если это Вас не затруднит - я был бы Вам очень признателен. А я пока почитаю что-нибудь про ABAP :)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB