Dynamic file and variable substitution

Hi Experts,
I am working on a scenario where filename is reading from payload.based on header value ,i am creating file along with item records.I did variable substitution also.whenever header value changes ,a new file shud be created.
I placed two records in my input message...
<ns1:MT_DC_Send xmlns:ns1="http://urn:psr/ff/DC">
         <Source>
           <b> <FName>XYZ</FName>
            <FType>F</FType>
            <Input>Item1</Input></b>         </Source>
         <Source>
           <b> <FName>ABC</FName>
            <FType>F</FType>
            <Input>Item2</Input></b>
         </Source>
      </ns1:MT_DC_Send>
but only one file is getting created with name XYZ.txt(I used cont conversion)
output fiile data is
<b>
Item1
Item2</b>
Regards,
Srinivas

Srini,
Thanks for the patience. The link which u sent is not working.
Please find the total scenario in the below URL's, if u find any discrepancies , please let me know.
<b>Structures defined</b>:http://www.flickr.com/photo_zoom.gne?id=956871756&size=o
Create corresponding message types & Interfaces(Outbound:OB/Inbound:IB)
<b>Mapping Logic:</b>
First change the message occurrence:
http://www.flickr.com/photo_zoom.gne?id=956027877&size=o
Part1 :http://www.flickr.com/photo_zoom.gne?id=956871778&size=o
Part2 :http://www.flickr.com/photo_zoom.gne?id=956871880&size=o
Part3 :http://www.flickr.com/photo_zoom.gne?id=956871906&size=o
UDF used in Part3 mapping:
Test_Function[Cache:Queue, Input:FName, data]
String local ="";
for(int j=0;j<FName.length;j++)
if(j==0)
result.addValue(""data[j]"");
local =FName[j];
else
if(FName[j].equals(local))
result.addValue(""data[j]"");
local =FName[j];
else
result.addContextChange();
result.addValue(""data[j]"");
local =FName[j];
Message Mapping results:http://www.flickr.com/photo_zoom.gne?id=956027763&size=o
<b>Interface Mapping:</b>
http://www.flickr.com/photo_zoom.gne?id=956027893&size=o
<b>Interface Determination:</b>
http://www.flickr.com/photo_zoom.gne?id=956027913&size=o
<b>Check your ID Objects:</b>
http://www.flickr.com/photo_zoom.gne?id=956888454&size=o
<b>Receiver Comm.Channel:</b>
http://www.flickr.com/photo_zoom.gne?id=956027857&size=o
Thats it!!!
Now run the scenario. I used the same data which I used in the above URL's
<b>SXMB_MONI</b>:http://www.flickr.com/photo_zoom.gne?id=956871938&size=o
<b>Outputs</b>:http://www.flickr.com/photo_zoom.gne?id=956027957&size=o
In the output file the first line which u see in the csv files are Item tag as per ur input. The second line is the filename , I don't know how to suppress the filename element in the output file. <b><i>Our friends has to help it out</i></b>.
<b>Note:</b> While copying the test data from Mapping editor don't forget to remove the Messages element from the source.
I hope it helps you!!!!!
Best regards,
raj.

