SO_NEW_DOCUMENT_ATT_SEND_API1 Attachment Name length

Hi,
  I'm using the SO_NEW_DOCUMENT_ATT_SEND_API1 to send an email message with an attachment.  The attachment filename is limited in 12 characters.  Is there any alternative to have a longer filename??
Regards,
Kit

HI,
Use this class this will solve your problem.
FORM send_mail TABLES p_it_error_records LIKE  it_error_records p_it_parked_documents
               LIKE it_success_records p_text TYPE string.
  DATA: send_request       TYPE REF TO cl_bcs,
        att_text           TYPE bcsy_text,                  "#EC NEEDED
        document           TYPE REF TO cl_document_bcs,     "#EC NEEDED
        sender             TYPE REF TO cl_sapuser_bcs,      "#EC NEEDED
        recipient          TYPE REF TO if_recipient_bcs,
        bcs_exception      TYPE REF TO cx_bcs,
        sent_to_all        TYPE os_boolean,
        v_str(255)         TYPE c,
        wa_receivers       TYPE adr6,
        wa_text            TYPE bcsy_text,
        v_subject          TYPE so_obj_des.
  DATA:it_receivers TYPE TABLE OF adr6.
  wa_receivers-smtp_addr = text-020.
  APPEND wa_receivers TO it_receivers.
  CLEAR wa_receivers.
  wa_receivers-smtp_addr = text-021.
  APPEND wa_receivers TO it_receivers.
  CLEAR:wa_receivers,
        wa_bdcmsgcoll.
  wa_receivers-smtp_addr = text-022.
  APPEND wa_receivers TO it_receivers.
  CLEAR wa_receivers.
  CONCATENATE text-004 sy-datum INTO v_subject SEPARATED BY space.
  TRY.
---- create persistent send request -
      send_request = cl_bcs=>create_persistent( ).
---- create and set document with attachment -
    create document from internal table with text
      document = cl_document_bcs=>create_document(
                      i_type    = 'RAW'
                      i_text    =  wa_text
                      i_length  = '60'
                      i_subject =  v_subject ).
--add attachment to document--
      REFRESH wa_text.
      CONCATENATE p_count p_text INTO v_str.
      APPEND v_str TO wa_text.
      LOOP AT p_it_parked_documents INTO wa_bdcmsgcoll1 . " For Success Records
        AT FIRST.
          MOVE text-016 TO v_str.
          APPEND v_str TO wa_text.
          CLEAR v_str.
        ENDAT.
        CONCATENATE wa_bdcmsgcoll1-msgv3 wa_bdcmsgcoll1-msgtyp wa_bdcmsgcoll1-msgnr
        wa_bdcmsgcoll1-msgv2 wa_bdcmsgcoll1-msgv1 text-014 INTO v_str SEPARATED BY space.
        APPEND v_str TO wa_text.
        clear v_str.
      ENDLOOP.
      LOOP AT p_it_error_records INTO wa_bdcmsgcoll1 . "For Error Records
        AT FIRST.
          MOVE text-015 TO v_str.
          APPEND v_str TO wa_text.
           clear v_str.
        ENDAT.
        CONCATENATE  wa_bdcmsgcoll1-msgv3 wa_bdcmsgcoll1-msgtyp wa_bdcmsgcoll1-msgnr wa_bdcmsgcoll1-msgv2
        wa_bdcmsgcoll1-msgv1  wa_bdcmsgcoll1-msgv4 INTO v_str SEPARATED BY space.
        APPEND v_str TO wa_text.
         clear v_str.
      ENDLOOP.
      CALL METHOD document->add_attachment "Adding Attachment
        EXPORTING
          i_attachment_type    = 'RAW'
          i_attachment_subject = v_subject
          i_attachment_size    = '60'
          i_att_content_text   = wa_text.
    add document to send request
      CALL METHOD send_request->set_document( document ).
      LOOP AT it_receivers INTO wa_receivers . "Recievers SMTP address
        recipient =
        cl_cam_address_bcs=>create_internet_address( wa_receivers-smtp_addr ).
----add recipient with its respective attributes to send request-
        CALL METHOD send_request->add_recipient
          EXPORTING
            i_recipient = recipient
            i_express   = 'X'.
      ENDLOOP.
---- send document -
      CALL METHOD send_request->send(
        EXPORTING
          i_with_error_screen = 'X'
        RECEIVING
          result              = sent_to_all ).
      IF sent_to_all = 'X'.
        MESSAGE s053(ZFI). " Document Sent Successfully
      ENDIF.
      COMMIT WORK.
*                     exception handling
    CATCH cx_bcs INTO bcs_exception. " Exception while sending mail
      WRITE: text-009 ,  bcs_exception->error_type.
      EXIT.
  ENDTRY.
ENDFORM.                    "seding_mail

