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
PravHi,
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 -
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,
MaliniHi 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,
ManigandanMy 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 PMHi 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 -
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
ThanksIs 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-minuteswell 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,
AnkitHi 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 PurcinoHi 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
SalilHi 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,
VamsiHi 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!
~VaasNot 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?
ThanksHi 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
-
Does anyone know how to win a fight with layout manager?
I am using the form designer in netBeans to design my page, which has a jPanel on the left and a number of controls on the right. My problem is that when I eventually get it to look half right at design time, it looks different at run time. The fonts
-
I linked husbands iPhone to my apple account. Now his number shows up on my iPad and mine is no longer on there. How do I get his off and mine back
-
Extending a ClassLoader's Resource-Finding Functionality
First Question: Is there a difference between: <class_name>.class.getResource() and this.getClass().getResource() Is one done natively? How does the VM see these two - as equivalent? Second Question: I know that when getClass().getResource() (or the
-
What is the Verizon number to dial for tower updates
The phone is a motorola flip phone
-
Purchase Req release strategy help
PR's generated from MRP are being blocked, however when I convert a planned order from MRP into a PR it is automatically released. I want MRP generated Reqs to be also released. I tried creating a new class, characteristic and strategy group but ran