SAPфорум.RU https://sapboard.ru/forum/ |
|
UDF для извлечения данных из служебной части сообщения https://sapboard.ru/forum/viewtopic.php?f=70&t=64911 |
Страница 1 из 1 |
Автор: | sapman [ Пн, окт 25 2010, 11:10 ] |
Заголовок сообщения: | UDF для извлечения данных из служебной части сообщения |
хочу 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 можно юзера как-то достать? или код ошибочный? |
Автор: | chumpa [ Пн, окт 25 2010, 11:23 ] |
Заголовок сообщения: | Re: UDF для извлечения данных из служебной части сообщения |
Что-то я такой записи в DC ни разу не видел. Скорее всего не заполняется на стороне клиента прокси. А в SXI_MONITOR оно видно? если да то грабли в коде если нет то надо EJB приделывать или что-то ещё придумывать. И видно ли пользователя в трейсе? Да, кстати, возможно Principal propagation в канале-сендере не включен. |
Автор: | sapman [ Пн, окт 25 2010, 12:24 ] |
Заголовок сообщения: | Re: UDF для извлечения данных из служебной части сообщения |
в 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> |
Автор: | chumpa [ Пн, окт 25 2010, 12:31 ] |
Заголовок сообщения: | Re: UDF для извлечения данных из служебной части сообщения |
Это не то, нужна секция не SAP:RunTime а SAP:DynamicConfiguration Как из RunTime вытаскивать данные в меппинге, я не знаю, хотя наверняка возможно. Но в штатном TransformationInput-классе сходу такого нет. PS А вы пользователей не путаете случаем? |
Автор: | sapman [ Пн, окт 25 2010, 12:39 ] |
Заголовок сообщения: | Re: UDF для извлечения данных из служебной части сообщения |
жаль... пользователей не путаю, мне нужен тот, который работал в сап системе и своими действиями вызвал запуск прокси. Хорошо, а того, под которым прокся законнектилась к XI можно как-то определить? Дело в том, что они в отправляющей сап системе и в ХИ совпадают, поэтому мне все равно, либо того, который был в сап, либо того, который в ХИ.... я так понял, в куске сообщения, что я привел, там как раз пользователь XI находится? |
Автор: | sapman [ Пн, окт 25 2010, 12:43 ] |
Заголовок сообщения: | Re: UDF для извлечения данных из служебной части сообщения |
sapman написал(а): жаль...
пользователей возможно и путаю, мне нужен тот, который работал в сап системе и своими действиями вызвал запуск прокси. Хорошо, а того, под которым прокся законнектилась к XI можно как-то определить? Дело в том, что они в отправляющей сап системе и в ХИ совпадают, поэтому мне все равно, либо того, который был в сап, либо того, который в ХИ.... я так понял, в куске сообщения, что я привел, там как раз пользователь XI находится? |
Автор: | chumpa [ Пн, окт 25 2010, 12:49 ] |
Заголовок сообщения: | Re: UDF для извлечения данных из служебной части сообщения |
Да, это локальный пользователь XI а не удалённый. Я и удивился как он может помочь, но раз они совпадают то на крайний случай. Если нужен удалённый то надо, повторюсь, в сендер-канале в XI включить Principal Propagation и смотреть DC. Попутно возможно этот PP придётся донастроить если им ни разу не пользовались. Ну или -- в клиентском прокси заполнять самому. |
Автор: | chumpa [ Пн, окт 25 2010, 12:54 ] |
Заголовок сообщения: | Re: UDF для извлечения данных из служебной части сообщения |
Возможно я немного пессимист но "определить в XI пользователя который своими действиями вызвал активацию прокси в системе ZZZ" без напильника не получится. "Другая" система которая через свой Local IE вызывает XI делает это под стандартным юзером в SM59. То есть нужно или руками SY-UNAME протаскивать либо настраивать PP. |
Автор: | sapman [ Пн, окт 25 2010, 13:06 ] |
Заголовок сообщения: | Re: UDF для извлечения данных из служебной части сообщения |
Да, я немного напутал, дело в том, что у меня юзер который в sm59, настроен как current и соответственно какой в удаленной системе, такой и в XI коннектится (набор пользователей в XI и SAP системе совпадает). Соответственно мне надо получить имя пользователя в XI (<SAP:user> из RunTime). |
Автор: | chumpa [ Пн, окт 25 2010, 13:44 ] |
Заголовок сообщения: | Re: UDF для извлечения данных из служебной части сообщения |
Мда... Легальные документированные способы: 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 приходит управление при вызове из прокси, найти первое удобное для вставки кода место и туда дописать |
Автор: | chumpa [ Пн, окт 25 2010, 15:45 ] |
Заголовок сообщения: | Re: UDF для извлечения данных из служебной части сообщения |
Набросал пример, включил PP но чуда не вышло. Может надо output-CONTROLLER как-то хитро заполнять, будет время -- подумаю. |
Автор: | chumpa [ Вт, окт 26 2010, 08:01 ] |
Заголовок сообщения: | Re: UDF для извлечения данных из служебной части сообщения |
Думаю только АБАП-меппинг будет правильным решением задачи, скорее всего весь SAP:RunTime в нём легко находится в параметрах, и наоборот -- в джаве он принципиально отсутствует. Даже в джавашной схеме таких таблиц нету. |
Автор: | chumpa [ Пт, мар 11 2011, 20:14 ] |
Заголовок сообщения: | Re: UDF для извлечения данных из служебной части сообщения |
Оживлю топик. В синхронном запросе к куче сторонних БД (ну или веб-сервисов, неважно) возникло желание получать в 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 недоступен). |
Автор: | molochko_mf [ Сб, мар 12 2011, 20:38 ] |
Заголовок сообщения: | Re: UDF для извлечения данных из служебной части сообщения |
Интересно, такая задача возникала буквально вчера, пока отложил. Куда копать UDF с chumpa написал: Мда... Быстрогрязные способы: 1. Зная MessageId и имея готовое соединение с БД средствами джавы в меппинге лезть в SAPSR3DB.BC_MSG (для джавы 7.1 и если бы сендером был не XI-адаптер) или в абаповском меппинге в SAPSR3.SXMSPMAST + где-то ещё (для XI-sender) найти по MessageId и PipelineId сообщение и из него выкусить 2. Найти BADI или новомодный Explicit enhancement, забыл как точно называется -- в общем найти в отладчике куда в IE приходит управление при вызове из прокси, найти первое удобное для вставки кода место и туда дописать или Java Mapping? |
Автор: | chumpa [ Вс, мар 13 2011, 12:49 ] |
Заголовок сообщения: | Re: UDF для извлечения данных из служебной части сообщения |
собственно UDF -- мимо кассы только RFC lookup с Z-модулем или лучше всё-таки абап-меппинг в OM |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |