Текущее время: Вт, апр 16 2024, 17:47

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




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: UDF для извлечения данных из служебной части сообщения
СообщениеДобавлено: Пн, окт 25 2010, 11:10 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, июн 08 2005, 13:47
Сообщения: 293
хочу UDF, которая достанет мне имя пользователя в SAP, который осуществил вызов прокси.
Порывшись на sdn, я изобрел вот такой код:
Code:
public String getUser(Container container){
DynamicConfiguration conf = (DynamicConfiguration) container.getTransformationParameters().get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);

DynamicConfigurationKey keyURL1 = DynamicConfigurationKey.create( "http://sap.com/xi/XI/Message/30", "User");
String ourUser = conf.get(keyURL1);
return ourUser;
}

но он мне возвращает null :(
Есть у кого какие мнения? может без udf можно юзера как-то достать? или код ошибочный?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDF для извлечения данных из служебной части сообщения
СообщениеДобавлено: Пн, окт 25 2010, 11:23 
Директор
Директор

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

И видно ли пользователя в трейсе?

Да, кстати, возможно Principal propagation в канале-сендере не включен.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDF для извлечения данных из служебной части сообщения
СообщениеДобавлено: Пн, окт 25 2010, 12:24 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, июн 08 2005, 13:47
Сообщения: 293
в SXI_MONITOR оно вот так выглядит (нужен <SAP:User>):
Code:
<SAP:RunTime xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
  <SAP:Date>20101021</SAP:Date>
  <SAP:Time>143854</SAP:Time>
  <SAP:Host>xida</SAP:Host>
  <SAP:SystemId>XID</SAP:SystemId>
  <SAP:SystemNr>00</SAP:SystemNr>
  <SAP:OS>Linux</SAP:OS>
  <SAP:DB>ORACLE</SAP:DB>
  <SAP:Language />
  <SAP:ProcStatus>012</SAP:ProcStatus>
  <SAP:AdapterStatus>000</SAP:AdapterStatus>
  <SAP:User>TESTUSER1</SAP:User>
  <SAP:TraceLevel>1</SAP:TraceLevel>
  <SAP:LogSeqNbr>000</SAP:LogSeqNbr>
  <SAP:RetryLogSeqNbr>000</SAP:RetryLogSeqNbr>
  <SAP:PipelineIdInternal>SAP_CENTRAL</SAP:PipelineIdInternal>
  <SAP:PipelineIdExternal>CENTRAL</SAP:PipelineIdExternal>
  <SAP:PipelineElementId>5DC3C53B4BB7B62DE10000000A1148F5</SAP:PipelineElementId>
  <SAP:PipelineStartElementId>5EC3C53B4BB7B62DE10000000A1148F5</SAP:PipelineStartElementId>
  <SAP:PipelineService>PLSRV_RECEIVER_MESSAGE_SPLIT</SAP:PipelineService>
  <SAP:QIdInternal>XBTOP___0000</SAP:QIdInternal>
  <SAP:CommitActor>X</SAP:CommitActor>
  <SAP:ParentId ChildNo="0" ChildTotal="0">4CB947A43E1369A9E1000000AC1F0242</SAP:ParentId>
  <SAP:SplitNumber>0</SAP:SplitNumber>
  <SAP:NumberOfRetries>0</SAP:NumberOfRetries>
  <SAP:NumberOfManualRetries>0</SAP:NumberOfManualRetries>
  <SAP:TypeOfEngine client="001">CENTRAL</SAP:TypeOfEngine>
  <SAP:PlsrvExceptionCode />
  <SAP:EOReferenceRuntime type="TID">AC1F022975A94CC0183E0157</SAP:EOReferenceRuntime>
  <SAP:EOReferenceInbound type="TID" />
  <SAP:EOReferenceOutbound type="TID" />
  <SAP:MessageSizePayload>1866</SAP:MessageSizePayload>
  <SAP:MessageSizeTotal>13603</SAP:MessageSizeTotal>
  <SAP:PayloadSizeRequest>1866</SAP:PayloadSizeRequest>
  <SAP:PayloadSizeRequestMap>0</SAP:PayloadSizeRequestMap>
  <SAP:PayloadSizeResponse>0</SAP:PayloadSizeResponse>
  <SAP:PayloadSizeResponseMap>0</SAP:PayloadSizeResponseMap>
  <SAP:Reorganization>INI</SAP:Reorganization>
  <SAP:AdapterInbound>IENGINE</SAP:AdapterInbound>
  <SAP:InterfaceAction>DEL</SAP:InterfaceAction>
  <SAP:RandomNumber>77</SAP:RandomNumber>
  <SAP:AckStatus>000</SAP:AckStatus>
  <SAP:SkipReceiverDetermination />
  <SAP:Serialize_Children>X</SAP:Serialize_Children>
  </SAP:RunTime>



Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDF для извлечения данных из служебной части сообщения
СообщениеДобавлено: Пн, окт 25 2010, 12:31 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 17:44
Сообщения: 1001
Откуда: что и все
Пол: Мужской
Это не то, нужна секция не SAP:RunTime а SAP:DynamicConfiguration

Как из RunTime вытаскивать данные в меппинге, я не знаю, хотя наверняка возможно. Но в штатном TransformationInput-классе сходу такого нет.

PS А вы пользователей не путаете случаем?

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDF для извлечения данных из служебной части сообщения
СообщениеДобавлено: Пн, окт 25 2010, 12:39 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, июн 08 2005, 13:47
Сообщения: 293
жаль...
пользователей не путаю, мне нужен тот, который работал в сап системе и своими действиями вызвал запуск прокси.
Хорошо, а того, под которым прокся законнектилась к XI можно как-то определить? Дело в том, что они в отправляющей сап системе и в ХИ совпадают, поэтому мне все равно, либо того, который был в сап, либо того, который в ХИ.... я так понял, в куске сообщения, что я привел, там как раз пользователь XI находится?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDF для извлечения данных из служебной части сообщения
СообщениеДобавлено: Пн, окт 25 2010, 12:43 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, июн 08 2005, 13:47
Сообщения: 293
sapman написал(а):
жаль...
пользователей возможно и путаю, мне нужен тот, который работал в сап системе и своими действиями вызвал запуск прокси.
Хорошо, а того, под которым прокся законнектилась к XI можно как-то определить? Дело в том, что они в отправляющей сап системе и в ХИ совпадают, поэтому мне все равно, либо того, который был в сап, либо того, который в ХИ.... я так понял, в куске сообщения, что я привел, там как раз пользователь XI находится?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDF для извлечения данных из служебной части сообщения
СообщениеДобавлено: Пн, окт 25 2010, 12:49 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 17:44
Сообщения: 1001
Откуда: что и все
Пол: Мужской
Да, это локальный пользователь XI а не удалённый. Я и удивился как он может помочь, но раз они совпадают то на крайний случай.

Если нужен удалённый то надо, повторюсь, в сендер-канале в XI включить Principal Propagation и смотреть DC.
Попутно возможно этот PP придётся донастроить если им ни разу не пользовались.

Ну или -- в клиентском прокси заполнять самому.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDF для извлечения данных из служебной части сообщения
СообщениеДобавлено: Пн, окт 25 2010, 12:54 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 17:44
Сообщения: 1001
Откуда: что и все
Пол: Мужской
Возможно я немного пессимист но "определить в XI пользователя который своими действиями вызвал активацию прокси в системе ZZZ" без напильника не получится. "Другая" система которая через свой Local IE вызывает XI делает это под стандартным юзером в SM59. То есть нужно или руками SY-UNAME протаскивать либо настраивать PP.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDF для извлечения данных из служебной части сообщения
СообщениеДобавлено: Пн, окт 25 2010, 13:06 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, июн 08 2005, 13:47
Сообщения: 293
Да, я немного напутал, дело в том, что у меня юзер который в sm59, настроен как current и соответственно какой в удаленной системе, такой и в XI коннектится (набор пользователей в XI и SAP системе совпадает). Соответственно мне надо получить имя пользователя в XI (<SAP:user> из RunTime).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDF для извлечения данных из служебной части сообщения
СообщениеДобавлено: Пн, окт 25 2010, 13:44 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 17:44
Сообщения: 1001
Откуда: что и все
Пол: Мужской
Мда...

Легальные документированные способы:
1. Через Adapter-Specific Message Attributes -- для Sender XI не катит
2. Через EJB -- для Sender XI не катит
других сходу не придумал. На http://help.sap.com/javadocs/pi/pi711sp03/index.html интерфейса к RunTime не увидел.

На http://forums.sdn.sap.com/thread.jspa?threadID=397111 люди предлагают использовать Plain HTTP Sender но там другая немного ситуация.

Быстрогрязные способы:
1. Зная MessageId и имея готовое соединение с БД средствами джавы в меппинге лезть в SAPSR3DB.BC_MSG (для джавы 7.1 и если бы сендером был не XI-адаптер) или в абаповском меппинге в SAPSR3.SXMSPMAST + где-то ещё (для XI-sender) найти по MessageId и PipelineId сообщение и из него выкусить
2. Найти BADI или новомодный Explicit enhancement, забыл как точно называется -- в общем найти в отладчике куда в IE приходит управление при вызове из прокси, найти первое удобное для вставки кода место и туда дописать

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDF для извлечения данных из служебной части сообщения
СообщениеДобавлено: Пн, окт 25 2010, 15:45 
Директор
Директор

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

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDF для извлечения данных из служебной части сообщения
СообщениеДобавлено: Вт, окт 26 2010, 08:01 
Директор
Директор

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

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDF для извлечения данных из служебной части сообщения
СообщениеДобавлено: Пт, мар 11 2011, 20:14 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 17:44
Сообщения: 1001
Откуда: что и все
Пол: Мужской
Оживлю топик.

В синхронном запросе к куче сторонних БД (ну или веб-сервисов, неважно) возникло желание получать в ccBPM нормальный текст ошибки и запроса, который эту ошибку вызвал. В результате был написан меппинг, который находит цепочку сообщений и вытягивает SAP:Error и детали (sapman спрашивал про SAP:RunTime -- могу и такое легко). Вот что например он делает для отправки сообщения:

Code:
Произошла ошибка при выполнении запроса к базе данных

Текст запроса

<query>
<askRemains action="SQL_QUERY">
<access>select * from dual where zzz = 1</access>
</askRemains>
</query>
select * from dual where zzz = 1
Текст ошибки

<SAP:Error xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:mustUnderstand="1">
<SAP:Category>XIAdapterFramework</SAP:Category>
<SAP:Code area="MESSAGE">GENERAL</SAP:Code>
<SAP:P1/>
<SAP:P2/>
<SAP:P3/>
<SAP:P4/>
<SAP:AdditionalText>com.sap.engine.interfaces.messaging.api.exception.MessagingException: Error processing request in sax parser: Error when executing statement for table/stored proc. 'askRemains' (structure 'query'): java.sql.SQLException: ORA-00904: "ZZZ": invalid identifier</SAP:AdditionalText>
<SAP:Stack/>
<SAP:Retry>M</SAP:Retry>
</SAP:Error>


Это не алерты. Алерты совсем по-другому работают.
Это больше похоже на меппинг из Fault Message Type и Request в Response (но такой функциональности в XI нет к сожалению, да и для многих типов ошибок и адаптеров FMT недоступен).

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UDF для извлечения данных из служебной части сообщения
СообщениеДобавлено: Сб, мар 12 2011, 20:38 
Специалист
Специалист

Зарегистрирован:
Пт, май 07 2010, 13:17
Сообщения: 120
Откуда: Сургут
Пол: Мужской
Интересно, такая задача возникала буквально вчера, пока отложил.
Куда копать UDF с
chumpa написал:
Мда...
Быстрогрязные способы:
1. Зная MessageId и имея готовое соединение с БД средствами джавы в меппинге лезть в SAPSR3DB.BC_MSG (для джавы 7.1 и если бы сендером был не XI-адаптер) или в абаповском меппинге в SAPSR3.SXMSPMAST + где-то ещё (для XI-sender) найти по MessageId и PipelineId сообщение и из него выкусить
2. Найти BADI или новомодный Explicit enhancement, забыл как точно называется -- в общем найти в отладчике куда в IE приходит управление при вызове из прокси, найти первое удобное для вставки кода место и туда дописать

или Java Mapping?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: UDF для извлечения данных из служебной части сообщения
СообщениеДобавлено: Вс, мар 13 2011, 12:49 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 17:44
Сообщения: 1001
Откуда: что и все
Пол: Мужской
собственно UDF -- мимо кассы
только RFC lookup с Z-модулем или лучше всё-таки абап-меппинг в OM

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


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

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


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

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


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

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