Receiver file adapter creates an innecesarry extra line
Hi,
I have an issue with an extra line that add the receiver file adapter with the content conversion.
The file XML that the file adapter has to convert, is the next;
<root>
<cofig>
<FileName>NameOfTheFile.txt</FileName>
</cofig>
<lines>
<line>
<data>BBBBBBBBBBBBBBBBBBBBBB</data>
<data>Aaaaaaaaaaaaaaaaaaaaaa</data>
</lines>
</root>
Because FileName is not necessary, I remove it with:
cofig.fieldFixedLengths 0
cofig.fixedLengthTooShortHandling CUT
but it leaves an empty line that i don't want. that is, the text in the file start in the second line.
Any help?
Thank you in advance.
Can you do a small change in your mesg. structure ?
change it to....
<root>
<lines>
<line>
<data>BBBBBBBBBBBBBBBBBBBBBB</data>
<data>Aaaaaaaaaaaaaaaaaaaaaa</data>
</lines>
<i><b><cofig>
<FileName>NameOfTheFile.txt</FileName>
</cofig></b></i>
</root>
and then use
cofig.fieldFixedLengths 0
cofig.fixedLengthTooShortHandling CUT
followed by
endSeparator 0
Ref: Suppressing Field In Receiver File Adapter for more details.
Similar Messages
-
Receiver file adapter creates empty files, Empty-Message Handling SP19
Hello,
We have just upgraded the system to SP19.
One of the new features is that it should be possible to determine how XI messages with an empty main payload are to be handled in the receiver file adapter.
If the parameter Empty-Message Handling is set to 'Ignore' no file should be created if the main payload is empty. In our case an empty file (size 0 kb) is still created even though the main payload is empty and the flag is set to 'Ignore'.
Has anybody experienced the same problem?
// Best regards HansThis should work:
Use your own adapter module that parses incoming message and checks if it has any record sets in the document. If it does not have any record sets, then set the message to empty and then give this modified message to File receiver.
For example, see the example code below:
Module imports..
Audit log import..
DOM imports/SAX imports..
public ModuleData process(ModuleContext moduleContext, ModuleData inputModuleData) throws ModuleException {
try {
// get the XI message from the environment
Message msg = (Message) inputModuleData.getPrincipalData();
AuditMessageKey amk = new AuditMessageKey(msg.getMessageId(),AuditDirection.INBOUND);
Audit.addAuditLogEntry(amk, AuditLogStatus.SUCCESS,"RemoveRootTag: Module called");
XMLPayload payLoad = msg.getDocument();
Document doc = parseXmlFile(payLoad.getInputStream());
if(doc != null){
if(!doc.getDocumentElement().hasChildNodes()){
Audit.addAuditLogEntry(amk, AuditLogStatus.SUCCESS, "Document is empty!!");
payLoad.setContent("".getBytes());
msg.setDocument(payLoad);
// provide the XI message for returning
inputModuleData.setPrincipalData(msg);
} catch (Exception e) {
// raise exception, when an error occurred
ModuleException me = new ModuleException(e);
throw me;
// return XI message
return inputModuleData;
private Document parseXmlFile(InputStream xmlpayload) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
// Create the builder and parse the file
Document doc = factory.newDocumentBuilder().parse(xmlpayload);
return doc;
} catch (SAXException e) {
} catch (ParserConfigurationException e) {
} catch(IOException e){
return null; -
Receiver File Adapter - Create File on another SAP System
I am working on a project that includes this requirement: PDF files to be copied from a third party company via SFTP to a directory on our ECC system.
We have worked out the sender side config, and the transfer of the files into PI works fine via SFTP.
However, the PDF files are ending up in a directory on the PI system and not on our ECC system as expected.
The receiver communication channel is set up as follows:
Party = blank
Communication Component = communication component of the ECC business system
Adapter type = File
('Receiver' is ticked)
Transport Protocol = File System (NFS) (etc)
Target directory = /tmp (using this temporarily for testing)
I would have thought using the ECC business system would mean the files would end up on that system, but instead they end up on the /tmp directory on the PI system.
We are not permitted to use FTP between our SAP systems, so I can't go with that option.
I've searched for help on this and only see conflicting and vague statements about whether the NFS protocol can or can't be used for transfer to another SAP system in the landscape.
Any suggestions and help on the above, and the best method of transferring the files to the end SAP system would be very appreciated.
Regards,
Christineremember that NFS means that it is referring to a file system on PI server.
What you could do is mount a space on SAP PI onto SAP ECC so that ECC will be able to access the files on SAP PI.
Guess that should solve the problem. -
Empty Message Handling with Receiver File adapter
Hi,
We were using the "Empty-Message-Handling" (status set to Ignore) of Receiver file adapter to stop a 0 KB file from being written to the specified directory.
However, inspite of this, a 0KB file continues to be written.
The specifications are given below-
File Construction Mode - Add Time Stamp
Put File - Directly
Empty Message Handling - Ignore
Maximum Concurrency - 1
File Type - Binary
Can anyone please help with this.
Thanks and Regards,
ShiladityaHI,
In one of thread the same problem was coming. Just look at the thread.
Receiver file adapter creates empty files, Empty-Message Handling SP19
Or
Follow the weblog for the same requirement.
/people/gowtham.kuchipudi2/blog/2006/01/13/stop-creation-of-an-empty-file-from-file-adapter-using-module
Thnx
Chirag
Reward points if it helps. -
XI3.0 - file adapter create directory
Hi,
Is there anyway in 3.0 to prevent a receiver file adapter from creating a directory if it does not already exist. There was a parameter in the J2SE adapter but I do not know if or how this has been implemented in 3.0.
Regards
IanIan,
SPS 17 introduces a new configuration setting for the receiver file adapter: "Create Target Directory" which does exactly what you want.
See http://help.sap.com/saphelp_nw04/helpdata/en/57/a21f407b402402e10000000a1550b0/frameset.htm
Regards,
Koen -
New Line in EBCDIC file created by receiver file adapter
Hi mates,
I've configured the receiver file adapter to create a file in EBCDIC format by specifyin the File encoding 'Cp037'. When the file is viewed on the AS400 system using the command DSPPFM, it appears as a continuous text instead of line-by-line. I've tried specifying 0x0D(CR), 0x0A(LF), 'nl' as the endSeparator for the record type in content conversion, but no luck. Still the file looks like a continuous text.
I learnt from the following links that the New Line character (NL or NEL) in AS400 is Unicode '0x85'.
<a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4867251">OutputStreamWriter/InputSreamReader convert NEL to linefeed with Cp037 encoding</a>
<a href="http://search.cpan.org/~guido/libintl-perl-1.16/lib/Locale/RecodeData/IBM037.pm#CHARACTER_TABLE">CHARACTER TABLE</a>
But when I specify this '0x85' as the endSeparator, I get the error below as 0x85 (decimal equivalent 133) is not part of the standard ascii code i.e. basic 127 codes
<i>Conversion initialization failed: java.lang.Exception: java.lang.NumberFormatException: Value out of range. Value:"85" Radix:16</i>
Is there any way I can produce the EBCDIC file with new line as end separator for records?
I appreciate your inputs.
thx in adv
praveenInstead of using binary mode for FTP and specifying encoding, endSeparator, I used the text mode and left the translation to the FTP server on AS400 system.
Desirably, it generated the file with right encoding and new line characters.
praveen -
Multiple Header line in Receiver File adapter
Hi,
I have an issue in Receiver File adapter with multiple header lines. I am able to get only 1 header lines in the receiver file but not multiple header lines with 'nl' since it is static in file mode
[CommunityTag:Header]
empNo,EmpName,Age
[CommunityTag]
I tried with the below in content conversion one as below with no luck
Root.addHeaderLine=1
Root.headerLine=[CommunityTag:Header] 'nl' empNo,EmpName,Age 'nl' [CommunityTag]
Root.fiedSeparator=,
Root.endSeparator='nl'
I am getting the Header line as same row as static text.
Can you advise this.Hi Gabriel, I suggest to produce the header lines from additional nodes in the message payload. That means you need to modify the data type of the target message in order to generate an extra structure in the payload. Use constants in message mapping to generate the header column names, e.g.
<Header>
<H1>CommunityTag:Header</H1>
<H2>empNo,EmpName,Age</H2>
<H3>CommunityTag</H3>
</Header>
In content conversion you have to convert the Header row with
Header.endSeparator='nl'
You won't need parameter addHeaderLine anymore then.
Regards, Martin -
PI 7.1 Receiver file adapter - Spaces are truncated at end of each line
In Receiver file adapter, I specified file content conversion parameters. My file structure is as below:
Header
Field1 10
Field2 20
Field3 8
Filler 20
Detail
Field1 10
Field2 8
Filler 8
In both Header and Details structures I have to fill 20 and 8 spaces at end of each line. In XML (Payload) I can view the spaces. But when the text file is created all the spaces are truncated.
Could you please solve this issue.
RegardsRecordset Structure: ns1:MT_SAP,REC,Header,Detail
ns1:MT_SAP.fieldSeparator '0'
ns1:MT_SAP_PNC_PPAY.fieldContentFormatting nothing
REC.fieldContentFormatting nothing
REC.fieldSeparator '0'
REC.processConfiguration FromConfiguration
Header.fieldFixedLengths 10,20,8,20
Header.endSeparator 'nl'
Header.fixedLengthTooShortHandling Ignore
Header.fieldNames Field1,Field2,Field3,Filler
Header.fieldContentFormatting nothing
Detail.fieldFixedLengths 10,8,8
Detail.endSeparator 'nl'
Detail.fieldNames Field1,Field2,Filler
Detail.fieldContentFormatting nothing
Detail.fixedLengthTooShortHandling Ignore -
How to create an Excel file from XML in the Receiver File Adapter Comm Ch
How do I create an Excel file from XML in the Receiver File Adapter Communication Channel? I have my mapping done and I am outputting the file as a comma delimited csv file. However, the target can only process an Excel file (.xls). How can I generate an Excel in XI?
I saw this blog, but I don't know how to create a XSLT transformation.
/people/michal.krawczyk2/blog/2005/12/10/xi-generating-excel-files-without-the-java-nor-the-conversion-agent-not-possible
Any help would be appreciated. Thanks.Here are the steps I took to create an XSLT transformation in XI 3.0:
1. I created my source and target XSDs using XMLSpy.
2. I created the XSLT mapping from source to target in XMLSpy (referencing the souce XSD schema).
3. I created another XSLT mapping to format the target into Excel XML.
4. Import the source and target XSDs in the IR's External Definitions
5. Zip each XSLT mapping (.xls) and import it into the IR's Imported Archives
6. Reference the XSL mappings in the Interface Mapping -
Receiver file adapter command line
hi,
i am just wondering how to use command line on receiver file adapter.
i am not clear how to use this.
please modify on the following command!
anyway, i have to call java application after put some files by receiver file adapter.
cmd.exe %Fjava ./javacalltest
it did not work..
please guide me.
Command Line
An operating system command specified here is executed before or after a file has been successfully processed. The default value is an empty character string (no command).
When the operating system command is called, the file name currently being processed can be specified with the following placeholders:
%f (file name)
%F (absolute file name including path)Hi Ogawa and Laurence,
Have look at :: /people/michal.krawczyk2/blog/2007/02/08/xipi-command-line-sample-functions
1)Windows batch Commands::
http://labmice.techtarget.com/articles/batchcmds.htm
2)Linux:
/people/michal.krawczyk2/blog/2005/08/17/xi-operation-system-command--error-catching
Note:: First try using the comands on O.S if they work then only use them in Adapters.
Hope it will help.
regards
Piyush
Pl:reward some points if it is usefull. -
How to create multiple files with Receiver File Adapter in SAP PI 7.31 Java Stack
Dear Friends,
I am using Sender JDBC Adapter and Receiver File Adapter in Integration Flow in SAP PI 7.3 EHP 1 SP08 Java Stack environment. The requirement is that we need to create multiple files based on the row count in jdbc resultset. If there are 5 rows in resultset, we need to create 5 XML files with one row elements in one file. Similarly if there are 10 rows, we need to create 10 XML files.
So how can we create multiple files in this scenario. I tried placing a for loop in the Java Mapping as below in the transform method:
DynamicConfiguration conf = arg0.getDynamicConfiguration();
StringBuffer sbFileData = new StringBuffer();
for (int i =0; i < record.size(); i++ {
. // Create XML for each row and Marshal the object into to the String Buffer
String strFileName = "DC_" + new SimpleDateFormat("ddMMyyyyHHmm").format(new java.util.Date())+"_"+i+".xml";
conf.put(KEY_FILENAME, strFileName);
arg1.getOutputPayload().getOutputStream().write(sbFileData.toString().getBytes("UTF-8"));
arg1.getOutputPayload().getOutputStream().flush();
So here I'm flushing the OutputStream for each record. But it's not creating the multiple file, instead it creates only one file will all record XMLs appended to each other.
Please let me know if I missing something or need to do some thing else.
Regards,
Shreyansh ShahHi
You can easily achieve this using graphical mapping. Create your target message type like below
MT_Target
Details 0 to 1
Data 0 to 1
Source sample structure
<resultset>
<row>
<column-name>column-value</ column-name>
</row>
Then do the message mapping like below
map <row> with MT_Target
contant ----> Deatils
column-name ------>Data
In the signature tab of message mapping, choose the occurrence of your target message type as
0 to unbounded.
This will generate multiple files from multiple rows.
Let me know if you have any doubt. -
Creating .RTF output files - PI7.0 Receiver file adapter
Hi Experts,
I am currently facing an issue with the Receiver File adapter where in the output files are required to be of the format of .RTF (Rich Text Format).
The scenarios is an outbound proxy from SAP ABAP - > PI 7.0 -> .RTF File
All the data required to be present in the file will be coming in the source structure
Can the File Receiver Adapter handle this ?
Is there a way to generate Files with extension .rtf ??
It is a requriement since the output files will be used as Reports , and so the desired format.
I am unsure if I will have to use XSLT mapping , in this because i am new to that , Kindly let me know how to go about it ,. any links or pointers on how to achieve the same will be welcome.
thanks
Dev
Edited by: sd on Feb 17, 2010 8:23 AMThanks for your reponse Praveen
Can you please let me know how can i put the extension as .rtf for the output files i am generating ??
as far as the formatting is concerned ... it is like ... the header needs to be of a particular Font , a particular font size , bold etc and so is the case for line items
I am unsure if it is possible using an Adapter module as well
thanks
Dev -
Blank line in receiver file adapter content conversion
Hi,
I am using a receiver file adapter. Everything is working fine. Except that a blank line is put by the file adapter between each records. It is a flat file format.
I have used the stting below. How do we remove the blank line?
Recordset : ACCTHDR,BATCHDR,TRANSREC,BATCHTLR,FILETLR
ACCTHDR.fieldFixedLengths 1,7,4,9,8,665
ACCTHDR.absoluteRowWidth 694
ACCTHDR.addHeaderLine 0
Thanks
Sachin KHi,
.endSeparator
The default value is a line break (no explicit separator after the last column; instead the structures are arranged line-by-line).
If you enter a character string here, the system adds it to the last column as a closing character. You can also make this specification in addition to NameA.fieldFixedLengths. To include a line break following the closing character, you must explicitly define it by attaching ´nl´ (including the quotation marks) to the string.
Regards
Agasthuri Doss -
Problem: The same filename from a sender to a receiver file adapter - SP14
Blog : /people/michal.krawczyk2/blog/2005/11/10/xi-the-same-filename-from-a-sender-to-a-receiver-file-adapter--sp14
My Problem:
The thing works for me and i am able to get my input files name as my output file name. But one thing i noticed is that in my target message, the field where i have mapped the code it always returns the value "null" but finally when the file is created i get the required result.
My input file name is input.txt and i get the same name in my output file too.
In sxmb_moni if i check DynamicConfiguration link i see the following
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
- <!-- Response
-->
- <sap:DynamicConfiguration xmlns:sap="http://sap.com/xi/XI/Message/30">
<sap:Record namespace="http://sap.com/xi/XI/System/File" name="SourceFTPHost">10.25.116.98:21</sap:Record>
<sap:Record namespace="http://sap.com/xi/XI/System/File" name="Directory">/input/test</sap:Record>
<sap:Record namespace="http://sap.com/xi/XI/System/File" name="SourceFileTimestamp">20060228T112200Z</sap:Record>
<sap:Record namespace="http://sap.com/xi/XI/System/File" name="FileType">bin</sap:Record>
<b><sap:Record namespace="http://sap.com/xi/XI/System/File" name="FileName">input.txt</sap:Record></b>
<sap:Record namespace="http://sap.com/xi/XI/System/File" name="SourceFileSize">770</sap:Record>
</sap:DynamicConfiguration>
But when i check my mapped field i see
<field3>BodyC</field3>
<keyfield>02</keyfield>
<field5>BodyE</field5>
<field6>BodyF</field6>
</Body>
- <Trailer>
<keyfield>03</keyfield>
<b><field2>null</field2> -> Null value instead of input.txt</b>
</Trailer>
</ns0:MT_Putfile>
The code i have used to map the field2 of the trailer is the following ....
<i>DynamicConfiguration conf = (DynamicConfiguration) container.getTransformationParameters().get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
DynamicConfigurationKey key = DynamicConfigurationKey.create("http://sap.com/xi/XI/System/File","FileType");
String valueOld = conf.get(key);
return valueOld; </i>
Any clues ?Gosh this is spooky
Anyway i tried with that line of code but it throws me an error during activation ...
Activation of the change list canceled Check result for Message Mapping mm_IS | http://t-systems.com/Shabarish: Starting compilation Source code has syntax error: /usr/sap/TXT/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Map387c7300a9ac11da9d280011256afae8/source/com/sap/xi/tf/_mm_IS_.java:104: cannot resolve symbol symbol : method getTransformationParameters () location: interface com.sap.aii.mappingtool.tf3.rt.GlobalContainer DynamicConfiguration conf = (DynamicConfiguration) container.getGlobalContainer().getTransformationParameters().get(StreamTransformationConstants.DYNAMIC_CONFIGURATION); ^ 1 error
The code is :
DynamicConfiguration conf = (DynamicConfiguration) container.getGlobalContainer().getTransformationParameters().get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
//DynamicConfigurationKey key = DynamicConfigurationKey.create("http://sap.com/xi/XI/System/File","FileName");
//String valueOld = conf.get(key);
String valueOld = conf.toString();
return valueOld;
Thanx Renjith so far .. but i hope this gets resolved (else i will loose my sleep thinkin abt the situation) -
Repeating structure through the receiver file adapter
I wanted to ask wheter it is possible to create repeating structure through the SAP xi receiver file adapter. What I'm trying to accomplish is this:
Item1
Item2
Item1
Item2
(variable number of times).
I can accomplish the following:
Item1
Item1
Item2
Item2
What I could do is have the Item1 and Item2 fields in the same segment in the design time, but this would mean the file adapter would write all the items on a single line instead of two.
There is no way to define line breaks between the the receiver file adapter field parameters ?
There is no way to support nested structures in the recordset definition ie. Item1.Item2 ?Henri,
What Vishal means is following:
Add sequences of the tag <recordset> between pairs of item1, item2:
<documentName>
<<b>recordset</b>>
<item1>
<field-item1>column-value</field-item1>
<field-item1>column-value</field-item1>
<field-item1>column-value</field-item1>
</item1>
<item2>
<field-item2>column-value</field-item2>
<field-item2>column-value</field-item2>
<field-item2>column-value</field-item2>
</item2>
</<b>recordset</b>>
<<b>recordset</b>>
<item1>
<field-item1>column-value</field-item1>
<field-item1>column-value</field-item1>
<field-item1>column-value</field-item1>
</item1>
<item2>
<field-item2>column-value</field-item2>
<field-item2>column-value</field-item2>
<field-item2>column-value</field-item2>
</item2>
</<b>recordset</b>>
</documentName>
A similar problem with header and items is in this thread:
Repeating structure through the receiver file adapter
Hope that helps,
Stefan
Maybe you are looking for
-
Hi, what's the impact of creating sites through configuration in Sap retail System?
Hi Experts, Business requirement is to have a production plant created through config in retail system and then ship the finished product to DC using STO's and Dc will be created as master data in retail system. please share your experience on busine
-
Screen Resolution doesn't fit?
I'm honestly not sure how it happened! I've been using Photoshop and Illustrator and then I noticed that the writing in the top menu bar was blurred and I couldn't see the dock. I went into preferences and looked at the displays part and the resoluti
-
Hello, I need to open my production environment for changes temporarily. Which trans. code is this? Thanks, Fredrik
-
Image (blob) in infowindow
Hi all, Does anybody know how to embed images into info windows of vector layers in oraclemaps api (version 2)? The source of image is from a database field with BLOB type. Thank in advance.
-
AGS_WORK_INCIDENT_MAN - add field as input field
Hi experts!! I would like to customize a bit the WD AGS_WORK_INCIDENT_MAN, so as to have the "created at" field as an input field on message edit mode. I have never again done this.. Could anyone please guide me a bit???? Thank you all in advance!!!