Payload swapping

Hi
I have a rek where in I have to swap the payload with the attachement file (which is also a xnl file).
I am using the file-xi-soap scenario. After going through the SDN I have come across a pay load swap bean.  But in almost all the example's it was used with mail adapter. SAP help no where mentioned that this module is only for Mail adapter. When I try to implement the same in SOAP Adapater, it never detects this bean and it is immaterial for that in what way you configure that.
If anybody have implemented/worked similar kind of scenario could you plz advise whether this payload swap bean works with soap adapter ?
Thanks in advace
kumar

Hi,
PayloadSwapBean doesn't work with SOAP sender adapter.
For SOAP receiver adapter you can still use PayloadSwapBean or can use Axis SOAP Adapter.
For more info on Axis SOAP Adapter refer
http://help.sap.com/saphelp_nw04/helpdata/en/45/a4a36de28552f7e10000000a1553f7/frameset.htm
Thanks
Amit

Similar Messages

  • Filename extension in Payload Swap bean

    Hi Experts
    I have a scenario Proxy to FTPS , where I have to send an excel attachment. I have used payload swap bean in receiver channel and it is working fine as I am now able to see attachment in final destination folder however since the file name is coming from ECC and we are using dynamic configuration in PI to handle this. excel attachment is missing the extention .xls when it is being triggered from ECC and therefore in FTP folder file is getting generated but with no extention.
    I have added the extention .xls (as per the MIME header) in dynamic config and also tried to use concat function to achieve this extention to be added as final name of the file but when I did above adjustments I can see the correct name being generated in Main payload in SAP PI receiver channel monitoring but not in final destination folder, file still looks same as earlier (without any extention) , I believe since I am using payloadswapbean in module whatever I am getting in Mainpayload is being swapped by excel attachment values but not sure why the correct extention is not being shown up at final destination folders.
    Please suggest how can I get the correct file name in destination folder with the help of SAP PI, I know I can do this if ECC will add .xls in attachment name.

    Hi Mohit,
    I have tested the same scenario and it is working with PayloadSwapBean and DynamicConfiguration in the mapping and the file name correctly placed in the target.
    Receiver File CC:
    Dynamic Configuration:
    Target Directory:
    If your file name correctly set in dynamic configuration then the target file will be created correctly.
    Regards,
    Praveen.

  • Receiving message after Payload Swap

    Hi All
    I am stuck with a scenario where we have to deliver a PDF as an inline message and not as an attachment. The PDF is sent from an R/3 system through a Proxy as an attachment and then this is sent back into the IE Pipeline using a SOAP Channel. This is where the attachment is swapped as the payload. The Message that we receive from R/3 contains five fields plus the attachments, but once the payloadswap is done the PDF should be the main payload. I have a sender SOAP channel to start the second stage flow, but not sure on what message Interface to use hereu2026
    Flow u2013 Summary
    Stage 1 (R/3 to XI)
    Proxy with PDF as an attachment
    Message routed to a receiver SOAP channel that send the message back on to the IE Pipeline
    The attachment is swapped in this channel
    Stage 2 (XI u2013 Receiver) - Receiver uses FTP
    Receive the payload using a SOAP sender channel
    This is where I am stuck. Do not know how the payload looks like and what message interface to use to receive this PDF message.
    I would really appreciate if you could give me some guidance on this issue. I am not able to find any proper documentation for the payload swap bean, is there one out there??
    Thanks & Regards
    Prav

    Hi,
    This is a nasty little trick but it works great.
    Create any Message Interface with any structure for inbound and outbound interfaces if required... then do your configuration assuming that the Message interface is correct.
    Please note that this will only work if you have no mapping so you should not specify an interface mapping in the interface determination step.
    The trick is based on the fact that XI does not validate the structure of a message.  If a message has an incorrect structure, it gets picked up in the mapping, which is not a problem if you don't use any mapping.
    Sounds strange but trust me, it works...
    Regards,
    Yaghya

  • Payload Swap bean not working

    Hi All,
    We are working on PI 7.11. We are trying to retrieve the attachments from the mails and convert them into files. We have enabled Keep Attachments in sender mail adapter. For swapping the payload we used payload swap bean. We referred the below blog
    /people/michal.krawczyk2/blog/2005/12/18/xi-sender-mail-adapter--payloadswapbean--step-by-step
    We are just trying with XML attachments.
    The problem now is the payloads are not swapping. The file contains only the body of the mail not the attachment. I dont know what I'm missing. Please advice
    Regards,
    Malini

    Hi abhishek,
    Please find below the config done in adapters
    1     localejbs/AF_Modules/PayloadSwapBean                          Local Enterprise Bean     1
    2     sap.com/com.sap.aii.adapter.mail.app/XIMailAdapterBean     Local Enterprise Bean     mail
    1     swap.keyName     Content-Description
    1     swap.keyName     Content-Disposition
    1     swap.keyValue     MailAttachment-1
    1     swap.keyValue     attachment;filename="MailAttachment-1.xml"
    Regards,
    Malini

  • Payload Swap Bean in SFTP adapter

    Hi ,
    I want to use Payload Swap Bean in SFTP Receiver adapter. Please tell me the flow.
    Regards,
    Manigandan

    My Configuration in Adapter
    File names in message

  • SOAP To File (Attachment swapping with Payload using Payload Swap Bean)

    Hi,
    I am working on the subject line. The scenario works well and good when I use the bean in Receiver File Communication Channel.
    The same bean configuration if I use on the sender SOAP the swapping of payload and attachment is not happening.
    Any Ideas.............
    Thanks,
    - Gujjeti.
    Edited by: Praveen Gujjeti on Feb 27, 2009 1:53 PM
    Edited by: Praveen Gujjeti on Feb 27, 2009 1:53 PM

    Hi Praveen,
    Clearly written in SAP help document :
    "SOAP sender Adapter does not support Moduls"
    so using Payload swipe bean is all van.
    Thanks
    Sunil Singh

  • Payload Swap bean Issues

    Hi
    I'm using the following values in my module tab -
    Module name - AF_Modules/PayloadSwapBean
    Module key - swapbean
    This is the sequence of the Module Configuration -
    swapbean      |       swap.keyName        |          Content-Disposition
    swapbean      |       swap.keyName        |           Content-Description
    swapbean      |       swap.keyValue        |           attachment;filename="MailAttachment-1.xls"
    swapbean      |       swap.keyValue        |          MailAttachment-1
    Thanks

    Is there no way of doing this?
    Of course there is a way
    Maybe i could put the swap bean on my file receiver adapter?
    No, if it is file to mail, use the module in at mail sender channel only.
    Try only this in your module parameter.
    swapbean | swap.keyName | payload-name
    swapbean | swap.keyValue | MailAttachment-1
    Regards,
    Prateek

  • Payload Swap Bean on 7.1

    has this been taken care?
    /people/stefan.grube/blog/2008/12/11/adjust-your-pi-70-adapter-modules-for-pi-71-in-15-minutes

    well then it seems interesting
    nothing really has changed for the payloadswapbean from 7.0 to 7.1
    ref: http://help.sap.com/saphelp_nwpi71/helpdata/en/2e/bf37423cf7ab04e10000000a1550b0/frameset.htm

  • BPM stops after receiving payloads from sender email channel

    Hi,
    my current situation:
    i have a sender email cc which sends the content plus attachments into the xi. here i map it to an BAPI-request structure and forward it to an BPM-process. this BPM does a sync call to an r/3. i use the payload swap bean to switch the attachment-1 as content.
    -> when i generate the email with e.g. thunderbird the scenario runs
    Problem:
    but if i use outlook or notes the email appears as a multipart message with attachments (that should not be a problem as i still use the attachment-1) the forward to the BPM causes a stuck?
    <b>this one works:</b>
    --SAP_f5e98a51-c25a-11db-8164-000e7fef2133_END
    Content-ID: <[email protected]>
    Content-Disposition: attachment;filename="[email protected]"
    Content-Type: text/xml; charset=utf-8
    Content-Description: SOAP
    <SOAP:Envelope>lots of funny stuff</SOAP:Envelope>
    --SAP_f5e98a51-c25a-11db-8164-000e7fef2133_END
    Content-ID: <[email protected]>
    Content-Type: text/html; charset=ISO-8859-1
    Content-Disposition: attachment;filename="MailMessage.htm"
    Content-Description: MailMessage
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    </head>
    <body bgcolor="#ffffff" text="#000000">
    <br>
    </body>
    </html>
    --SAP_f5e98a51-c25a-11db-8164-000e7fef2133_END
    Content-ID: <[email protected]>
    Content-Type: text/xml;charset=iso-8859-15
    Content-Disposition: attachment;filename="MailAttachment-1.bin"
    Content-Description: MailAttachment-1
    <?xml version="1.0" encoding="utf-8"?>
    <ns:salesorderlines_recordset xmlns:ns="http://namespace">
    and so on
    <b>this not:</b>
    --SAP_1ce0ab21-c25b-11db-c38b-000e7fef2133_END
    Content-ID: <[email protected]>
    Content-Disposition: attachment;filename="[email protected]"
    Content-Type: text/xml; charset=utf-8
    Content-Description: SOAP
    <SOAP:Envelope>same entries as above</SOAP:Envelope>
    --SAP_1ce0ab21-c25b-11db-c38b-000e7fef2133_END
    Content-ID: <[email protected]>
    Content-Type: multipart/alternative; boundary="=_alternative 002A6CACC125728A_="
    Content-Disposition: attachment;filename="MailMessage.bin"
    Content-Description: MailMessage
    --=_alternative 002A6CACC125728A_=
    Content-Type: text/plain; charset="US-ASCII"
    --=_alternative 002A6CACC125728A_=
    Content-Type: text/html; charset="US-ASCII"
    --=_alternative 002A6CACC125728A_=--
    --SAP_1ce0ab21-c25b-11db-c38b-000e7fef2133_END
    Content-ID: <[email protected]>
    Content-Type: text/xml;charset=iso-8859-15
    Content-Disposition: attachment;filename="MailAttachment-1.bin"
    Content-Description: MailAttachment-1
    <?xml version="1.0" encoding="utf-8"?>
    <ns:salesorderlines_recordset xmlns:ns="http://namespace">
    and so on
    could it be the  "Content-Type: multipart/alternative; boundary..." ??

    Oh yeah...
    found it by myself
    everything with type "multipart/alternative" stucks in SAP XI
    Sender Mail Adapter - html body mail
    at my side the only solution was:
    1. module
    PayloadSwapBean with "swap.KeyName = content-type" and "swap.KeyValue = multipart/alternative"
    to select the problematic part
    2. module
    MessageTransformBean with "transform.ContentType = text/plain; charset=UTF-8"
    to assign the part a standard/readable encoding (for XI)
    3. module
    PayloadSwapBean with "swap.KeyName = content-name" and "swap.KeyValue = Attachment-1"
    to go on with the attachment...
    both conversions "text/plain" and "text/xml" worked fine

  • Swapping attachment to content on Receiver Mail Adapter

    Hi Experts,
    Can I move my attachment data to content on receiver mail adapter ? I am not using Mail package or mapping. I tried using Payloadswapbean on receiver adapter but adapter generated email with attachment only with and without Payload swap bean module.
    Please let me know if it is possible without using Mail Package.
    Thanks,
    Ankit

    Hi there,
    If you want to use attachment in content, then you need to collect the entire mail content in BPM. From there you can use Payloadswap bean on receiver adapter.
    The reason behind using BPM is that the attachment is maintained only in Integration Directory. First the mapping converts the source into mail and then just before moving to receiver the attachment gets added to the mail(i.e. after mapping). So if a BPM is used then all the mail content with attachment will get transported to BPM first and then to the receiver with the above change (Payloadswap bean i.e transferring the attachment to content).
    Best Regards,
    Souvik

  • Sender Mail Adapter Configuration - Process Multiple Attachments

    Dear sirs,
    I need to process several attachments at the same mail message as individual payloads.
    In default configuration of sender mail adapter only the body of message is used as payload.
    So I added PayloadSwapBean Module at Processing Sequence and it processed the attachment I set in Module Configuration.  I'm not able to process all attachments available, just one attachment is sent to PI pipeline.
    How can I process all attachments of a single mail message?
    Thank you in advance.
    Fabio Purcino

    Hi Jose,
    We are trying to implement reading multiple attachment in sender mail adapter. 
    Our Requirement is : Reading a mail having multiple .xls files. This should be read and converted to payload .
    package multiswap;
    //import com.sap.aii.adapter.xi.ms.XIMessage;
    import com.sap.aii.af.lib.mp.module.*;
    import com.sap.aii.af.lib.trace.Trace;
    import com.sap.aii.af.sdk.xi.mo.Message;
    import com.sap.aii.af.sdk.xi.mo.MessageContext;
    import com.sap.aii.af.sdk.xi.mo.xmb.XMBMessageOperator;
    import com.sap.aii.af.sdk.xi.mo.xmb.XMBPayload;
    import com.sap.aii.af.sdk.xi.util.PayloadType;
    import com.sap.aii.af.service.auditlog.Audit;
    import com.sap.aii.af.service.cpa.*;
    import com.sap.engine.interfaces.messaging.api.MessageDirection;
    import com.sap.engine.interfaces.messaging.api.MessageKey;
    import com.sap.engine.interfaces.messaging.api.Payload;
    import com.sap.engine.interfaces.messaging.api.auditlog.AuditLogStatus;
    import java.util.Hashtable;
    import java.util.Iterator;
    import java.util.Locale;
    import javax.ejb.*;
    public class MultiSwapRead
        implements SessionBean, Module
        private static final String VERSION_ID = "$Id: //tc/xpi.af/NW731EXT_07_REL/src/_af_application_ejb_module/ejbm/api/com/sap" +
    "/aii/af/app/modules/PayloadSwapBean.java#1 $"
        private static final Trace TRACE = new Trace("$Id: //tc/xpi.af/NW731EXT_07_REL/src/_af_application_ejb_module/ejbm/api/com/sap" +
    "/aii/af/app/modules/PayloadSwapBean.java#1 $"
        private static final String SIGNATURE_PROCESS = "process(ModuleContext , ModuleData)";
        protected Hashtable cachedChannels;
        protected SessionContext myContext;
        public MultiSwapRead()
            cachedChannels = new Hashtable();
        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
            if(TRACE.beLogged(200))
                TRACE.entering("process(ModuleContext , ModuleData)", new Object[] {
                    moduleContext, inputModuleData
            ModuleData outputModuleData;
            Iterator itr;
            outputModuleData = inputModuleData;
            String chid = moduleContext.getChannelID();
            TRACE.infoT("process(ModuleContext , ModuleData)", ModuleCategories.SAP_MODULE_ROOT, (new StringBuilder()).append("performing payload swap for channel ").append(chid).toString());
            LookupManager lman = LookupManager.getInstance();
            Channel chan = null;
      try {
      chan = (Channel)LookupManager.getInstance().getCPAObject(CPAObjectType.CHANNEL, chid);
      } catch (CPAObjectNotFoundException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
      } catch (CPAException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
            Direction direction = chan.getDirection();
            String swapkey = moduleContext.getContextData("swap.keyName");
            String keyvalue = moduleContext.getContextData("swap.keyValue");
            Object obj = inputModuleData.getPrincipalData();
            Object pivotedObj = inputModuleData.getSupplementalData("mp.pivoted");
            boolean pivoted = pivotedObj == null || !(pivotedObj instanceof Boolean) ? false : ((Boolean)pivotedObj).booleanValue();
            Message mo = null;
            if(obj instanceof com.sap.engine.interfaces.messaging.api.Message)
                mo = (Message)((com.sap.engine.interfaces.messaging.api.Message)obj);
            } else
            if(obj instanceof MessageContext)
                mo = ((MessageContext)obj).getMessage();
            } else
                TRACE.warningT("process(ModuleContext , ModuleData)", ModuleCategories.SAP_MODULE_ROOT, "no message found");
            if(mo != null && XMBMessageOperator.numberOfPayloads(mo) > 0)
               // String midstr = XMBMessageOperator.getMessageId(mo).toString();
                MessageKey auditkey = new MessageKey(((com.sap.engine.interfaces.messaging.api.Message) mo).getMessageId(), com.sap.engine.interfaces.messaging.api.MessageDirection.INBOUND);
                itr = (Iterator) mo.getAttachments();
                if(swapkey != null && keyvalue != null)
                    StringBuffer textSwappingbyBuf = new StringBuffer();
                    textSwappingbyBuf.append("Swap: swapping by '").append(swapkey).append("' ? '").append(keyvalue).append("'");
                    String textSwappingby = textSwappingbyBuf.toString();
                    TRACE.infoT("process(ModuleContext , ModuleData)", ModuleCategories.SAP_MODULE_ROOT, textSwappingby);
                    Audit.addAuditLogEntry(auditkey, AuditLogStatus.SUCCESS, textSwappingby);
                   while (itr.hasNext()){
                    boolean swappedp = swapPayloads(mo, swapkey, keyvalue);
                    String swappedStatus = swappedp ? "Swap: successfully swapped" : "Swap: no matching payload found";
                    Audit.addAuditLogEntry(auditkey, AuditLogStatus.SUCCESS, swappedStatus);
                } else
                    StringBuffer textInvalidBuf = new StringBuffer();
                    textInvalidBuf.append("Swap: parameter missing ");
                    if(swapkey == null)
                        textInvalidBuf.append("swap.keyName");
                    if(swapkey == null && keyvalue == null)
                        textInvalidBuf.append(" and ");
                    if(keyvalue == null)
                        textInvalidBuf.append("swap.keyValue");
                    String textInvalid = textInvalidBuf.toString();
                    TRACE.warningT("process(ModuleContext , ModuleData)", ModuleCategories.SAP_MODULE_ROOT, textInvalid);
                    Audit.addAuditLogEntry(auditkey, AuditLogStatus.WARNING, textInvalid);
            } else
                String messageEmpty = "Swap: message is empty or has no payload";
                TRACE.infoT("process(ModuleContext , ModuleData)", ModuleCategories.SAP_MODULE_ROOT, messageEmpty);
            return outputModuleData;
        private static boolean swapPayloads(Message mo, String swapkey, String keyvalue)
            swapkey = swapkey.toUpperCase(Locale.ENGLISH);
            keyvalue = keyvalue.toUpperCase(Locale.ENGLISH);
            int ifound = -1;
            for(int i = 0; i < XMBMessageOperator.numberOfPayloads(mo); i++)
                XMBPayload pldi = XMBMessageOperator.getPayload(mo, i);
                String pldivalue = null;
                if(swapkey.equals("PAYLOAD-DESCRIPTION"))
                    pldivalue = pldi.getPayloadDescription();
                } else
                if(swapkey.equals("PAYLOAD-NAME"))
                    pldivalue = pldi.getPayloadName();
                } else
                    pldivalue = pldi.getContentAttribute(swapkey);
                if(pldivalue == null)
                    continue;
                pldivalue = pldivalue.toUpperCase(Locale.ENGLISH);
                if(pldivalue.indexOf(keyvalue) < 0)
                    continue;
                ifound = i;
                break;
            if(ifound >= 0)
                XMBPayload pldfound = XMBMessageOperator.getPayload(mo, ifound);
                if(pldfound.getPayloadType() != PayloadType.APPLICATION)
                    XMBPayload pldapp = XMBMessageOperator.getApplicationPayload(mo);
                    if(pldapp == null)
                        pldfound.setPayloadType(PayloadType.APPLICATION);
                    } else
                        pldapp.setPayloadType(PayloadType.APPLICATION_ATTACHMENT);
                        pldfound.setPayloadType(PayloadType.APPLICATION);
                    TRACE.infoT("process(ModuleContext , ModuleData)", ModuleCategories.SAP_MODULE_ROOT, "successfully swapped");
                return true;
            } else
                TRACE.warningT("process(ModuleContext , ModuleData)", ModuleCategories.SAP_MODULE_ROOT, "no matching found");
                return false;
    We couldn't go further. Please have a look in highlighted code.
    Regards,
    Kesava.

  • Sender "Mail" adapter - CSV file attachment

    Hi there
    I'm looking for some help in configuring a sender mail adapter that receives ".csv" files. I did read some blogs that mention using the "PayloadSwapBean" module to read the mail attachment instead of the mail content. My problem is to now convert the ".csv" file into a message. Is there a module that I can use ( is it the "MessageTransfomBean" ) and how. Any help would be appreciated.
    Thanks
    Salil

    Hi Salil,
    If you want to send a mail with a body and attachments, the message sender HAS to provide an XI message with attachments. I doubt a CSV file does justice.
    As Renjith said you need to convert CSV to XmL.
    A short description about the Standard Modules:
    MessageTransformationBean is a standard module used to apply the XSLT mapping to the adapter module by using <i>Transform.class</i> ( This xslt mapping is done to create a mail package, Dont confuse with the actual mapping in your case this is NOT for converting csv to xml).
    Also this module can be used to change the name and type of payloads by using <i>Transform.contentType</i>, <i>Transform.contentDisposition</i>, <i>Transform.contentDescription</i>.
    PayloadSwapbean is a standard module for replacing payloads with other payloads (SWAP)
    If you want to give each attachment a certain name use Parameters, <i>swap.keyname</i> for name of the payload and <i>swap.keyvalue</i>.
    I Hope the use of standard modules is understood.

  • 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

  • Using the Mail content and Mail Attachment in the mapping

    Hi,
    I have a requirement in which I need to read a file from the mail server and I am using the sender mail adapter for this. I have to convert the attachment of the mail in to the payload. To do this I am using the payload swap bean and mail transform bean. Now the issue is I have to get the information from both attachment and the mail content and need to map it to the target message. Please let me know how to do this.
    Thanks!
    ~Vaas

    Not sure if there is a staright forward way to achieve this.
    But I can think of a work around for your scenario.
    >>To do this I am using the payload swap bean and mail transform bean.
    Instead of doing it this way, try
    1. Message Transform bean that will transform the payload(content of the mail) to XML.
    2. PayloadSwapBean to switch Payload and Attachment.
    3. Message Transform bean to transform the attachment to XML.
    4. Custom adapter module to read the attachment, contnet and create your own desired XML.
    Alternatively, step 4 could be replaced by a Java mapping doing the same operation.
    Regards
    Jai

  • Java Null Pointer Exception in Mail Adapter

    Hi
    I've got a mail to file scenario which uses the payload swap bean to get the attachment from the mail and deliver it to a file receive channel location.
    Recently i've been getting this error -
    exception caught during processing mail message[1]; java.lang.NullPointerException: while trying to invoke the method java.lang.String.startsWith(java.lang.String) of an object loaded from local variable 'respline'
    Does anyone know what this means?
    Thanks

    Hi Riaz,
    exception caught during processing mail message[1]; java.lang.NullPointerException: while trying to invoke the method java.lang.String.startsWith(java.lang.String) of an object loaded from local variable 'respline'
    This exception is due to which you have used a Startwith function for the field 'respline' which is not evaluated.
    Please check and reprocess..
    Thanks,

Maybe you are looking for