Posts: 32
Registered: 7/18/05
Forum Points: 6
How to upload a file via ABAP RFC with Webdynpro ?
Posted: Nov 23, 2005 10:45 PM
Hi everyone,
I have the follwing problem.
I`m currently creating a webdynpro DC to upload files to a mySAP CRM system via RFC.
The RF-module is already available at the backend side and I have imported it as a model. The ABAP module interface looks like this:
*" IMPORTING *" VALUE(IV_CASE_GUID) TYPE SCMG_CASE_GUID *" VALUE(IV_FILENAME) TYPE SDOK_PROPV DEFAULT 'Case Document' *" VALUE(IV_MODELNODE) TYPE STRINGVAL DEFAULT '19' *" VALUE(IV_FILE_CONTENT_BINARY) TYPE SDOKCNTBINS OPTIONAL *" EXPORTING *" VALUE(EV_MESSAGE) TYPE BAPI_MSG *" EXCEPTIONS *" UPLOAD_FAILED
The parameter IV_FILE_CONTENT_BINARY of TYPE SDOKCNTBINS is imported into the webdynpro model as input structure ( 0..n cardinality and of collectiontype list) with one child attribute (line) which can be fed with a byte array (data type RAW with length 1022 on ABAP side).
I`m not really familiar with ABAP. To my understanding the structure IV_FILE_CONTENT_BINARY takes lines of byte arrays and that list of arrays will be uploaded with the RFC, right?
Now in my Webdynpro view I implemented the standard FileUpload UI element from which I got a IWDResource object.
Reading the IWD Resource object I got a inputStream from the file I`d like to upload.
Now my question is: how to get the IV_FILE_CONTENT_BINARY list filled with the inputStream?
I at least figured out that reading a byte array and put it into the structure would pretty much look like the follwing:
//create new list object Sdokcntbin bin = new Sdokcntbin(); //create a temporary byte array with length of the line to be inserted into the list. byte[] b = new byte[bin.getLine().length]; **read the inputStream into the byte array** inputStream.read(b); ??? //write the byte array into the list bin.setLine(b); //add list to input node for RFC ModelNode.addIv_File_Content_Binary(bin);
Do I need to create a loop to read the file binary as byte array segments of length 1022 each or am I wrong here totally?
Posts: 2,972
Registered: 3/3/04
Forum Points: 7,127
Re: How to upload a file via ABAP RFC with Webdynpro ?
Posted: Nov 24, 2005 10:15 AM in response to: Xiaopeng Tan
Xiaopeng,
Yes, you have to read input stream by 1022 bytes chunk, and create Sdokcntbin per chunk.
Something like this:
final int chunkSize = 1022; final byte[] chunk = new byte[chunkSize]; final BufferedInputStream in = new BufferedInputStream(resource.getInputStream()); try { int size = -1; while ( (size = in.read(chunk, 0, chunkSize)) > 0 ) { // If last chunk is partial, pad rest with zeros if ( size < chunkSize ) Arrays.fill( chunk, size, chunkSize, 0); //create new list object final Sdokcntbin bin = new Sdokcntbin(); //write the byte array into the list bin.setLine(chunk); //add list to input node for RFC <ModelObject>_Input.addIv_File_Content_Binary(bin); } } finally { in.close(); }
Valery Silaev
EPAM Systems
http://www.NetWeaverTeam.com
Message was edited by: Valery Silaev
Posts: 32
Registered: 7/18/05
Forum Points: 6
Re: How to upload a file via ABAP RFC with Webdynpro ?
Posted: Nov 24, 2005 11:51 AM in response to: Valery Silaev
Hi Valery,
That's exactly what I was looking for. It's working now. Perfect!
Thank you very much!
Best regards,
Xiaopeng
http://forums.sdn.sap.com/thread.jspa?threadID=84501
来源:https://www.cnblogs.com/mysap/archive/2010/12/16/1908285.html