Similar Messages

  • Sender mail adapter - attachment name

    Hi there
    We have configured a sender email adapter to receive text/csv attachments and save them to a file system. What we are having a problem with is reading the attachment name. So we are using Dynamis Configuration to create the file name using the subject line - Which is not ideal. Ideally we would like to use the same name as the origianl attachment but haven't found any way of doing that. We even tried using Content-type in the Variable Header (XHeaderName1) suing variable transport binding but it doesn't show up in the Dynamic Config part of the SOAP message.
    Is there any way of reading the name of the file attachment? We are on PI release 7.0.
    Any help would be appreciated.
    Cheers
    Salil

    Hi Vitor
    There are 2 scenarios that I can think of -
    1. You are saving the email attachment as a file. In that case use step 3 in the earlier reply to get the attachment name and save the file witht that name.
    2. You are sending the XML straight to a receiver using HTTP, IDOC, JDBC etc. in which case you would need the attachment name much earlier that step 3. For that I guess you would have to write another adapter module on the sender mail adapter(at Position 3 where position1 = payloadswap bean, 2 = custom module to get the attachment name) and add an xml tag to your incoming message. These adapter modules are really powerful and are like user exits in ABAP. In that case you would have to change the Data Type in the Integration repository to reflect that extra tag. Here is some code from a module we wrote to totally change the structure of the xml coming in. The key thing to remember is this module is that you can read the whole message byte by byte. There might be smarter ways of doing it (like using the SAP XML parser factory class) but since I'm not a Java programmer I stuck to the basics. Here's the code( you could also look at the example given in sap help where they remove (or add I'm not sure) CR(carriage return) from CRLF (CR Line feed).
    Created on Aug 8, 2007
    To change the template for this generated file go to
    Window>Preferences>Java>Code Generation>Code and Comments
    package jdbcPackage;
    import javax.ejb.CreateException;
    import javax.ejb.SessionBean;
    import javax.ejb.SessionContext;
    import com.sap.aii.af.mp.module.*;
    import com.sap.aii.af.ra.ms.api.*;
    @author Salil.Mehta Soltius NZ Ltd
    To change the template for this generated type comment go to
    Window>Preferences>Java>Code Generation>Code and Comments
    public class jdbcClass implements SessionBean, Module {
         private SessionContext myContext;
         public void ejbRemove() {
         public void ejbActivate() {
         public void ejbPassivate() {
         public void setSessionContext(SessionContext context) {
              myContext = context;
         public void ejbCreate() throws CreateException {
         public ModuleData process(
              ModuleContext moduleContext,
              ModuleData inputModuleData)
              throws ModuleException {
              //        put your code here
              try {
                   Message msg = (Message) inputModuleData.getPrincipalData();
                   XMLPayload payload = msg.getDocument();
                   String payEnc = payload.getEncoding();
                   byte[] payByte = payload.getContent();
                   byte[] payByteOut = new byte[payByte.length];
                   byte[] payByteTemp = new byte[payByte.length];
                   int i;
                   int j;
                   int actualCount = 0;
                   char xmlTagFound = ' ';
                   char endXmlTagFound = ' ';
                   char tagFound = ' ';
                   System.arraycopy(payByte, 0, payByteTemp, 0, payByte.length);
                   // Step 1 - Conversions 
                   // convert   "&lt; to <"    and     "&gt; to >"
                   // convert   &quot; to "
                   // This will remove any carriage returns and line feeds
                   // and the <XML* and </XML* tags plus the <row> and </row> tags
                   for (i = 0; i < payByte.length; i++) {
                        // convert   &lt; to <    and     &gt; to >
                        if (payByteTemp<i> == '&') {
                             if (payByteTemp[i + 1] == 'l') {
                                  if (payByteTemp[i + 2] == 't') {
                                       if (payByteTemp[i + 3] == ';') {
                                            payByteTemp<i> = '<';
                                            payByteTemp[i + 1] = '\n';
                                            payByteTemp[i + 2] = '\n';
                                            payByteTemp[i + 3] = '\n';
                        if (payByteTemp<i> == '&') {
                             if (payByteTemp[i + 1] == 'g') {
                                  if (payByteTemp[i + 2] == 't') {
                                       if (payByteTemp[i + 3] == ';') {
                                            payByteTemp<i> = '>';
                                            payByteTemp[i + 1] = '\n';
                                            payByteTemp[i + 2] = '\n';
                                            payByteTemp[i + 3] = '\n';
                        if (payByteTemp<i> == '&') {
                             if (payByteTemp[i + 1] == 'q') {
                                  if (payByteTemp[i + 2] == 'u') {
                                       if (payByteTemp[i + 3] == 'o') {
                                            if (payByteTemp[i + 4] == 't') {
                                                 if (payByteTemp[i + 5] == ';') {
                                                      payByteTemp<i> = '"';
                                                      payByteTemp[i + 1] = '\n';
                                                      payByteTemp[i + 2] = '\n';
                                                      payByteTemp[i + 3] = '\n';
                                                      payByteTemp[i + 4] = '\n';
                                                      payByteTemp[i + 5] = '\n';
                        // This will take in the initial xml declaration from the Byte array
                        // And we also don't want the stuff after the xml declaration till
                        // we reach the first <row> tag     
                        if (xmlTagFound == ' ') {
                             if (payByteTemp<i> == '>') {
                                  xmlTagFound = 'X';
                             payByteOut[actualCount++] = payByteTemp<i>;
                             if (xmlTagFound == 'X') {
                                  payByteOut[actualCount++] = '\r';
                             continue;
                        if (xmlTagFound == 'X') {
                             if (payByteTemp<i> == '<') {
                                  if (payByteTemp[i + 1] == 'r') {
                                       if (payByteTemp[i + 2] == 'o') {
                                            if (payByteTemp[i + 3] == 'w') {
                                                 if (payByteTemp[i + 4] == '>') {
                                                      xmlTagFound = 'Y';
                                                 } else {
                                                      continue;
                                            } else {
                                                 continue;
                                       } else {
                                            continue;
                                  } else {
                                       continue;
                             } else {
                                  continue;
                        // Carriage return and line feed
                        if ((payByteTemp<i> == '\r') || (payByteTemp<i> == '\n')) {
                             continue;
                        // <XML_*> tag
                        if (payByteTemp<i> == '<') {
                             if (payByteTemp[i + 1] == 'X') {
                                  if (payByteTemp[i + 2] == 'M') {
                                       if (payByteTemp[i + 3] == 'L') {
                                            tagFound = 'X';
                                            endXmlTagFound = ' ';
                                            continue;
                        // </XML_*> tag
                        if (payByteTemp<i> == '<') {
                             if (payByteTemp[i + 1] == '/') {
                                  if (payByteTemp[i + 2] == 'X') {
                                       if (payByteTemp[i + 3] == 'M') {
                                            if (payByteTemp[i + 4] == 'L') {
                                                 tagFound = 'X';
                                                 endXmlTagFound = 'X';
                                                 continue;
                        // <row> tag
                        if (payByteTemp<i> == '<') {
                             if (payByteTemp[i + 1] == 'r') {
                                  if (payByteTemp[i + 2] == 'o') {
                                       if (payByteTemp[i + 3] == 'w') {
                                            if (payByteTemp[i + 4] == '>') {
                                                 tagFound = 'X';
                                                 continue;
                        // </row> tag
                        if (payByteTemp<i> == '<') {
                             if (payByteTemp[i + 1] == '/') {
                                  if (payByteTemp[i + 2] == 'r') {
                                       if (payByteTemp[i + 3] == 'o') {
                                            if (payByteTemp[i + 4] == 'w') {
                                                 if (payByteTemp[i + 5] == '>') {
                                                      tagFound = 'X';
                                                      continue;
                        if ((payByteTemp<i> == '>') && (tagFound == 'X')) {
                             tagFound = ' ';
                             continue;
                        if (tagFound == ' ') {
                             if (endXmlTagFound == 'X') {
                                  continue;
                             payByteOut[actualCount++] = payByteTemp<i>;
                   byte[] payByteExp = new byte[actualCount];
                   System.arraycopy(payByteOut, 0, payByteExp, 0, actualCount);
                   payload.setContent(payByteExp);
                   msg.setDocument(payload);
                   inputModuleData.setPrincipalData(msg);
              } catch (Exception e) {
                   ModuleException me = new ModuleException(e);
                   throw me;
              return inputModuleData;

  • File Name Length

    Hi All,
    While down loading .csv file, i can get my file name length dynamicallly upto 157 bytes but not getting more than that.
    I have a requirement to download very long file name. Can any one please suggest me a good solution?.
    My code is
    response.setContentType(contentType);
                        response.setCharacterEncoding("WINDOWS-932");
                        response.setHeader("Content-Disposition",
                                  "attachment; filename="
                                            + URLEncoder.encode(fileName, "UTF-8"));-vignesh

    It seems there is no restrictions in filename's maxlength.
    However, if you check the section 2.3 of this link
    [http://www.faqs.org/rfcs/rfc2183.html|http://www.faqs.org/rfcs/rfc2183.html]
    It says:
    It is important that the receiving MUA not blindly use the suggested
    filename.  The suggested filename SHOULD be checked
    (and possibly changed) to see that it conforms to local filesystem conventions,
    does not overwrite an existing file, and does not present a security problem
    (see Security Considerations below).I tried to test filename's maxlength with different browsers and found that results differ with browsers.
    The HTTP response header nevertheless contained the full filename.
    Above all, IMO avoiding long filename is the best solution.

  • Problem with Attachment Names

    Hi All,
    I am using the FM
    'SO_NEW_DOCUMENT_ATT_SEND_API1'
    to send data from the program to the user's email Id.
    There is a small issue I am facing. The report has two different files to be emailed and the code seems to be fine. But when the email is delivered, both the files have the same names (attachment1.txt & attachment1.txt). The contents of the two files are diferent as per the expected results but only for the attachment names.
    Any help in this case would be appreciated.

    Hi,
    Here are the parameters we will pass when we use the Fm
      lt_packing_list-transf_bin = 'X'.
      lt_packing_list-head_start = 1.
      lt_packing_list-head_num = 0.
      lt_packing_list-body_start = lv_start.
      lt_packing_list-body_num = tab_lines.
      lt_packing_list-doc_type = lv_extension.
      <b>lt_packing_list-obj_name = it_attach_data-attch_name.</b>
      lt_packing_list-obj_descr = it_attach_data-attch_desc.
    here we write an append statements, so in your case, when
    filling the second time, you need to send the different file name, so pass the new name, ans also look the same in Debugging mode, it should come correct ...
    Regards
    Sudheer

  • Email attachment name in sender mail adapter to the receiver file adapter

    HI ,
    Ths is regarding email to file scenario. I am trying to create file (in rceiver file adapter) with the same name as the email attachment that i read from mail sender adapter. I want ro use adapter module for this. I could find from blogs that there is module - GetAttachmentName - available that i can use for this in sender mail adapter.
    Can you please let me know what whetehr i neeed to mention any module key and parameters for this.
    I assume , i need to do following steps :Please confirm.
    1. i can use this module - after payload swap module and before standard mail adapter module in sender mail adapter
    2. select ASMA option in advanced tab in sender mail adapter
    3. In receiver file adapter select ASMA option in advanced tab in sender mail adapter
    4. Also select file name option in ASMA in sender mail adapter
    Thanks,
    Vamsi

    Hi Vamsi,
    your scenario is also described here: Re: sender mail adapter - attachment name
    If you use the Module getAttachmentName, which is described here,
    http://wiki.sdn.sap.com/wiki/display/XI/AdapterModulePI7.0GetAttachmentName
    your scenario should work as you described it.
    You just need to make sure that the Attachment Name that you read in the first place, is mapped to the Filename Attribute of the
    Fileadapter (http://sap.com/xi/XI/System/File/FileName).
    regards,
    Daniel

  • Limitation on principal name length due to propagation?

    Is there a limitation on the java.security.Principal name length due to the underlying
    implementation of the security context propagation, even though it is a java.lang.String?
    Thanks,
    Guillaume Bedard

    Is there a limitation on the java.security.Principal name length due to the underlying
    implementation of the security context propagation, even though it is a java.lang.String?
    Thanks,
    Guillaume Bedard

  • Field name lengths

    The field name lengths in the Citadel database are approaching 80 characters when Citadel adds the total path to each field. I am saving data from a process running on computer #1 to computer #2. I am using OPC and to select the analog input values require an extremely long length to the field names.
    i.e.
    "\\Dispatchbd1\Freq_Process\FreqOPC.'OPC DAQ Items'.'Analog Input'.'PHS Narrow Freq'" is just one of my field names. When you have 75 values in a database that you want to look at this long name gets discouraging. Any help would be appreciated.

    Hi Wapa,
    You are right the names are a bit long. Citadel stores the absolute names (includes computer and process name), to make sure the names are unique. For example if process1 and process2 have both Pot1 and you are storing the data to the same database, unless you log it with a process name and computer name you would get a conflict - (if there is just Pot1 you would not know from which process).
    So, the computer and process parts are always there. The Item name has to be also included, but you have more choise there. The member ('OPC DAQ Items'.'Analog Input'.''PHS Narrow Freq') can be aliased to anything you want (and is valid). Go to the Edit database - select the item in the second window - select the datatype - type in alias (for example item1) - check the log to
    historical database and hit save (you are going to get a warning - don't worry about it, just make sure the alias (item1) you typed is is not already an existing item - because of the folder structure exposed by DAQ OPC you'll be fine).
    Now instaed of using "\\Dispatchbd1\Freq_Process\FreqOPC.'OPC DAQ Items'.'Analog Input'.'PHS Narrow Freq'" you can go with "\\Dispatchbd1\Freq_Process\FreqOPC.item1" - you can stop loggin the original member.
    If you need to go even shorter, you can create an expression object for every member you want to log and then log the expression. Then you get to something like:
    "\\Dispatchbd1\Freq_Process\Exp1"
    I hope this helps.
    Martin

  • Report Name Length Problem

    Hies
    Guys I've a problem in oracle report calling from Oracle FORMS. I am using reports and forms 6i. When the report name length is more than 30 characters the report engine runs first time correctly but on the second call of report the system gives an error :
    " RWRBE60.exe has generated errors and will be closed by windows.You will need to restart the program ".
    After this error the report engine closes and i have to call the report again.
    Is there a length fixed for reports name in Oracle 6i.
    Is any possible solution available.
    Remember i dont want to shorten my report names.
    Kindly help me with this.
    Thanx.

    There may be a limit, but I'm not aware of any. I never ran accross a limit. You may try the latest patch to see if it helps. What is your exact Developer version?
    But I really have never seen report names of more than 10 characters or so. Almost every application has some short program coding, like xyz_0010.rep, r_emp.rep etc.
    Do you mean the the name including the full path is more than 30 characters? If you put the path in the REPORTS60_PATH variable, your report names don't have to include the path.

  • Need to get the Mail attachment name as it is to the receiver file adapter

    I am doing a Mail to File scenario. I need to get the attachment from the mail and store it on the file server. I am using the PayloadSwap bean in the sender mail adapter. My requirement is to carry forward the attachement name as it is to the receiver file adapter side and store the file with the same name.
    Did any one try doing this? I was looking at developing an adapter module but got struck as I could not find whether the attachement name is stored in the XI payload after it has got swapped using the swap bean.
    Any help would be appreciated.
    VJ

    Oops pressed the send key. Take two.
    This is becoming a damn nightmare. When I run the adapter I am getting ModuleExceptions. Can you pass your eyes over these Java config settings to see what I am doing wrong. Using NWDS CE 7.1 with PI 7.1 both at SP07. All the imports were taken from PI 7.1 after SP07 was applied. The build id of NWDS is
    SAP NetWeaver Developer Studio
    SAP NetWeaver 7.1 Composition Environment SP07 PAT0001
    Build id: 200901152336
    APPLICATION.XML
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"
    "http://java.sun.com/dtd/application_1_3.dtd">
    <application>
    <display-name>MailPOP_EAR</display-name>
    <description>EAR description</description>
    <module>
    <ejb>MailPOP_EJB.jar</ejb>
    </module>
    </application>
    APPLICATION-J2EE-ENGINE.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE application-j2ee-engine SYSTEM "application-j2ee-engine.dtd">
    <application-j2ee-engine>
    <reference reference-type="hard">
    <reference-target provider-name="sap.com" target-type="service">engine.security.facade</reference-target>
    </reference>
    <reference reference-type="hard">
    <reference-target provider-name="sap.com" target-type="library">engine.j2ee14.facade</reference-target>
    </reference>
    <reference reference-type="hard">
    <reference-target provider-name="sap.com" target-type="service">com.sap.aii.af.svc.facade</reference-target>
    </reference>
    <reference reference-type="hard">
    <reference-target provider-name="sap.com" target-type="interface">com.sap.aii.af.ifc.facade</reference-target>
    </reference>
    <reference reference-type="hard">
    <reference-target provider-name="sap.com" target-type="library">com.sap.aii.af.lib.facade</reference-target>
    </reference>
    <reference reference-type="hard">
    <reference-target provider-name="sap.com" target-type="library">com.sap.base.technology.facade</reference-target>
    </reference>
    <fail-over-enable mode="disable" />
    </application-j2ee-engine>
    EJB-J2EE-ENGINE.XML
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE ejb-j2ee-engine SYSTEM "ejb-j2ee-engine.dtd">
    <ejb-j2ee-engine>
    <enterprise-beans>
    <enterprise-bean>
    <ejb-name>GetMailAttachment</ejb-name>
    <jndi-name>GetMailAttachment</jndi-name>
    <session-props/>
    </enterprise-bean>
    </enterprise-beans>
    </ejb-j2ee-engine>
    EJB-JAR.XML
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans
    2.0//EN"
    "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
    <ejb-jar>
    <description>EJB JAR description</description>
    <display-name>EJB JAR</display-name>
    <enterprise-beans>
    <session>
    <ejb-name>GetMailAttachment</ejb-name>
    <home>com.sap.aii.af.lib.mp.module.ModuleHome</home>
    <remote>com.sap.aii.af.lib.mp.module.ModuleRemote</remote>
    <local-home>com.sap.aii.af.lib.mp.module.ModuleLocalHome</local-home>
    <local>com.sap.aii.af.lib.mp.module.ModuleLocal</local>
    <ejb-class>sample.GetMailAttachment</ejb-class>
    <session-type>Stateless</session-type>
    <transaction-type>Container</transaction-type>
    </session>
    </enterprise-beans>
    </ejb-jar>
    SENDER MAIL ADAPTER modules
    1 AF_Modules/PayloadSwapBean Local EB 1
    2 GetMailAttachment Local EB 2
    3 sap.com/com.sap.aii.adapter.mail.app/XIMailAdapterBean Local EB 3
    1     swap.keyName          payload-name
    1     swap.keyValue          MailAttachment-1
    RECEIVER FILE MODULES
    1     localejbs/AF_Modules/DynamicConfigurationBean     Local Enterprise Bean     1
    2     localejbs/CallSapAdapter                    Local Enterprise Bean     2
    1     key.0          write http://sap.com/xi/XI/System/File FileName
    1     value.0          message.interface
    VARIABLE FILENAME SUBST WITH ASMA TURNED ON
    fName     message:interface_name
    JAVA SOURCE
    package sample;
    import javax.ejb.CreateException;
    import javax.ejb.SessionBean;
    import javax.ejb.SessionContext;
    import com.sap.aii.af.lib.mp.module.Module;
    import com.sap.aii.af.lib.mp.module.ModuleContext;
    import com.sap.aii.af.lib.mp.module.ModuleData;
    import com.sap.aii.af.lib.mp.module.ModuleException;
    import com.sap.engine.interfaces.messaging.api.Message;
    import com.sap.engine.interfaces.messaging.api.MessagePropertyKey;
    import com.sap.engine.interfaces.messaging.api.TextPayload;
    import com.sap.engine.interfaces.messaging.api.XMLPayload;
    import com.sap.aii.af.service.cpa.Channel;
    @ejbHome <{com.sap.aii.af.lib.mp.module.ModuleHome}>
    @ejbLocal <{com.sap.aii.af.lib.mp.module.ModuleLocal}>
    @ejbLocalHome <{com.sap.aii.af.lib.mp.module.ModuleLocalHome}>
    @ejbRemote <{com.sap.aii.af.lib.mp.module.ModuleRemote}>
    @stateless
    <code>GetMailAttachment</code>
    @SuppressWarnings("unused")
    public class GetMailAttachment implements SessionBean, Module {
         private static final long serialVersionUID = 7612238514043673502L;
         private SessionContext myContext;
         private MessagePropertyKey myFileName;
         public void ejbRemove() {
         public void ejbActivate() {
         public void ejbPassivate() {
         public void setSessionContext(SessionContext context) {
              myContext = context;
    @throws CreateException
         public void ejbCreate() throws CreateException {
         public void getMessageProperty(MessagePropertyKey FileName) {
              myFileName = FileName;
    @param moduleContext
               Contains data of the module processor that might be important
               for the module implementation such as current channel ID
    @param inputModuleData
               Contains the input XI message as principal data plus eventual
               set supplemental data
    @return ModuleData Contains the (changed) output XI message. Might be the
            response message if the module is the last in the chain.
    @exception ModuleException
                   Describes the cause of the exception and indicates whether
                   an retry is sensible or not.
         @SuppressWarnings("deprecation")
         public ModuleData process(ModuleContext moduleContext,
                   ModuleData inputModuleData) throws ModuleException {
              try {
                   Message msg = (Message) inputModuleData.getPrincipalData();
                   TextPayload payload = msg.getDocument();
                   String contentType = payload.getContentType();
                   // Content Type could be something like
                   // text/plain;charset="UTF-8";name="file.txt"
                   contentType = contentType.replaceAll("\"", "");
                   int i = contentType.lastIndexOf("=") + 1;
                   String fileName = contentType.substring(i);
                   msg.setMessageProperty(myFileName, fileName);
                   inputModuleData.setPrincipalData(msg);
              } catch (Exception e) {
              return inputModuleData;
    JAVA ERRORS
    2009-02-04 11:41:14     Information     Mail: calling the module processor for channel LMK_Common_Mail_Sender
    2009-02-04 11:41:14     Information     Swap: swapping by payload-name ? MailAttachment-1
    2009-02-04 11:41:14     Information     Swap: successfully swapped
    2009-02-04 11:41:14     Information     Mail: message leaving the adapter (call)
    2009-02-04 11:41:14     Information     The application tries to send an XI message asynchronously using connection AFW.
    2009-02-04 11:41:14     Information     Backward validation is enabled
    2009-02-04 11:41:14     Error     Unable to validate the message with message ID 8702df71-f254-11dd-9b9b-001a64a73518
    2009-02-04 11:41:14     Error     Returning to application. Exception: com.sap.engine.interfaces.messaging.api.exception.MessagingException: Content is not allowed in prolog.
    2009-02-04 11:41:14     Error     Mail: error occured: com.sap.engine.interfaces.messaging.api.exception.MessagingException: Content is not allowed in prolog.
    2009-02-04 11:41:14     Error     Mail: error occured: com.sap.aii.af.lib.mp.module.ModuleException

  • B2B outbound Channel Configuration - EMail - Attachment Name and Extension

    Hello,
    I have configured an outbound channel to send the payload (xml) as an attachment. When I leave the "Subject" field in the Channel configuration blank, the attachment file name looks like this,"HostPartnerName_TradingPartnerName_DocumentType" without the file extension. If I supply the "Subject" field with the value, the file name gets replaced with the subject and the file extension still is missing.
    I would like to receive a file name in a format like "batch_b2b.messageId.xml". The property b2b.messageId gets the value from the Mediator. The composite that passes the information like the b2b properties has been made generic to handle different Trading Partners, so for a channel that uses SFTP, I have used the Filename format and supplied the value as "batch_%MSG_ID%.xml". Is there a way I can do the same for Email channel?
    Thanks,
    Venkatesh

    Hi Venkatesh,
    Attachment name can be set from the middleware using below header (as per the mode of integration used) -
    1. For AQ mode of integration, use actionName -
    actionName=ATTACHMENT_NAME:test.txt
    2. For JMS mode of integration use custom JMS header - jca.jms.JMSProperty.ATTACHMENT_NAME to populate the name.
    3. For fabric (default) mode of integration, use b2b.attachmentName header
    Regards,
    Anuj

  • Problem in Mail Receiver attachment name

    Hi all.
    we are doing a interface from file to Mail (Excel file as a attachment).
    we have written the adapter module to convert the  XML from PI to Excel.. which is working fine.
    For the attachment name i was hardcoding the attachment name using
    localejbs/AF_Modules/MessageTransformBean
    and Transform.ContentDescription as Testing.xls.
    The scenario works fine.
    But i want the attachment name to be dynamically set like xyzddmmyyyy.xls.
    I am not using any Mail package.
    I want to set the attachment name dynamically. so i follwed the blog
    http://www.sdn.sap.com/irj/scn/weblogs;jsessionid=(J2EE3414700)ID0922321550DB00664514007823519662End?blog=/pub/wlg/3202
    i am getting the filename from the xmlpayload and setting it using
                            xp.setName(filename);             
                      xp.setContentType("application/vnd.ms-excel");
                xp.setContent(by);
    but the problem is that now i am not getting the excel file instead a untitled.bin file which have the Contents.
    in module configuration i have
    localejbs/XMLToExcelConversion                                          LocalEnterpriseBean               0
    sap.com/com.sap.aii.adapter.mail.app/XIMailAdapterBean      LocalEnterpriseBean             1
    Can you please throw some light on this problem..
    Thanks in advance
    Babu.

    Try this:
    xp.setContentType("application/vnd.ms-excel; filename=\""filename"\");

  • Dynamic attachment name in receiver mail adapter

    Hi  all,
    i am doing a receiver mail scenario (PI 7.1). my requirement is like this :
    Receiver file need to be send in receiver mail attachment and attachment name should be dynamic
    format for the attachment name should be like this
    R+value from a particular field in payload +Timestamp
    for example my file name should be like this  R001_510815021009062532.xml  
    which is     R+ 001_510815 + 021009062532 + .xml
    can anybody suggest me how to go for this requirement? is ther any UDF or should i go for adapter module developement?
    Thanks
    sandeep sharma
    Edited by: sandeep sharma on Oct 13, 2009 8:55 AM

    Hi K Fatima,
    I read your solution.I have a similar requiement but I need to send the entire output payload as an attachment,so I am using XSLT to send the payload as an attachment.
    I am creating the file name through dynamic configuration in XSLT but the name of attachment is not as required but its any random generated name:
    *code used:*
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:map="java:java.util.Map"
      xmlns:dyn="java:com.sap.aii.mapping.api.DynamicConfiguration"
      xmlns:key="java:com.sap.aii.mapping.api.DynamicConfigurationKey">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" />
    <xsl:output indent="yes" />
    <xsl:param name="inputparam"/>
    <!-- mail parameters -->
    <xsl:template match="*">
    <ns:Mail xmlns:ns="http://sap.com/xi/XI/Mail/30">
    <xsl:variable name="new-value" select="Shipment/InternalShipmentNum"/>
    <Subject>Mail</Subject>
    <From>xyz</From>
    <To>abc</To>
    <xsl:variable name="dynamic-conf" 
            select="map:get($inputparam, 'DynamicConfiguration')" />
        <xsl:variable name="dynamic-key"  
            select="key:create('http://sap.com/xi/XI/System/File', 'Directory')" />
        <xsl:variable name="dynamic-value"
            select="dyn:get($dynamic-conf, $dynamic-key)" />
        <xsl:variable name="new-value"    
            select="concat($dynamic-value, 'subfolder\')" />
        <xsl:variable name="dummy"
            select="dyn:put($dynamic-conf, $dynamic-key, $new-value)" />
    <!--Content type -->
    <Content_Type>application/xml</Content_Type>
    <!Content Description>
    <Content_Disposition>attachment;filename "<xsl:copy-of select="$new-value"/>"</Content_Disposition>
    <!--Content Disposition -->
    <Content_Description><xsl:copy-of select="$new-value"/></Content_Description>
    <Content>
    <xsl:copy-of select=".">
    <xsl:apply-templates/>
    </xsl:copy-of>
    </Content>
    </ns:Mail>
    </xsl:template>
    </xsl:stylesheet>
    Please suggest ! I need the value in "Shipment/InternalShipmentNum" as name of attachment.
    Thanks in advance!
    Indu Khurana

  • Setting dynamic attachment name in mail adapter

    Hi experts,
    I have a mail adapter that send e-mails from ECC to several address.
    I have configured dynamically the FROM and TO field using the code showed below in message mapping:
    public String SetMailParameters(String Mail_address_to, Container container){
       //write your code here
      String valueFrom = "my_address";
    DynamicConfiguration conf = (DynamicConfiguration) container.getTransformationParameters().get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
    DynamicConfigurationKey key1 = DynamicConfigurationKey.create( "http://sap.com/xi/XI/System/Mail",  "THeaderFROM");
    DynamicConfigurationKey key2 = DynamicConfigurationKey.create( "http://sap.com/xi/XI/System/Mail",  "THeaderTO");
    conf.put(key1, valueFrom);
    conf.put(key2, Mail_address_to);
      return  "";
    In communication channel I have checked ASMA and variable transport binding (using XHeaderName1 and 2), mail package is not checked.
    It works fine!
    My question is:
    I need to dynamically configure also the Attachment name: is it possible?
    I've tried adding the code below:
    DynamicConfigurationKey key3 = DynamicConfigurationKey.create("http://sap.com/xi/XI/System/File","FileName");
    conf.put(key3,Attachment_name);
    and also
    Transform.ContentDisposition      attachment;filename=<FileName>
    in Message TransformBean in communication channel, but it doesn't work!!!
    Any idea?
    Thanks
    Fabio Boni

    Hi,
    thanks a lot!!
    ASMA and variable transport binding must be checked or not?
    it raise an error in runtime workbench message monitoring:
    2010-09-02 17:41:15 Success Mail: calling the adpter for processing
    2010-09-02 17:41:15 Error Mail: call failed; com.sap.aii.messaging.util.XMLScanException: expecting end tag: Mail, but found {'}Content_Disposition at state 1
    2010-09-02 17:41:15 Success Mail: sending a delivery error ack ...
    2010-09-02 17:41:15 Success Mail: sent a delivery error ack
    2010-09-02 17:41:15 Error Mail: error occured: com.sap.aii.af.ra.ms.api.RecoverableException: com.sap.aii.messaging.util.XMLScanException: expecting end tag: Mail, but found {'}Content_Disposition at state 1
    2010-09-02 17:41:15 Error MP: Exception caught with cause com.sap.aii.af.ra.ms.api.RecoverableException: com.sap.aii.messaging.util.XMLScanException: expecting end tag: Mail, but found {}Content_Disposition at state 1
    2010-09-02 17:41:15 Error Exception caught by adapter framework: com.sap.aii.messaging.util.XMLScanException: expecting end tag: Mail, but found {}Content_Disposition at state 1
    2010-09-02 17:41:15 Error Delivery of the message to the application using connection Mail_http://sap.com/xi/XI/System failed, due to: com.sap.aii.af.ra.ms.api.RecoverableException: com.sap.aii.messaging.util.XMLScanException: expecting end tag: Mail, but found {}Content_Disposition at state 1.
    This is my message in message monitoring:
    <?xml version="1.0" encoding="UTF-8" ?>
    - <ns1:Mail xmlns:ns1="http://sap.com/xi/XI/Mail/30">
      <Content_Disposition>"attachment; filename="MyFileName.txt"</Content_Disposition>
      <Content>ZLF;0001000079;Dealer Motors UK</Content>
      </ns1:Mail>
    In message mapping with target message mail package I've linked Content_Disposition with the constant
    "attachment; filename="MyFileName.txt"
    If I cancel this relation the mail arrives correctly.
    One other thing: when I took mail.xsd from SAP the fields Content_Disposition and Content_Description weren't in, so I added them manually in XSD.
    thanks
    Edited by: Fabio Boni on Sep 2, 2010 5:42 PM
    Edited by: Fabio Boni on Sep 2, 2010 6:06 PM

  • Mail Attachment Name

    Hi,
    I am using File to Mail scenario. There is no mapping, it uses dummy Interfaces. I have Adapter Module at the Receiver in Mail to dynamically get the filename and set it as the attachment name.
    Following is the module code. The problem with the code is I get 2 attachments in the mail, One with proper file name as desired and the 2nd attachment as "Untitled.xml". Need to get rid of this Untitled.xml. Note: Keep attachments is Checked as I need the file in attachment.
    Message msg = (Message) inputModuleData.getPrincipalData();     
                   XMLPayload xmlpayload = msg.getDocument();
                   String strfileName = msg.getMessageProperty("http://sap.com/xi/XI/System/File", "FileName");
                   byte by[] =  xmlpayload.getText().getBytes();
                   xmlpayload.setName(strfileName);
                   xmlpayload.setContentType("text/xml");
                   xmlpayload.setContent(by);
                   msg.addAttachment(xmlpayload);
                   inputModuleData.setPrincipalData(msg);

    Create an UDF and mention the key and the value of the file name you wish
    public void DynamicFilename(String[] a,String[] b,ResultList result,Container container){
      //write your code here
    AbstractTrace trace = container.getTrace();
    String strDirectory=" ";
    String strFileName="";
    try
         Map map= container.getTransformationParameters();
         //This is for generating the file Direcotry Dynamically
         DynamicConfiguration conf = (DynamicConfiguration) container.getTransformationParameters().get
    (StreamTransformationConstants.DYNAMIC_CONFIGURATION);
         DynamicConfigurationKey key = DynamicConfigurationKey.create( "http://sap.com/xi/XI/System/File", "Directory");
         DynamicConfigurationKey key1 = DynamicConfigurationKey.create("http://sap.com/xi/XI/System/File",
    "FileName");
    strDirectory= "/xxx/xxx/xx";
    strFileName= b[0] + b[2] + b[1]+ ".XML";
    trace.addWarning("strDirectory " +strFileName);     
    conf.put(key, strDirectory);
    conf.put(key1, strFileName);
    result.addValue(b[0]);
    catch(Exception ex)
    trace.addWarning("Catch Block " );
    Edited by: Sainath Chutke on Jan 16, 2009 10:19 AM

  • Mail Attachment with attachment name = mail subject name

    Hi,
    I am using the mail adapter and today I am using hard codes attachment names using the MessageTransformBean. I have read the blog /people/michal.krawczyk2/blog/2006/02/23/xi-dynamic-name-in-the-mail-attachment--pseudo-variable-substitution about dynamic filenames but how do I get the eMail subject as a viriable to create the attachment?
    Thanks
    Juergen

    Juergen my weblog was the simplest suggestion to your issue - you can put the mail subject anywhere in
    message get it (and remove) in the adapter module
    you can also try to get the
    Adapter-Specific Message Attributes from the adapter module 
    http://help.sap.com/saphelp_nw04/helpdata/en/43/09b16006526e72e10000000a422035/content.htm
    but I'm not sure it the second solution works with adapter modules - but you can do an easy check
    Regards,
    michal
    <a href="/people/michal.krawczyk2/blog/2005/06/28/xipi-faq-frequently-asked-questions">XI FAQ - Frequently Asked Questions</a>

Maybe you are looking for

  • MSI X48C PLATINUM BIOS PROBLEM

    Hello, i post this topic cause i don't saw any end for my problem, i got the same problem then a lot of people CPU work at half speed i send already message to MSI Customer Service, but what they tell me to do don't solve my problem: MSI Customer: As

  • Problem of authorization in java system

    Hi all I have a problem of authorization. I have two sap system: SAP ERP, SAP Netweaver 2004s (only java). In my sap ERP I have configured some web services. Now I would use those web services from my Netweaver , so I execute those step: From sap erp

  • Missing data in Acrobat Pro XI PDF created from Microsoft Word (2010) doc

    When I create an "Adobe PDF" from a Microsoft 2010 Word doc that contains mainly images and text boxes, about 50% of the text boxes do not appear in the PDF.  Also, some of the images (layered on top of each other) appear in a different order - the o

  • NEW GL Scenario

    Hi, Please explann the config required in new gl Scenario node for config. Thanks

  • Error when building lightdm-unity-greeter

    Hi, I built Unity from git last night, and today I've failed to make lightdm-unity-greeter with this error: make[2]: Entering directory `/home/isolet/Unity-for-Arch-Extra/lightdm-unity-greeter/src/unity-greeter-13.10.2/src' VALAC unity_greeter_vala.s