Similar Messages

  • Receiver File Adapter:Variable substitution :FATAL  ERROR

    HI all
    as per the previous thread :
    <b>Receiver File Name Variable Substitution :payload: Fatal Error
    in our idoc to file sceanrio, we are using simple <b>graphical mapping.</b>
    for dynamic file name , variable field is at <b>Target message type</b>,So  on using <b>Variable substitution</b>, again the error is same :
    SAXException while parsing XML payload: Fatal Error: com.sap.engine.lib.xml.parser.ParserException: XMLParser: No data allowed here: (hex) .
    <b>Our XI  Component version : 2004
    WAS 6.4 SP 15</b>
    Thanks
    AR

    Ashutosh,
       There is nothing to do with your mapping programs. Its the mistake in ur reciever file adapter configuration for variable substitution.I asked u whether u changed message mapping in order to implement the UDF!!
    Did u tried checking the audit log. Ok just to see where u are going wrong, instead of using Payload :... in Variable substitution use Message:..... and give some interface name so that to check whether the file is created with Interface name.
    Juz give a try!!!
    Best regards
    raj.

  • Abap mapping and variable substitution in File adapter

    Hi experts!!.
    I am new in abap mapping, but I can do one abap mapping succesfully, but my problem is:
    I need to do a variable substitution in my file receiver adapter:
    Target directory = %cliente&/out
    File Name Scheme = TC%Fecha%.EFI
    ¿Using abap mapping is this possible? How I can do it?.
    Please is very urgent.
    Thanks in advance, and best regarts.

    Yes you can,.
    DynamicConfigurationKey key = DynamicConfigurationKey.create(
        “http://sap.com/xi/XI/System/File”,
        “FileName”);
    will become
    DynamicConfigurationKey key = DynamicConfigurationKey.create(
        “http://sap.com/xi/XI/System/File”,
        “Directory”);
    In the receive file adapter all you would need to do is select Adapter Specifc Attributes --> File Name and Directory and givce some dummy values for the filename and directroy. In the runtime values will be taken from the SOAP header which you set in the mapping.
    Regards
    Bhavesh

  • File adaptor and variable substitution

    i have used variable substitution in the reciever comm channel to dynamically alter the folder ...Question is ..is there a way to do this from the sender comm channel..
    I know, i know we can write a custom module..etc..etc..
    I mean besides that ..is there a way sap provides out of the box...
    Michal..what do you think..?
    PS: your blog on var subst is very good !
    Regards
    Venkat

    Hi Venkat,
    For implementing variable substitution on the sender side. you can develop your own module as per your requirement.
    Only question is you can easily implement this on receiver side receives payload information coming after the mapping. While processing communication channel, it has payload to refer for variable substitution..
    While on the sender side communication channel do not have payload to implement variable substitution.
    Can you explain in detail about condition you want to apply in variable substitution.
    - Gaurav Jain

  • Receiver File Name Variable Substitution :payload: Fatal Error

    Hi all
             i have a scenario of  idoc to file.., i need to create a dynamic file name taking 1 field variable from the payload.  The idoc -xml structure in XI is :
                       <b><INVOICE03></b>
                          <b> <IDOC BEGIN="1"</b>>
                              <b><EDI_DC40 SEGMENT="1"></b>
                                          <field1> ashu </field1>
                             <b> </EDI_DC40>
                               <ENEDL20></b>
                                           <field2> rawat</field1>
                              <b> <ENEDL20>
                           </IDOC>
                        <INVOICE03></b>
    i need to pick th value of field2 , for the target file name..
    In variable substitution i had given  var = INVOICE03,1,IDOC,1,E1EDL40,1,E1EDL20,1,VBELN,1
    <i>
    STILL I AM GETTING THE ERROR </i> :varsubst.VariableDataSourceException: Caught SAXException while parsing XML payload: Fatal Error: com.sap.engine.lib.xml.parser.ParserException: XMLParser: No data allowed here: (hex) .
    NOTE : my target variable is getting populated properly.
    i tried a lot of combinations in REFERENCE VARIABLE , even  giving ( payload: xxx)
    but for all  changes it is giving the same error....
    i referred the following blogs also :
    Re: Variable substitution
    Regards
    AR

    HI
    the target payload is :
      <?xml version="1.0" encoding="UTF-8" ?>
    - <DELVRY03>
    - <IDOC BEGIN="1">
    + <EDI_DC40 SEGMENT="1">
      <TABNAM>EDI_DC40</TABNAM>
      <MANDT>900</MANDT>
      <DOCNUM>0000000002093240</DOCNUM>
      <DOCREL>46C</DOCREL>
      <STATUS>30</STATUS>
      <DIRECT>1</DIRECT>
      <OUTMOD>2</OUTMOD>
      <IDOCTYP>DELVRY03</IDOCTYP>
      <MESTYP>DESADV</MESTYP>
      <STDMES>DESADV</STDMES>
      <SNDPOR>SAPQA1</SNDPOR>
      <SNDPRT>LS</SNDPRT>
      <SNDPRN>ZLOG900</SNDPRN>
      <RCVPOR>XIDEV</RCVPOR>
      <RCVPRT>KU</RCVPRT>
      <RCVPFC>WE</RCVPFC>
      <RCVPRN>8300000717</RCVPRN>
      <CREDAT>20070820</CREDAT>
      <CRETIM>143341</CRETIM>
      <SERIAL>20070703104747</SERIAL>
      </EDI_DC40>
    - <E1EDL20 SEGMENT="1">
    <b> <VBELN>0083030974</VBELN> </b>
      <VSTEL>5000</VSTEL>
      <VKORG>STK</VKORG>
      <INCO1>C&F</INCO1>
      <INCO2>Melsele</INCO2>
      <VSBED>03</VSBED>
      <BTGEW>12000.000</BTGEW>
      <NTGEW>0.000</NTGEW>
      <GEWEI>GRM</GEWEI>
      <VOLUM>0.000</VOLUM>
      <ANZPK>00000</ANZPK>
      <PODAT>20070703</PODAT>
      <POTIM>104747</POTIM>
    + <E1EDL22 SEGMENT="1">
      <VSTEL_BEZ>ID Warehouse</VSTEL_BEZ>
      <VKORG_BEZ>Stock Transfer</VKORG_BEZ>
      <INCO1_BEZ>Cost & Freight</INCO1_BEZ>
      <VSBED_BEZ>Road</VSBED_BEZ>
      </E1EDL22>
    + <E1EDL21 SEGMENT="1">
      <LFART>ZRUS</LFART>
      <EXPKZ>X</EXPKZ>
      <LPRIO>03</LPRIO>
      <TRAGR>0001</TRAGR>
    - <E1EDL23 SEGMENT="1">
      <LFART_BEZ>Delivery:Russian Exp</LFART_BEZ>
      <LPRIO_BEZ>High</LPRIO_BEZ>
      <TRAGR_BEZ>On pallets</TRAGR_BEZ>
      </E1EDL23>
      </E1EDL21>
    + <E1EDL18 SEGMENT="1">
      <QUALF>ORI</QUALF>
      </E1EDL18>
    + <E1ADRM1 SEGMENT="1">
      <PARTNER_Q>WE</PARTNER_Q>
      <PARTNER_ID>8300000717</PARTNER_ID>
      <LANGUAGE>EN</LANGUAGE>
      <FORMOFADDR>M/s.</FORMOFADDR>
      <NAME1>NYK Logistics</NAME1>
      <STREET1>Keetberglaan 2</STREET1>
      <POSTL_COD1>B-9120</POSTL_COD1>
      <CITY1>Melsele</CITY1>
      <COUNTRY1>BE</COUNTRY1>
      <REGION>RII</REGION>
      </E1ADRM1>
    + <E1ADRM1 SEGMENT="1">
      <PARTNER_Q>OSP</PARTNER_Q>
      <PARTNER_ID>5000</PARTNER_ID>
      <LANGUAGE>EN</LANGUAGE>
      <NAME1>I/D WAREHOUSE : DELHI</NAME1>
      <NAME2>B-84/1, Okhla Phase II, New Delhi</NAME2>
      <CITY1>New Delhi</CITY1>
      <TELEFAX>CST:LC/87/051655/05/61</TELEFAX>
      <COUNTRY1>IN</COUNTRY1>
      <REGION>DEL</REGION>
      </E1ADRM1>
    + <E1ADRM1 SEGMENT="1">
      <PARTNER_Q>OSO</PARTNER_Q>
      <PARTNER_ID>STK</PARTNER_ID>
      </E1ADRM1>
    + <E1EDT13 SEGMENT="1">
      <QUALF>006</QUALF>
      <NTANF>20070703</NTANF>
      <NTANZ>000000</NTANZ>
      <NTEND>20070703</NTEND>
      <NTENZ>000000</NTENZ>
      <ISDD>00000000</ISDD>
      <ISDZ>000000</ISDZ>
      <IEDD>00000000</IEDD>
      <IEDZ>000000</IEDZ>
      </E1EDT13>
    + <E1EDT13 SEGMENT="1">
      <QUALF>003</QUALF>
      <NTANF>20070703</NTANF>
      <NTANZ>000000</NTANZ>
      <NTEND>20070703</NTEND>
      <NTENZ>000000</NTENZ>
      <ISDD>00000000</ISDD>
      <ISDZ>000000</ISDZ>
      <IEDD>00000000</IEDD>
      <IEDZ>000000</IEDZ>
      </E1EDT13>
    + <E1EDT13 SEGMENT="1">
      <QUALF>001</QUALF>
      <NTANF>20070703</NTANF>
      <NTANZ>000000</NTANZ>
      <NTEND>20070703</NTEND>
      <NTENZ>000000</NTENZ>
      <ISDD>00000000</ISDD>
      <ISDZ>000000</ISDZ>
      <IEDD>00000000</IEDD>
      <IEDZ>000000</IEDZ>
      </E1EDT13>
    + <E1EDT13 SEGMENT="1">
      <QUALF>007</QUALF>
      <NTANF>20070703</NTANF>
      <NTANZ>000000</NTANZ>
      <NTEND>20070703</NTEND>
      <NTENZ>000000</NTENZ>
      <ISDD>00000000</ISDD>
      <ISDZ>000000</ISDZ>
      <IEDD>00000000</IEDD>
      <IEDZ>000000</IEDZ>
      </E1EDT13>
    + <E1EDT13 SEGMENT="1">
      <QUALF>010</QUALF>
      <NTANF>20070703</NTANF>
      <NTANZ>000000</NTANZ>
      <NTEND>20070703</NTEND>
      <NTENZ>000000</NTENZ>
      <ISDD>00000000</ISDD>
      <ISDZ>000000</ISDZ>
      <IEDD>00000000</IEDD>
      <IEDZ>000000</IEDZ>
      </E1EDT13>
    + <E1EDT13 SEGMENT="1">
      <QUALF>015</QUALF>
      <NTANF>20070703</NTANF>
      <NTANZ>000000</NTANZ>
      <NTEND>20070703</NTEND>
      <NTENZ>000000</NTENZ>
      <ISDD>00000000</ISDD>
      <ISDZ>000000</ISDZ>
      <IEDD>00000000</IEDD>
      <IEDZ>000000</IEDZ>
      </E1EDT13>
    + <E1EDL33 SEGMENT="1">
      <ALAND>IN</ALAND>
      <EXPVZ>4</EXPVZ>
      <ZOLLA>0001</ZOLLA>
      <IEVER>3</IEVER>
    - <E1EDL34 SEGMENT="1">
      <EXPVZ_BEZ>Air</EXPVZ_BEZ>
      <ZOLLA_BEZ>New Delhi</ZOLLA_BEZ>
      <IEVER_BEZ>Road</IEVER_BEZ>
      </E1EDL34>
      </E1EDL33>
    + <E1EDL24 SEGMENT="1">
      <POSNR>000010</POSNR>
      <MATNR>000000000001005372</MATNR>
      <ARKTX>ALPRAZOMED TAB 0.5MG 5X10B BE</ARKTX>
      <MATKL>S5202</MATKL>
      <WERKS>5000</WERKS>
      <LFIMG>2.000</LFIMG>
      <VRKME>15S</VRKME>
      <LGMNG>10.000</LGMNG>
      <MEINS>S10</MEINS>
      <NTGEW>0.000</NTGEW>
      <BRGEW>12000.000</BRGEW>
      <GEWEI>GRM</GEWEI>
      <VOLUM>0.000</VOLUM>
      <VOLEH>CMQ</VOLEH>
      <LADGR>Z002</LADGR>
      <TRAGR>0001</TRAGR>
      <VTWEG>ST</VTWEG>
      <SPART>20</SPART>
      <GRKOR>000</GRKOR>
      <POSEX>000000</POSEX>
    - <E1EDL25 SEGMENT="1">
      <LADGR_BEZ>Injectibles- for MP</LADGR_BEZ>
      <TRAGR_BEZ>On pallets</TRAGR_BEZ>
      <VTWEG_BEZ>Stock Transfer</VTWEG_BEZ>
      <SPART_BEZ>Formulations</SPART_BEZ>
      </E1EDL25>
    - <E1EDL26 SEGMENT="1">
      <PSTYV>NLN</PSTYV>
      <MATKL>S5202</MATKL>
      <PRODH>010080010010100102</PRODH>
      <UMVKZ>5</UMVKZ>
      <UMVKN>1</UMVKN>
      <UEBTO>0.0</UEBTO>
      <UNTTO>0.0</UNTTO>
      <XCHBW>1</XCHBW>
      <MVGR1>U</MVGR1>
      <MVGR2>U</MVGR2>
      <MVGR3>U</MVGR3>
      <MVGR4>U</MVGR4>
      <MVGR5>U</MVGR5>
    - <E1EDL27 SEGMENT="1">
      <PSTYV_BEZ>StandStockTransItem</PSTYV_BEZ>
      <MATKL_BEZ>Belgium</MATKL_BEZ>
      <PRODH_BEZ>Tablets</PRODH_BEZ>
      <WERKS_BEZ>Export Warehouse</WERKS_BEZ>
      <MVGR1_BEZ>Unasigned</MVGR1_BEZ>
      <MVGR2_BEZ>Unassigned</MVGR2_BEZ>
      <MVGR3_BEZ>Unassigned</MVGR3_BEZ>
      <MVGR4_BEZ>Unasigned</MVGR4_BEZ>
      <MVGR5_BEZ>Unassigned</MVGR5_BEZ>
      </E1EDL27>
      </E1EDL26>
    - <E1EDL35 SEGMENT="1">
      <GRWRT>0.00</GRWRT>
      </E1EDL35>
    - <E1EDL43 SEGMENT="1">
      <QUALF>V</QUALF>
      <BELNR>7200000025</BELNR>
      <POSNR>000010</POSNR>
      </E1EDL43>
      </E1EDL24>
      </E1EDL20>
      </IDOC>
      </DELVRY03>
    i need <VBELN>0083030974</VBELN>  in file name
    Regards
    AR

  • SQL Injection and variable substitutions

    Hello helpful forum, I'm trying to understand what really goes on "behind" the scenes
    with the variable substitutions in order to protect from sql injections.
    I'm using apex 3.0.0.00.20
    The trickiest component seems to be a Report of type "pl/sql returning sql", since
    multiple dynamic sql interpretations are done there.
    consider the following innocent looking disaster:
    DECLARE
    l_out VARCHAR2(2000);
    BEGIN
    l_out := 'select * from test_injection t where t.name like ''%' || :NAME || '%''';
    RETURN l_out;
    END;
    if NAME is a single quote the report will return:
    failed to parse SQL query: ORA-00911: invalid character
    which hints to the fact that NAME is not escaped, and you are in fact able to access db functions
    as in: '||lower('S')||'
    I also tried to put there a function that runs in a autonomous transaction to log its calls, and
    I see that it's called five times for each request.
    consider now the similar solution (notice the two single quotes):
    DECLARE
    l_out VARCHAR2(2000);
    BEGIN
    l_out := 'select * from test_injection t where t.name like ''%'' || :NAME || ''%''';
    RETURN l_out;
    END;
    with this second example nothing of the above is possible.
    So my theory (please confirm it or refute it) is that there is a first variable substitution done
    at the pl/sql level (and in the second case :NAME is just a string so nothing is substituted).
    Then the dynamic sql is executed and it returns the following string:
    select * from test_injection t where t.name like '%' || :NAME || '%'
    now another substitution is done (at an "APEX" level) and then query is finally executed to return
    the rows to the report.
    The tricky point seems to be that the first substitution doesn't escape the variable (hence the error
    with the single quote), while the second substitution does.
    Please let me know if this makes sense and what are the proper guidelines to avoid sql injection with
    the different kinds of reports and components (SQL, pl/sql returning sql, processes, ...)
    Thanks

    Giovanni,
    You should build report regions like this using the second method so that all bind variables (colon followed by name) appear in the resultant varchar2 variable, l_out in your example, which will then be parsed as the report query. This addresses not only the SQL injection problem but the shared-pool friendliness problem.
    Scott

  • File Adpater: Variable Substitution

    Hi experts,
    I have a few questions regarding the variable substitution in the File-Adapter. I want to have it for my filename.
    For the variable substitution I can only take elements from the target structure, is that right? I know that I can take attributes from the header information like the interface_name etc. <b>But can I take attributes from the target structure?</b> Is it possible?
    With best regards
    Christopher

    Thanks for this, but there is the following runtime exception:
    14:38:41 Teststart
    Kompilierung von PICC_US_ZHINVOIC_INVOIC02_ZHINVOIC01_to_INVOICE_PICC_UDF war erfolgreich. Runtime exception during processing target field mapping /xdoc/Invoice/purno. The message is: Exception:[java.lang.NullPointerException] in class com.sap.xi.tf._PICC_US_ZHINVOIC_INVOIC02_ZHINVOIC01_to_INVOICE_PICC_UDF_ method Filename_purno$[5075, com.sap.aii.mappingtool.tf3.rt.Context@10cfad9] com.sap.aii.mappingtool.tf3.MessageMappingException: Runtime exception during processing target field mapping /xdoc/Invoice/purno. The message is: Exception:[java.lang.NullPointerException] in class com.sap.xi.tf._PICC_US_ZHINVOIC_INVOIC02_ZHINVOIC01_to_INVOICE_PICC_UDF_ method Filename_purno$[5075, com.sap.aii.mappingtool.tf3.rt.Context@10cfad9] at com.sap.aii.mappingtool.tf3.AMappingProgram.processNode(AMappingProgram.java:347) at com.sap.aii.mappingtool.tf3.AMappingProgram.processNode(AMappingProgram.java:309) at com.sap.aii.mappingtool.tf3.AMappingProgram.processNode(AMappingProgram.java:309) at com.sap.aii.mappingtool.tf3.AMappingProgram.start(AMappingProgram.java:398) at com.sap.aii.mappingtool.tf3.Transformer.start(Transformer.java:142) at com.sap.aii.mappingtool.tf3.AMappingProgram.execute(AMappingProgram.java:102) at com.sap.aii.ibrep.server.mapping.ServerMapService.transformInternal(ServerMapService.java:431) at com.sap.aii.ibrep.server.mapping.ServerMapService.execute(ServerMapService.java:169) at com.sap.aii.ibrep.sbeans.mapping.MapServiceBean.execute(MapServiceBean.java:52) at com.sap.aii.ibrep.sbeans.mapping.MapServiceRemoteObjectImpl0_0.execute(MapServiceRemoteObjectImpl0_0.java:301) at com.sap.aii.ibrep.sbeans.mapping.MapServiceRemoteObjectImpl0_0p4_Skel.dispatch(MapServiceRemoteObjectImpl0_0p4_Skel.java:146) at com.sap.engine.services.rmi_p4.DispatchImpl._runInternal(DispatchImpl.java:320) at com.sap.engine.services.rmi_p4.DispatchImpl._run(DispatchImpl.java:198) at com.sap.engine.services.rmi_p4.server.P4SessionProcessor.request(P4SessionProcessor.java:129) at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:33) at com.sap.engine.core.cluster.impl6.session.MessageRunner.run(MessageRunner.java:41) at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37) at java.security.AccessController.doPrivileged(Native Method) at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:100) at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:170) Root Cause: com.sap.aii.utilxi.misc.api.BaseRuntimeException: Exception:[java.lang.NullPointerException] in class com.sap.xi.tf._PICC_US_ZHINVOIC_INVOIC02_ZHINVOIC01_to_INVOICE_PICC_UDF_ method Filename_purno$[5075, com.sap.aii.mappingtool.tf3.rt.Context@10cfad9] at com.sap.aii.mappingtool.tf3.rt.FunctionWrapper.getValue(FunctionWrapper.java:56) at com.sap.aii.mappingtool.tf3.AMappingProgram.processNode(AMappingProgram.java:291) at com.sap.aii.mappingtool.tf3.AMappingProgram.processNode(AMappingProgram.java:309) at com.sap.aii.mappingtool.tf3.AMappingProgram.processNode(AMappingProgram.java:309) at com.sap.aii.mappingtool.tf3.AMappingProgram.start(AMappingProgram.java:398) at com.sap.aii.mappingtool.tf3.Transformer.start(Transformer.java:142) at com.sap.aii.mappingtool.tf3.AMappingProgram.execute(AMappingProgram.java:102) at com.sap.aii.ibrep.server.mapping.ServerMapService.transformInternal(ServerMapService.java:431) at com.sap.aii.ibrep.server.mapping.ServerMapService.execute(ServerMapService.java:169) at com.sap.aii.ibrep.sbeans.mapping.MapServiceBean.execute(MapServiceBean.java:52) at com.sap.aii.ibrep.sbeans.mapping.MapServiceRemoteObjectImpl0_0.execute(MapServiceRemoteObjectImpl0_0.java:301) at com.sap.aii.ibrep.sbeans.mapping.MapServiceRemoteObjectImpl0_0p4_Skel.dispatch(MapServiceRemoteObjectImpl0_0p4_Skel.java:146) at com.sap.engine.services.rmi_p4.DispatchImpl._runInternal(DispatchImpl.java:320) at com.sap.engine.services.rmi_p4.DispatchImpl._run(DispatchImpl.java:198) at com.sap.engine.services.rmi_p4.server.P4SessionProcessor.request(P4SessionProcessor.java:129) at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:33) at com.sap.engine.core.cluster.impl6.session.MessageRunner.run(MessageRunner.java:41) at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37) at java.security.AccessController.doPrivileged(Native Method) at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:100) at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:170) Root Cause: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at com.sap.aii.mappingtool.tf3.rt.FunctionWrapper.getValue(FunctionWrapper.java:47) at com.sap.aii.mappingtool.tf3.AMappingProgram.processNode(AMappingProgram.java:291) at com.sap.aii.mappingtool.tf3.AMappingProgram.processNode(AMappingProgram.java:309) at com.sap.aii.mappingtool.tf3.AMappingProgram.processNode(AMappingProgram.java:309) at com.sap.aii.mappingtool.tf3.AMappingProgram.start(AMappingProgram.java:398) at com.sap.aii.mappingtool.tf3.Transformer.start(Transformer.java:142) at com.sap.aii.mappingtool.tf3.AMappingProgram.execute(AMappingProgram.java:102) at com.sap.aii.ibrep.server.mapping.ServerMapService.transformInternal(ServerMapService.java:431) at com.sap.aii.ibrep.server.mapping.ServerMapService.execute(ServerMapService.java:169) at com.sap.aii.ibrep.sbeans.mapping.MapServiceBean.execute(MapServiceBean.java:52) at com.sap.aii.ibrep.sbeans.mapping.MapServiceRemoteObjectImpl0_0.execute(MapServiceRemoteObjectImpl0_0.java:301) at com.sap.aii.ibrep.sbeans.mapping.MapServiceRemoteObjectImpl0_0p4_Skel.dispatch(MapServiceRemoteObjectImpl0_0p4_Skel.java:146) at com.sap.engine.services.rmi_p4.DispatchImpl._runInternal(DispatchImpl.java:320) at com.sap.engine.services.rmi_p4.DispatchImpl._run(DispatchImpl.java:198) at com.sap.engine.services.rmi_p4.server.P4SessionProcessor.request(P4SessionProcessor.java:129) at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:33) at com.sap.engine.core.cluster.impl6.session.MessageRunner.run(MessageRunner.java:41) at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37) at java.security.AccessController.doPrivileged(Native Method) at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:100) at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:170) Caused by: java.lang.NullPointerException at com.sap.xi.tf._PICC_US_ZHINVOIC_INVOIC02_ZHINVOIC01_to_INVOICE_PICC_UDF_.Filename_purno$(_PICC_US_ZHINVOIC_INVOIC02_ZHINVOIC01_to_INVOICE_PICC_UDF_.java:227) ... 25 more RuntimeException in Message-Mapping transformation: Runtime exception during processing target field mapping /xdoc/Invoice/purno. The message is: Exception:[java.lang.NullPointerException] in class com.sap.xi.tf._PICC_US_ZHINVOIC_INVOIC02_ZHINVOIC01_to_INVOICE_PICC_UDF_ method Filename_purno$[5075, com.sap.aii.mappingtool.tf3.rt.Context@10cfad9]
    14:38:42 Testende
    <u>The Code of my UDF:</u> --- "purno" is the input string
    DynamicConfiguration conf = (DynamicConfiguration) container.getTransformationParameters().get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
    DynamicConfigurationKey key = DynamicConfigurationKey.create("http://sap.com/xi/XI/System/File","FileName");
    conf.put(key, purno);
    return purno;
    Can somebody explain me, what the DynamicConfigurationKey is? And for which task the following code is responsible for?
    conf.put(key, purno);
    With kind regards
    Christopher

  • File-Adapter: Variable substitution form payload XML-attribute

    Hi experts,
    is possible to use XML-attribute-content for variable substitution in file-Adapter?
    extract from XML:
    <?xml version="1.0" encoding="utf-8" ?>
    - <all>
    - <transaction <b>file="filename"</b>>
    - <table name="BPAADDRESS" options="insertIfUpdateFails">
    - <record id="1">
      <hkeycol name="BPAMAINHKEY">0010500345</hkeycol>
      <hkeycol name="USAGE">Invoice</hkeycol>
      </transaction>
    I want to get the value "filename" = attribute file of transaction.
    Is this possible?
    Thanks a lot,
    Florian

    I have done this taking a field from the XML.
    You have to map the location of the field within the XML...
    Taken from:
    http://help.sap.com/saphelp_nw04/helpdata/en/bc/bb79d6061007419a081e58cbeaaf28/frameset.htm
    Variable Substitution (Target Directory/File Name Scheme)
    If you set the Enable indicator, you can enter variables for the Target Directory and File Name Scheme. Enter the names of the variables and references in the table.
    &#9679;      Enter each variable that you reference in the Target Directory and File Name Scheme fields without the surrounding percentage sign under Name of Variables in the table.
    The variables can refer to attributes of the message header or elements of the message payload.
    &#9675;       If the variables are to refer to an attribute of the message header, add the prefix message: to the name of the variable under Reference. You can specify the following attributes of the message header:
    sender_party, sender_service, receiver_party, receiver_service, interface_name, interface_namespace,
    message_id (message ID with hyphens, for example 9fbe1ff1-9a0d-11d9-8665-cbf10a126331)
    message_id_hex (message ID in hexadecimal format, for example 9fbe1ff19a0d11d98665cbf10a126331)
    For example, if you want to specify the interface name from the message header in the target directory or in the file name scheme, enter message:interface_name as the reference.
    If one of the message attributes contains characters that are not permitted in a file name, for example \, /, :, *, ?, ", <, >, |, then these characters are replaced by an underscore ("_").
    &#9675;       If the variable refers to an element in XML schema, add the prefix payload: to the information under Reference. The reference then comprises a pseudo path description in the form of a comma-separated list with the schema namea,na,nameb,nb,....
    namea,nameb,... corresponds to the element name and na,nb,... corresponds to the occurrence of the element name at the respective level in the document.
    The description begins at the root of the document and ends at the respective element.
    To reference the element that is in bold in the example, the following expression is used: payload:root,1,e1,1,e2,2
    The parser searches for the first occurrence of the root element at the first level. It then searches for the first occurrence of e1 at the second level and for the second occurrence of e2 at the third level. The content of the last element (“Example Value”) is set as the value for a specified variable.
    <?xml version="1.0" encoding="UTF-8" ?>
    <root>
      <dummy>
         <e1>
            <e2>Data_1</e2>
            <f/>
            <g attr="abc">text</g>
            <e2>Data_2</e2>
         </e1>
      </dummy>
      <e1>
         <e2>illegal/value</e2>
         <f/>
         <g attr="abc">text</g>
         <e2 attr="fghij">Example Value</e2>
      </e1>
    </root>
    &#9679;      To disable the check the adapter performs for the element data, set the Disable Security Checks indicator.
    Otherwise, the adapter checks whether the element data contains characters that could lead to security risks in the file system environment. The check includes the characters “/“, “\“, and “..“.

  • File adapter - Variable Substitution

    Hi all,
    I’m trying to use Variable Substitution functionality in my receiver file adapter. The objective is: During process message XI read the payload of an xml message and picks the value of tag <ORIGEM> coming with the File Name and do the substitution of File Name Schema of receiver file adapter.
    This is what I have donned in the configuration of receiver file adapter:
    File Name Schema: <b>R3%var1%.xml</b> (file construction mode: Add Time Stamp)
    Variable Substitution: <b>Enable</b>
    Variable name: <b>var1</b>     
    Reference: <b>payload:nr1:IfContabilizacao_Source_Log,1,INFO_CONTROLO,1,ORIGEM,1</b>
    The XML Message:
    <?xml version="1.0" encoding="utf-8"?>
      <nr1:IfContabilizacao_Source_Log
    xmlns:nr1="http://xi/XI/InterfaceContabilistico">
        <INFO_CONTROLO>
          <ORIGEM>TESTE</ORIGEM>
          <DESTINO>This is a string 2</DESTINO>
          <IDENTIFICACAO>This is a string 3</IDENTIFICACAO>
          <DATA>1999-01-24</DATA>
          <VERSAO>This is a string 4</VERSAO>
        </INFO_CONTROLO>
        <INFO_DADOS>
          <HEADER_DOCUMENTO>
            <BLDAT>1999-01-24</BLDAT>
            <BLART>C</BLART>
            <BUKRS>C</BUKRS>
            <BUDAT>1999-01-24</BUDAT>
        </INFO_DADOS>
      </nr1:IfContabilizacao_Source_Log>
    When I execute the process both sxmb_moni flags are ok! But in the adapter monitoring I receive this error message:
    2005-12-20 10:51:25 WET: Message processing failed: Error during variable substitution: com.sap.aii.adapter.file.varsubst.VariableDataSourceException: The following variable was not found in the message payload: var1
    Var1 is the name that I have defined in variable name! Is wrong? Anybody see something wrong in this configuration or something in reference payload of  tags hierarchy… I think that I have checked all…
    Thanks in advance,
    Ricardo.

    Renjith,
    Adapter monitoring continues with this error mesage: VariableDataSourceException: The following variable was not found in the message payload: var1
    This error means that the reference showed bellow have something wrong! But I can't see where is the error!!!
    payload:IfContabilizacao_Source_Log,1,INFO_CONTROLO,1,ORIGEM,1
    Anybody see where is the error of my reference, or any other idea?
    Thanks in advance,
    Ricardo.
    Message was edited by: Ricardo  Quintino

  • PI File Adapter variable substitution

    Hi everybody,
    I do have the following message:
    <?xml version="1.0" encoding="utf-8"?>
    <ns:MT_FileIn_Budget xmlns:ns="urn:rlp.de:test:budgeting">
         <BudgetRecord>
              <Monat>Pa</Monat>
              <Jahr>b_Lie</Jahr>
                                               ................. etc.
    I want to extract the "Monat"  variable in the Receiver File Adapter as a substitution variable in the "Advanced" Tab  in the
    Receiver File Adapter configuration.
    I have the following value in the Substitution table :
    var1     payload:BudgetRecord,1,Monat,1
    (and then use var1 in the filename)
    If I use Header Mapping instead , everythings works.
    Any ideas? something misspelled?
    cheers hs

    Hi Michael,
    maybe you can clarify a better solution for my problem:
    The reason why I am using variable substitution is, that I am not using graphical mapping here.
    I am using a XSLT style sheet translation (PI 7.11) as a mapping step. 
    I need to set the file name depending on the operation mapping.
    For every specific situation (about 10) , there is one OM. This OM (XSLT, no SAP Graphical Mapping) should set a specfic filename.  for every specific situation there is an integration scenario with the specific OM.
    The Business Component with one comm channel should only be there once (we don't want 10 communication channels)
    Do you have a recommendation ?
    thx
    hs

  • Dynamic File and Directory Name without Mapping

    Hello Experts,
    We have following requirement:
    1) Files will be picked from R/3 AL11 directory and would be placed in corresponding folder in target system.
    2) On source side ,there would be only one folder for all types of files(around 20),but on target side,there would be one folder for each kind of file(20 folders)
    3) File name should be same on the target side but target directory should be selected based on file name.
    I have gone through a number of posts related to similar requirements and hence,sorry for a new post but I am not yet able to find a solution to this.
    I could understand,this can be achieved using DynamicConfiguration UDF .
    But I have no possibility to have mapping in my scenario.It would just be a pass through scenario.
    Can anyone please suggest a solution to this?
    Thanks.
    Regards,
    Shweta

    Hello,
    Thanks a lot for suggesting solution to this problem.
    I could achieve this using following Java mapping:
    import com.sap.aii.mapping.api.*;
    import java.io.*;
    import java.text.*;
    import java.util.*;
    public class GetDynamicConfiguration implements StreamTransformation {
        private Map param;
        public void setParameter(Map map1) {
            this.param = map1;
        public void execute(InputStream inputstream, OutputStream outputstream) throws StreamTransformationException {
            try {
                   AbstractTrace  trace = null;
                // a) Set ouput File name
                String directory=null;
                   trace = (AbstractTrace)param.get(StreamTransformationConstants.MAPPING_TRACE );
                param.put(DynamicConfigurationKey.create("http://sap.com/xi/XI/Dynamic", StreamTransformationConstants.DYNAMIC_CONFIGURATION), "");
                DynamicConfiguration conf = (DynamicConfiguration) param.get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
                DynamicConfigurationKey key = DynamicConfigurationKey.create("http://sap.com/xi/XI/System/File", "FileName");
                   DynamicConfigurationKey key1 = DynamicConfigurationKey.create("http://sap.com/xi/XI/System/File", "Directory");
                String filename =conf.get(key);
                conf.put(key, filename);
                   trace.addInfo("File name is "+filename);
                if(filename.equals("in.txt"))
                directory = "/home/ftpxi/in";
                   if(filename.equals("test.txt"))
                   directory = "/home/ftpxi/in/test";
                   if(filename.equals("shweta27.txt"))
                   directory = "/home/ftpxi/in/test";
                   trace.addInfo("Directory name is "+directory);
                   conf.put(key1, directory);
                // b) Just copy input file to output file
                byte[] b = new byte[inputstream.available()];
                inputstream.read(b);
                outputstream.write(b);
            } catch (Exception exception) {
                exception.printStackTrace();
    Thanks again.
    Regards,
    Shweta

  • Different files using variable substitution

    Hi,
    I've one scenario in which I'll be getting information like below
    Cust_Data      1..1
    VKORG          0..unbounded
         KUNNR      1..1
         NAME1      0..1
         LAND1      0..1
    now I am supposed to create various files containing customer data containing kunnr, name1, land1 only for each of VKORG
    I've tried using variable substittuion, in which i've given follwing information
    File Name Scheme : Customer_for_%vkorg%.txt
    Variable name                    Reference
    vkorg                                  payload:Cust_Data,1,VKORG,1
    but by providing this information, I am getting only one file having all the customer records.
    So My question is:
    1. How do I create different files for each of different VKORG
    2. How do I place customer data only pertaining to that VKORG only.
    Thanks,

    Go for 1:n multi-mapping. For details, you can refer to /people/jin.shin/blog/2006/02/07/multi-mapping-without-bpm--yes-it146s-possible and /people/ranga.rajan2/blog/2010/03/17/multi-mapping-with-a-simple-scenario--fledgling-kit .
    Regards,
    Sunil Chandra

  • Configuration files and variables

    All,
    Sorry if this is a repost - I thought I posted it earlier today but I can't find it by searching for my username :(
    I've got an application that I would like to enable so that it works with a configuration file. In perl I would use one of the CPAN Config modules and I then just create a file in the form of
    NAME=VALUE
    I want to be able to set various things based on values in the configuration file, but I have no idea what is considered best practice in Java for doing this. The application is a slideshow app, so I want to set things like window size and slide delay.
    At a point in the future, I will probably want to make the application able to modify / create this configuration file using the application interface.
    In light of these questions, what is the best way of achieving this ?
    Thanks in advance,

    java.util.Properties can be used to store the name,value pairs specified in the file. New name,value pairs need can also be added to the file back.
    The following code may help you out..
    I have a file named props.txt having the values
    Name1=Value1
    Name2=Value2
    The following code will read the values, modify the value for a kay and add a new key,value and updates teh file with these changes.
    public class ReadProperties {
        public static void main(String[] args)
            try
                String strFileName = "props.txt";
                Properties prop = new Properties();        
                InputStream inp = null;        
                ClassLoader classLoader = null;
             classLoader = ReadProperties.class.getClassLoader();
                if (null != classLoader)
                     inp = classLoader.getResourceAsStream(strFileName);
               else
                    inp = ClassLoader.getSystemResourceAsStream(strFileName);     
                prop.load(inp);
                //This block is used to list all the properties in the file
                Set s =  prop.entrySet();
                for(Iterator it = s.iterator();it.hasNext();)
                    Map.Entry map = (Map.Entry)it.next();                              
                    System.out.println("map.getKey().toString() : values :  " + map.getKey().toString() + " : "+ prop.getProperty(map.getKey().toString()));               
                // To get only a particular key's value, use
                System.out.println("value for Name1 : " +prop.getProperty("Name1"));         
                //This is to set the proeprties dynamically into the object.
                prop.setProperty("Name3","Value3");
                prop.setProperty("Name1","Value1");
                //If the dynamically aded proeprties neded to be stored in the file.. use the following
                prop.store(new FileOutputStream("props.txt"),null);          
            catch (FileNotFoundException e)
                e.printStackTrace();
            catch (IOException e)
                e.printStackTrace();
    }Regards,
    Raviprakash.D

  • What is the difference btwn Variable Substitution and Dynami Configuration

    Hi Gurus
    Could you please explain the difference between the Variable Substituion and Dynamic Configuration.
    whn shall we use them and in what scenarios?
    thanx in advance

    Please go through this blog
    /people/shabarish.vijayakumar/blog/2009/03/26/dynamic-configuration-vs-variable-substitution--the-ultimate-battle-for-the-file-name
    Also this
    /people/madanmohan.agrawal/blog/2009/05/20/combining-three-different-aspects-of-pi-asma-af-module-and-variable-substitution-in-one-shot
    Edited by: Baskar Gopal on Mar 31, 2011 9:04 AM

  • Variable substitution in receiver comm channel idoc - file

    Hello all,
    I have a error message in mys sytem XI for creating a file because I would like a file name create dynamically and use an info in this idoc providing system SAP.
    And this variable substitution I put file name schema %var1% and variable substitution
    var1 payload:ZBBPIV01,1,IDOC,1,E1BIVHD,1,IV_ID,1 and I have this message error
    and I set Disable security checks in my communication channel
    <b><?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    - <!--  Inbound Message
      -->
    - <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.aii.af.ra.ms.api.MessagingException: Error during variable substitution: com.sap.aii.adapter.file.varsubst.VariableDataSourceException: The following variable was not found in the message payload: var1: com.sap.aii.adapter.file.configuration.DynamicConfigurationException: Error during variable substitution: com.sap.aii.adapter.file.varsubst.VariableDataSourceException: The following variable was not found in the message payload: var1</SAP:AdditionalText>
      <SAP:ApplicationFaultMessage namespace="" />
      <SAP:Stack />
      <SAP:Retry>M</SAP:Retry>
      </SAP:Error></b>
    Thanks for your help

    Hi,
    <b>ZBBPIV01,1,IDOC,1,E1BIVHD,1,IV_ID,1</b>
    Check if the target XML Contains a Field called <b>IV_ID</b> and does it have any value?.
    Btter option is to use Adapter Specific Attributes and the code excert in this link,
    http://help.sap.com/saphelp_nw04/helpdata/en/43/03612cdecc6e76e10000000a422035/content.htm
    Regards
    Bhavesh

Maybe you are looking for

  • Multiple Apple IDs with one email address?

    I want to set up an iTunes account for my son in order to keep his music and apps separate from mine.  But I want to keep it under my email address and credit card.  Can you have more than one iTunes account on one email address?  If so, do I just cr

  • What's wrong with my VI Project?

    when i add a "time" project in my vi,there was wrong----i cannot stop it when i press stop". can you help me ?  what's wrong with it ?                                                                                                                    

  • AUTOMATIC ACCT. ASSIGNMENT PROBLEM

    Dear cons    Now the raw material is availble in the store. we want to sell this raw matwerial to outside. What type of acconts will hit . pl. tell me.

  • Playing rental movies freezes / crashes iTunes. Someone working on a fix?

    .....or is this just a random error? Don't think so since there are a few more with the same problem. I’ve been waiting for a solution to this problem since iTunes rental was started, but obviously there’s not enough “complaining“ about this error! W

  • Unable to activate, Says I dont have BT Broadband

    Err.... So I'm logged onto the internet through my nice BT Home Hub and logged onto my BT account that's kindly telling me I have BT Unlimited Broadand.... But the BT Sport online activation thinks otherwise. Solved! Go to Solution.