on 07-26-2011 7:07 AM
Hi all!
I tried to implement a generic Java RFC Lookup class to be called as a Java extension from my XSLT mapping. I found the How-To-Guid Easy RFC lookup from XSLT mappings using a Java helper class and used most of the source code provided.
The return type of the lookup method is org.w3c.dom.Node. The method signature reads:
public static Node lookup(String party, String service, String channelName, NodeList request, Map inputparam) throws Exception
The first document child is returned:
return document.getFirstChild();
I used the following XSLT to call the method:
<xsl:variable name="response" select="rfcl:lookup($party,$service,$channel_name,$request/*,$inputparam)"/>
The lookup is performed successfully as I verified by trace messages. However, no Node or DocumentFragment is returned to the XSLT mapping, but it seems to be a String value. Therefore I cannot use XPath functions or axis on the returned variable like:
$response/*
$response//PO_ITEMS/item[PO_ITEM='00010']
I tried Node and NodeList as return types without success. I verified that data is returned to the variable by outputting its value to the trace. I am running PI 7.11.
Any help is highly appreciated!
Thanks
Hans
Edited by: Hans-Jürgen Schwippert on Jul 26, 2011 8:15 AM
Changed subject
Hi Hans,
Could you please kindly post all the different strings you are receiving as response.
Regards
Anupam
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Anupam
If I output the response as string I get the complete response XML document from the RFC call:
Write to trace:
<xsl:variable name="trace" select="trace:addInfo($response,$inputparam)"/>
Result:
<Trace level="2" type="T"><rfc:BAPI_PO_GETDETAIL.Response xmlns:rfc="urn:sap-com:document:sap:rfc:functions"> <PO_ADDRESS>...</rfc:BAPI_PO_GETDETAIL.Response></Trace>
If I output the response using XPath nothing is written:
Write to trace:
<xsl:variable name="trace" select="trace:addInfo($response//PO_ITEMS/item[1]/PO_ITEM,$inputparam)"/>
Result:
<Trace level="2" type="T"/>
Hi Hans,
In your post you did not provide the entire message, please let us know the valueof the dots .... in the following snippet
<Trace level="2" type="T"><rfc:BAPI_PO_GETDETAIL.Response xmlns:rfc="urn:sap-com:document:sap:rfc:functions"> <PO_ADDRESS>...</rfc:BAPI_PO_GETDETAIL.Response></Trace>
secondly what value out of the entire xml you need as your response. Say for example out of the following xml
<k><a>morning</a><b>hello</b><c>anupam</c></k>
I need the value "hello".
regards
Anupam
Edited by: anupamsap on Jul 26, 2011 11:11 AM
Hi Anupam
Here is the response:
<rfc:BAPI_PO_GETDETAIL.Response xmlns:rfc="urn:sap-com:document:sap:rfc:functions"> <PO_ADDRESS> <ADDRNUMBER>0000200825</ADDRNUMBER> <ADDRHANDLE/> <NATION/> <DATE>0001-01-01</DATE> <DATE_FROM>0001-01-01</DATE_FROM> <DATE_TO>9999-12-31</DATE_TO> <TITLE/> <NAME1>Vogler GmbH + Co. KG</NAME1> <NAME2>Industrielackierungen</NAME2> <NAME3/> <NAME4/> <NAME_TXT/> <NAME_CO/> <CITY1>Luedenscheid</CITY1> <CITY2/> <CITY_CODE/> <CITYP_CODE/> <CHCKSTATUS/> <POST_CODE1>58513</POST_CODE1> <POST_CODE2/> <POST_CODE3/> <PO_BOX/> <PO_BOX_NUM/> <PO_BOX_LOC/> <CITY_CODE2/> <PO_BOX_REG/> <PO_BOX_CTY/> <POSTALAREA/> <TRANSPZONE/> <STREET>Golsbergerstraße 1</STREET> <STREETCODE/> <STREETABBR/> <HOUSE_NUM1/> <HOUSE_NUM2/> <HOUSE_NUM3/> <STR_SUPPL1/> <STR_SUPPL2/> <LOCATION/> <BUILDING/> <FLOOR/> <ROOMNUMBER/> <COUNTRY>DE</COUNTRY> <LANGU>D</LANGU> <REGION/> <SORT1>VOGLER</SORT1> <SORT2/> <SORT_PHN/> <ADDRORIGIN/> <EXTENSION1/> <EXTENSION2/> <TIME_ZONE>CET</TIME_ZONE> <TAXJURCODE/> <ADDRESS_ID/> <REMARK/> <DEFLT_COMM/> <TEL_NUMBER>(0)2351 5676-700</TEL_NUMBER> <TEL_EXTENS/> <FAX_NUMBER>023515676800</FAX_NUMBER> <FAX_EXTENS/> <BUILD_LONG/> </PO_ADDRESS> <PO_HEADER> <PO_NUMBER>4500988963</PO_NUMBER> <CO_CODE>0001</CO_CODE> <DOC_CAT>F</DOC_CAT> <DOC_TYPE>NB</DOC_TYPE> <CNTRL_IND/> <DELETE_IND/> <STATUS/> <CREATED_ON>2011-07-14</CREATED_ON> <CREATED_BY>GAGALAAD</CREATED_BY> <ITEM_INTVL>00010</ITEM_INTVL> <LAST_ITEM>00010</LAST_ITEM> <VENDOR>0000011257</VENDOR> <LANGUAGE>D</LANGUAGE> <PMNTTRMS>ZB36</PMNTTRMS> <DSCNT1_TO>14</DSCNT1_TO> <DSCNT2_TO>0</DSCNT2_TO> <DSCNT3_TO>0</DSCNT3_TO> <CASH_DISC1>0</CASH_DISC1> <CASH_DISC2>0</CASH_DISC2> <PURCH_ORG>0001</PURCH_ORG> <PUR_GROUP>535</PUR_GROUP> <CURRENCY>EUR</CURRENCY> <EXCH_RATE>1.00000</EXCH_RATE> <EX_RATE_FX/> <DOC_DATE>2011-07-14</DOC_DATE> <VPER_START>0000-00-00</VPER_START> <VPER_END>0000-00-00</VPER_END> <APPLIC_BY>0000-00-00</APPLIC_BY> <QUOT_DEAD>0000-00-00</QUOT_DEAD> <BINDG_PER>0000-00-00</BINDG_PER> <WARRANTY>0000-00-00</WARRANTY> <BIDINV_NO/> <QUOTATION/> <QUOT_DATE>0000-00-00</QUOT_DATE> <REF_1/> <SALES_PERS>Ingo Vogler</SALES_PERS> <TELEPHONE/> <SUPPL_VEND/> <CUSTOMER/> <AGREEMENT/> <REJ_REASON/> <COMPL_DLV/> <GR_MESSAGE/> <SUPPL_PLNT/> <RCVG_VEND/> <INCOTERMS1>EXW</INCOTERMS1> <INCOTERMS2/> <TARGET_VAL>0</TARGET_VAL> <COLL_NO/> <DOC_COND>1001169839</DOC_COND> <PROCEDURE>ZM0000</PROCEDURE> <UPDATE_GRP>SAP</UPDATE_GRP> <DIFF_INV>0000011257</DIFF_INV> <EXPORT_NO/> <OUR_REF/> <LOGSYSTEM/> <SUBITEMINT>00001</SUBITEMINT> <MAST_COND/> <REL_GROUP/> <REL_STRAT/> <REL_IND/> <REL_STATUS/> <SUBJ_TO_R/> <TAXR_CNTRY>DE</TAXR_CNTRY> <SCHED_IND/> <VEND_NAME>Vogler GmbH + Co. KG</VEND_NAME> <CURRENCY_ISO>EUR</CURRENCY_ISO> <EXCH_RATE_CM>0</EXCH_RATE_CM> <HOLD/> </PO_HEADER> <EXTENSIONOUT/> <PO_HEADER_TEXTS/> <PO_ITEMS> <item> <PO_NUMBER>4500988963</PO_NUMBER> <PO_ITEM>00010</PO_ITEM> <DELETE_IND/> <STATUS/> <CHANGED_ON>2011-07-14</CHANGED_ON> <SHORT_TEXT>PORTEO: Verkl. Gleitschiene, silber</SHORT_TEXT> <MATERIAL>000000017915501140</MATERIAL> <PUR_MAT>000000017915501140</PUR_MAT> <CO_CODE>0001</CO_CODE> <PLANT>1000</PLANT> <STORE_LOC>0206</STORE_LOC> <TRACKINGNO/> <MAT_GRP>40105</MAT_GRP> <INFO_REC>5300278680</INFO_REC> <VEND_MAT/> <TARGET_QTY>0</TARGET_QTY> <QUANTITY>270.000</QUANTITY> <UNIT>ST</UNIT> <ORDERPR_UN>ST</ORDERPR_UN> <CONV_NUM1>1</CONV_NUM1> <CONV_DEN1>1</CONV_DEN1> <CONV_NUM2>1</CONV_NUM2> <CONV_DEN2>1</CONV_DEN2> <NET_PRICE>129.3000</NET_PRICE> <PRICE_UNIT>100</PRICE_UNIT> <NET_VALUE>349.1100</NET_VALUE> <GROS_VALUE>349.1100</GROS_VALUE> <QUOT_DEAD>0000-00-00</QUOT_DEAD> <GR_PR_TIME>2</GR_PR_TIME> <TAX_CODE/> <SETT_GRP1/> <QUAL_INSP>X</QUAL_INSP> <INFO_UPD/> <PRNT_PRICE>X</PRNT_PRICE> <EST_PRICE/> <NUM_REMIND>0</NUM_REMIND> <REMINDER1>-5</REMINDER1> <REMINDER2>7</REMINDER2> <REMINDER3>12</REMINDER3> <OVERDELTOL>10.0</OVERDELTOL> <UNLIMITED/> <UNDER_TOL>10.0</UNDER_TOL> <VAL_TYPE/> <VAL_CAT/> <REJ_IND/> <COMMENT/> <DEL_COMPL/> <FINAL_INV/> <ITEM_CAT>3</ITEM_CAT> <ACCTASSCAT/> <CONSUMPT/> <DISTRIB/> <PART_INV/> <GR_IND>X</GR_IND> <GR_NON_VAL/> <IR_IND>X</IR_IND> <GR_BASEDIV>X</GR_BASEDIV> <ACKN_REQD/> <ACKNOWL_NO/> <AGREEMENT/> <AGMT_ITEM>00000</AGMT_ITEM> <RECON_DATE>0000-00-00</RECON_DATE> <AGRCUMQTY>0</AGRCUMQTY> <FIRM_ZONE>0</FIRM_ZONE> <TRADE_OFF>0</TRADE_OFF> <BOM_EXPL/> <EXCLUSION/> <BASE_UNIT>ST</BASE_UNIT> <SHIPPING/> <OUTL_TARGV>0</OUTL_TARGV> <NOND_ITAX>0</NOND_ITAX> <RELORD_QTY>0</RELORD_QTY> <PRICE_DATE>0000-00-00</PRICE_DATE> <DOC_CAT>F</DOC_CAT> <EFF_VALUE>349.1100</EFF_VALUE> <COMMITMENT/> <CUSTOMER/> <ADDRESS/> <COND_GROUP/> <NO_C_DISC/> <UPDATE_GRP>SAP</UPDATE_GRP> <PLAN_DEL>30</PLAN_DEL> <NET_WEIGHT>.099</NET_WEIGHT> <WEIGHTUNIT>KG</WEIGHTUNIT> <TAX_JUR_CD/> <PRINT_REL/> <SPEC_STOCK/> <SETRESERNO>0000000000</SETRESERNO> <SETTLITMNO>0000</SETTLITMNO> <NOT_CHGBL/> <CTR_KEY_QM>0001</CTR_KEY_QM> <CERT_TYPE/> <EAN_UPC/> <CONF_CTRL/> <REV_LEV/> <FUND/> <FUNDS_CTR/> <CMMT_ITEM/> <BA_PARTNER/> <PTR_ASS_BA/> <PROFIT_CTR/> <PARTNER_PC/> <PRICE_CTR/> <GROSS_WGHT>.099</GROSS_WGHT> <VOLUME>0</VOLUME> <VOLUMEUNIT>CDM</VOLUMEUNIT> <INCOTERMS1/> <INCOTERMS2/> <ADVANCE/> <PRIOR_VEND/> <SUB_RANGE/> <PCKG_NO>0000000000</PCKG_NO> <STATISTIC/> <HL_ITEM>00000</HL_ITEM> <GR_TO_DATE>0000-00-00</GR_TO_DATE> <SUPPL_VEND/> <SC_VENDOR/> <CONF_MATL/> <MAT_CAT/> <KANBAN_IND/> <ADDRESS2>0000492483</ADDRESS2> <INT_OBJ_NO>000000000000000000</INT_OBJ_NO> <ERS/> <GRSETTFROM>0000-00-00</GRSETTFROM> <LAST_TRANS>0000-00-00</LAST_TRANS> <TRANS_TIME>00:00:00</TRANS_TIME> <SER_NO>0001</SER_NO> <PROMOTION/> <ALLOC_TBL/> <AT_ITEM>00000</AT_ITEM> <POINTS>0</POINTS> <POINTS_UN/> <SEASON_TY/> <SEASON_YR/> <SETT_GRP_2/> <SETT_GRP_3/> <SETT_ITEM/> <ML_AKT/> <REMSHLIFE>0</REMSHLIFE> <RFQ/> <RFQ_ITEM>00000</RFQ_ITEM> <CONFIG_ORG/> <QUOTAUSAGE/> <SPSTCK_PHY/> <PREQ_NO/> <PREQ_ITEM>00000</PREQ_ITEM> <MAT_TYPE>HALB</MAT_TYPE> <SI_CAT/> <SUB_ITEMS/> <SUBTOTAL_1>0</SUBTOTAL_1> <SUBTOTAL_2>0</SUBTOTAL_2> <SUBTOTAL_3>0</SUBTOTAL_3> <SUBTOTAL_4>0</SUBTOTAL_4> <SUBTOTAL_5>0</SUBTOTAL_5> <SUBTOTAL_6>0</SUBTOTAL_6> <SUBITM_KEY/> <MAX_CMG>0</MAX_CMG> <MAX_CPGO>0</MAX_CPGO> <RET_ITEM/> <AT_RELEV/> <ORD_REAS/> <DEL_TYP_RT/> <PRDTE_CTRL/> <MANUF_PROF/> <MANU_MAT/> <MFR_NO/> <MFR_NO_EXT/> <ITEM_CAT_EXT>L</ITEM_CAT_EXT> <PO_UNIT_ISO>PCE</PO_UNIT_ISO> <ORDERPR_UN_ISO>PCE</ORDERPR_UN_ISO> <BASE_UOM_ISO>PCE</BASE_UOM_ISO> <WEIGHTUNIT_ISO>KGM</WEIGHTUNIT_ISO> <VOLUMEUNIT_ISO>DMQ</VOLUMEUNIT_ISO> <POINTS_UN_ISO/> <CONF_MATL_EXTERNAL/> <CONF_MATL_GUID/> <CONF_MATL_VERSION/> <MATERIAL_EXTERNAL/> <MATERIAL_GUID/> <MATERIAL_VERSION/> <PUR_MAT_EXTERNAL/> <PUR_MAT_GUID/> <PUR_MAT_VERSION/> <GRANT_NBR/> <CMMT_ITEM_LONG/> <FUNC_AREA_LONG/> <BUDGET_PERIOD/> </item> </PO_ITEMS> <PO_ITEM_ACCOUNT_ASSIGNMENT/> <PO_ITEM_CONFIRMATIONS/> <PO_ITEM_CONTRACT_LIMITS/> <PO_ITEM_HISTORY/> <PO_ITEM_HISTORY_TOTALS/> <PO_ITEM_LIMITS/> <PO_ITEM_SCHEDULES/> <PO_ITEM_SERVICES/> <PO_ITEM_SRV_ACCASS_VALUES/> <PO_ITEM_TEXTS/> <PO_SERVICES_TEXTS/> <RETURN/> </rfc:BAPI_PO_GETDETAIL.Response>
I need e. g.:
<xsl:value-of select="$response//PO_ITEMS/item/GR_BASEDIV='X'"/>
The formatting is not working properly...
Regards
Hans
Hi Hans,
I have gone through the document and entire XML structure. I donot think you are making any mistake in the XPATH I expect the value to get returned when I type
<xsl:variable name="trace" select="trace:addInfo($response//PO_ITEMS/item/GR_BASEDIV,$inputparam)"/>
But some how you are not getting the value of the element in the trace. Now what I am going to do is to write an XSLT code to extract exactly the value you need in your trace. This is how it functions
<xsl:variable name="trace" select="trace:addInfo(tokenize(tokenize($response,'<GR_BASEDIV>')[2],'</GR_BASEDIV>'))"/>
Try this and it should show your required value.
regards
Anupam
Edited by: anupamsap on Jul 26, 2011 3:54 PM
Hi Anupam
Thank you for your support!
As I am used to XSLT I was already sure the XPath expression itself is correct. The problem seems to be that the response data is not returned as a node-set, but as a string value.
Unfortunately the function tokenize is not part of XSLT 1.0 and therefore cannot be used with the PI default XSLT processor.
Regards
Hans
Hello Peter
Unfortunately I did not solve this issue and completely discarded this approach.
We meanwhile switched most of our XSLT mappings to be J2EE-complient (without use of SapXmlToolkit) and had even more serious problems with the XML conversion (http://scn.sap.com/thread/3167426).
If we have to lookup some master data related information, we sometimes store it in the PI Cache and use the Value Mapping Lookup to access the data. Otherwise, with complex lookups, we use ccBPM.
Sorry I cannot help you.
Best regards
Hans
User | Count |
---|---|
87 | |
10 | |
10 | |
10 | |
7 | |
6 | |
6 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.