Reg: Sender File Adapter - Picking the files serially
Hi Folks
I have a requirement where I require help from you with you valuable suggestions/solutions. Requirement is :
1. Two different folders(folder1 & Folder2) at sender system, PI has to pick the files from Folder 1 and needs to process to target.
2. Exactly after 30min duration PI has to pick the files from the second folder i.e., from Folder 2.
Conditions are :
i) Only after processing the files from Folder 1 PI should process the files from Folder2(after 30min).
ii) We might have many files(approx 10 - 15files) in each folder, PI must poll all the file in the folder in a single poll(i.e., without any delay).
Please suggest me what could be the best solution for this, either to create two communication channels or can we handle it using a single communication channel.
Kindly suggest.
Hi Suman,
The easieiet way is to use single communication channel to pick up all the files from the first folder. Then run a unix script in after processing column where it will check for any files to be picked by xi in folder1 and then proceed with transferring files from folder2 to target.
By this, you are making the scenario simple and realistic.
There are other alternatives like using two communication channels and the only hurdle will be the timing to check whether the folder1 files have been completely picked up or not.
Regards
Krish.
Similar Messages
-
Sender File Adapter picking the same file twice
We are facing a weird issue with File Sender Adapter
We are using PI File Adapter ( NFS ) to read files for a NFS folder and
processing those in PI.Normally it works fine. But for a scenario we
are noticing it sometimes process the same file twice before archiving,
thus duplicating the financial postings.
What we have is :
File Sender Adapter - NFS, Polling interval 60 secs, and Processign
mdoe Archive. File name includes Wildcards - JE_Upload*.txt
what we are noticing is that :
when it picks up a file, it immediately polls again to check for
another file, and sometimes the file is not yet archived so it picks up
and reprocess the same file.
If you see the message below, both belong to the same file, and it
picked up the same file again in 12 secs after processing it the first
time
Successful 02.11.2009 15:01:00 02.11.2009 15:01:01 APMANUAL urn:bl:i2g:003:100
SI_SKF_FIDOC_OB XI Message
Successful 02.11.2009 15:00:49 02.11.2009 15:00:50 APMANUAL urn:bl:i2g:003:100
SI_SKF_FIDOC_OB XI Message
Anyone seen this behavior before?Hi,
Please check the script which creates file in source NFS Folders. There is possibility that script is making change in file when PI is picking up the file.
When PI picks the file first time it creates one message ID in system. After that if script is making any change in file without file name change (This need not necessary data change), for PI it becomes new file and new message gets generated in PI for same file.
This error normally comes when File adapter is not able to archive file succesfully. For eg. file with same name alredy exists in Archive folder.
File adapter generates the new message id whenfile get modified(eg.change in its length or data change) even though
the file name is same and when file get change ,XI file adapter thinks that its new file and hence generate the new message id for same file.
If file has same name and notmodified then XI adapter will not generate new message id and will keep on throw the error till you remove that file with same name from the
archieve directory.
-Warm Regards,
Gouri -
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 -
Need help reg sender JDBC adapter
Hi,
I am having a requirement like, i need to fetch the data from two data base tables. and after fetching the data, i need to update those two tables.
For selecting the data from two tables, two select statements i need to write, how i can give two select statements in sender JDBC comm channel.
In sender JDBC channel, only one update query we can give...how i can update two tables?
Regards,
Venkata Ramana.Hello Venkat,
For your requirement, go for stored procedure and find the below thread.
Fetching data from JDBC without using JDBC sender adapter
Re: Executing an Oracle Stored Procedure from Sender JDBC adapter
Re: Sender JDBC adapter not picking up data
Re: Retrive data from two diffirent tables
hope this will help you
Thanks,
Venky -
I am trying to connect tibcoems with PI using a Sender jms adapter.After successfully installing the drivers , the sender adapter goes into error.
"The JMS Provider gave the error message as Not permitted, and the error code is null"
The Transport protocol is 'Access JMS Provider with JNDI' and i have been given the required parameters from the tibco guys.
Your input are highly appreciated.
ShyamHi AQmit,
Thanks for the reply.
Please find the screenshots of what i am trying to do.
Also, Can u direct me how to check the right logs? -
Sender File adapter - DataTime stamp at the end of aarchived file name
Hello,
I am archiving the file once PI file sender adapter picks the file from source directory.
The file is archived in the archive directory as <Date-Time-SSS_>FileName.
I need to append the value <Date-Time-SSS_> after the file name.
So archived file looks like FileName_<Date-Time-SSS>
How can I achieve this? Appreciate your help for valuable suggestions.
Thanks,
NamadevHi Namdev,
Generally when we archive file then in sender CC we just put the processing mode as Archive and specify the Archived directory name in Archive Directory section. in that case when the Communication channel pick the source file then after picking it it remove it from source directory and put it into Archived directory without making any change in the file name.
so if the file name is A.txt then in Archived directory also its name will be A.txt . However if you want to make any change in the name of the source file in the archived directory then you have two write Unix or DOC scrpt( depending upon your soure server )
if your source server is Unix then write shell script otherwise dos scriprt
.after wrtting the shell script just place in the archived directory or your source directory and call it in by mentioning it in Coomand Line section of your sender CC. You can easily search and get the required shell script .
Regards,
Saurabh -
Picking file in sequence/Queuing in sender SFTP adapter.
Hi Experts,
I am using SFTP adapter in sender side, it has no option of quality of service ( EOIO) and queue name as we have in FTP adapter configuration .Is there any predefined module provided by Sap which i use in the modules Tab in communication channel configuration to get the functionality of queuing ? just like we use strictXMlto plain bean etc.
I have 3 files which needs to proccess in a sequence one after another in order.I CANT USE BPM or Even FTP because of Security reasons.
please share you ideas.
Regards,
AnikaHi all,
I have tried using AF_Modules/DynamicConfigurationBean in module tab present is the sender SFTP adapter with the attribute qualityOfService.
parameter name Parameter value
key.0 insert http://sap.com/xi/XI/System/Messaging qualityOfService
value.0 ExactlyOnceInOrder
But in Moni i dont see the 3 messages didnt go in the same queue.But when i double click and open the dynamic configuration present in the soap header section i can see the values which i given in the module parameter.
Is there any way i can change the quality of service to EOIO at runtime ? how to change the default EO to EOIO.
Regards,
Anika -
Sender File Adapter - Dynamic Filename?
Dear All,
I have a simple requirement to retrieve a file named "XXX_ddmmyy" from an FTP site. The FTP site administrator will place a new file everyday. The date is part of the filename.
I can find a lot of information on how to set the Filename for a "Receiver File Adapter", but none about dynamically setting of the filename for a "Sender File Adapter".
Can you help please?
Kind Regards
FarshadHi,
You have mentioned over here that the requirement is to get the file "XXX_ddmmyy" from an FTP site.
Is that site strictly for keeping files related to your requirement only or lot of other files are also being placed???
If its strictly related to your requirement then you can use the filename "*.extension" and set the processing mode as "delete" so that once the File Adapter picks the file it will be automatically deleted.
But here disadvantage is that the file wont be no longer present in FTP site once it is picked by File adapter.
Thanks,
Lekshmi. -
Hi,
I have File to JDBC sceanrio, File is on FTP server and data is added in file in every 15 mint. while adding data to file its takes some time.
My problem : when data is being added to file, sender adapter picks the file when addition of data is not completed. so it picks incomplete file and send to target.
What can be the possible solution to be used for this problem or what configurtaion can be done in CC required.
Thanks
Laxmi BhushanHi Laxmi,
is PI picking file in NFS mode or FTP mode?
With NFS mode, you can use setting wait for file modification check. Same setting is available for FTP but it doesnt not work for FTP.
Another option could be ask Source system to generate file with a temporary name & rename once file is writen completely.
Regards
Sushil -
Sender File adapter with nested structure
friends,
Source structure is looks like below
<mt_details>
<header>
<key> </key>
<id > </id>
<name> </name>
<contact>
<key> </key>
<pno> </pno>
</contact>
</header>
</mt_details>
If both the nodes i.e <header>&<contact> are at same level then the sender adapter picking the file as requried.But in this case the <contact> node is subnode of <header> Please help how in configuring the sender file adpter(Fixed file).
Sample file :
HDRE100testname
PHO999999999
Ravi PalHi Ravi,
I dont think this is possible, Just read the following link,
http://help.sap.com/saphelp_nw04/helpdata/en/2c/181077dd7d6b4ea6a8029b20bf7e55/content.htm
and the content under FILE STRUCUTRE says,
<i>The structure of these substructures must be fixed and corresponds to the description of the row structure logic in the table below.</i>
The strcuture that you want is not supported.
Regards,
Bhavesh -
FCC Send File Adapter - missingLastFields not working
Hi
I have a flat file to capture using the sender File adapter
Parameter as follows:
Header_fieldNames : Key,Name,StaffID,Telephone
Header_fieldFixedLengths : 2,12,10,8
Header_endSeparator : 'nl'
Line_fieldNames : Key,Address,Company,LineText
Line_fieldFixedLengths : 2,20,20,40
However there are times where last field come in missing.
Hence I use the Header_missingLastFields : error
Line_missingLastFields : error
However it does not seem to be working as the adapter fails to pick the file from the FTP folder
but if I replace error with ignore, the sender adapter picked the files and process and send to the receiver adapter.
I need to flagged error in sxmb_moni if last field or last few fields are missing....any advise how could this be achieve ?
Regards
FredHi Freddy,
I think you might like to specify missingLastFields = add. then it will add the missing fields as empty. you can further check if these are empty in mapping and then fail the message or create an alert.
If you specify "ignore" then you will not get those fields in your structure and if you specify "error" then the file will not be picked up.
have a look here
http://help.sap.com/saphelp_nw04/helpdata/en/2c/181077dd7d6b4ea6a8029b20bf7e55/content.htm
missingLastfields
If the inbound structure has less fields than specified in the configuration then the XML outbound structure is created as follows:
○ ignore
Outbound structure only contains the fields in the inbound structure
○ add
Outbound structure contains all fields from the configuration; the fields missing in the inbound structure are empty.
○ error
Conversion is terminated due to the incomplete inbound structure. An error message is displayed
regards,
francis -
Sender RFC Adapter , Sender File Adapter - Payload Compression
Sender RFC Adapter or the Sender File Adapter compress the payload of any spaces in between the tags or remove any spaces at the start and end of the payload.
We need to pass the spaces as is in the message payload to the receiving system?
Is there a way to do it in PI 7.1.Hi Vikrant,
Preserving white spaces while reading a file from FTP
NameA.fieldContentFormatting
- Enter trim to remove all the leading and subsequent blanks for a value found. This is the default.
- Specify nothing to ensure that the value remains unaltered.
For RFC you need to check your payload to see whether spaces are coming from R/3 itself or not.
Regards
joel -
TWO SENDER FILE CHANNELS POLLING SAME DIRECTORY
I have a requirement to send a single file from a single FTP location to two different Target FTP locations as a passthrough interfaces. PI version 7.31
I thought of doing it through two different interfaces, both FTP to FTP keeping source same and destination differently
For First target (T1)Created dummy interfaces(Out/inbound) in ESR, created a configuration scenarion ,Sender and reciver FILE channels in ID, created an ICO.
For the second Target(T2) : can i use the same dummy interfaces as used in first while creating Sender channel?
can i use the same Sender channel as in first scenario to the ICO of Interface for second Target(T2)--> it gave error, same sender channel(IF FILE) channel can't be used to different Sender Agreements/Integrated Configuration Objects. So i copied the sender channel with a different name and used it in second Interface.
Reciever File channel obviously different for both cases with different server details and direcories.
My fear is, if i can go with this set up as we have two sender FTP channels polling on the same FTP directory, so possibility of lock issue and channel are operational on a mapping of one hour(first one 8to10 and second one 9to12, so 9 to 10 both channles poll simultaneously).
Please suggest any better way of handling this, or to resolve the lock issue ?could clusterSyncMode=lock help here?Hello,
I think u are getting confused.
>>My query was, if we could use two recievers(service) inside a single ICO, without giving any condition. Answer it please in YES or NO?
Yes, indeed u can do it.
IF YES, then how would the message dynamically determine the correct/specific reciever out of the two recievers configured in ICO?
>>Since u want to send same message to two different FTP servers so u don't have to worry about dynamically determining receivers. As soon as file sender adapter picks the file it will route the message to both the receivers and eventually send the same request message to two different FTP servers.
Hence i assume, for every file kept on source direcory, there would be two messages( 2 files) going to be created on two different targets? YES or NO?
>>YES
Thanks
Amit Srivastava -
Sender FTP Adapter not working with certain name
Hello,
We're facing the next problem within XI.
We configured a sender FTP adapter within the central adapter engine. This adapter is configured correctly however for some reason it is not picking up any file from the FTP server.
Changing status to inactive-> active again all kinds of modes and configs we tested.
However when copying this non-working adapter to a new one with a different name (Configuration is exactly the same!!!!!) and use this one in the sender agreement it worked immediately.
Somebody else faced similar problems and managed to solve it because for this error we don't want to adjust our naming conventions....
Thanks,
EmileHi Emile,
This could happen when AE cache is not getting updated.
Goto SXI_CACHE.
Click "Goto" -> AE Cache and check if you get a green symbol with a message saying " Cache contents are up-to-date".
Regards,
Anish -
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.
Maybe you are looking for
-
How to improve the performance of socket ?
how to improve the performance of socket ? . allocation and deallocation of buffer ?
-
How to get California ees and their supervisors in a report?
HEllo, I am using IT 0208 to identify California ees but among those ees how do I identify who are the supervisors. I was thinking something like this - get CA ees using 0208, run a report using SE16 u2013 HRP1001 and use relationship A 002
-
HT5438 Stuck on setting date and time
Apple TV stuck on setting date and time
-
Strange outputs while parsing String to Double
Hi All, I am writing a simple MIDlet on MIDP 2.0 and CLDC 1.1, where I need to convert two strings into Double calculate their difference and then display the result back on the screen. The code I am using is: double difference = Double.parseDoub
-
st of all... why doesn't my Zen support video with no audio? Surely that's expected?! Secondly, when playing an AVI (DIVX encoded) it always stops playing 5 seconds before it should with every file i have... My model is the creative Zen 4GB with late