on 2006 May 31 3:25 AM
Hi we have requirement to store the attachments from BSP application into the external/internal storage space connected to application server.
I search for weblogs and all talking about <a href="http://help.sap.com/saphelp_me21sp2/helpdata/en/eb/8c683c8de8a969e10000000a114084/content.htm">File Upload in BSP Applications and store in MIME Repository</a>.
But our requirement is upload and store(no need to read the file content) attachments from BSP page into file server, and then make a link back in BSP page to open.
I know we can handle documnets in R/3 using DMS, but our system is SRM.
Please give a suggestion and solution.
Thanks,
Giri
Request clarification before answering.
Hi,
I faced a similar problem some time ago (uploading a file via BSP, storing it to the application server and then linking the archived document to a business object.
Here is the coding I used:
when 'SubmitUploadFile'. "OnInputProcessing
DATA: data_fileupload TYPE REF TO CL_HTMLB_FILEUPLOAD,
l_filename type string,
l_archiv_doc_id type SAPB-SAPADOKID,
l_content type string,
l_file_ixos(100) type c value '/transfer/PV2/aus/IXOS/',
l_file(200) type c,
tbl_bin TYPE STANDARD TABLE OF tbl1024,
wa_bin type TBL1024,
l_xstring type xstring,
l_arc_doc_id type SAPB-SAPADOKID,
l_doctype type TOADD-DOC_TYPE,
l_filename_e type DRAW-FILEP.
upload the file from the BSP web interface (e.g. file C:TempSUTestPDF_SU.pdf)
data_fileupload ?= CL_HTMLB_MANAGER=>GET_DATA(
request = runtime->server->request
name = 'fileUpload'
id = InputFieldFileUpload
).
IF NOT data_fileupload IS INITIAL.
l_filename = data_fileupload->file_name.
l_content = data_fileupload->file_content.
l_content_type = data_fileupload->file_content_type.
ENDIF.
The uploaded file is returned as XSTRING, so we have to convert it to BINARY
(or STRING alternatively)!
l_xstring = l_content.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
BUFFER = l_xstring
APPEND_TO_TABLE = 'X'
TABLES
BINARY_TAB = tbl_bin.
split path for storing the file to the application server
l_filename_c = l_filename.
CALL FUNCTION 'CV120_SPLIT_PATH'
EXPORTING
PF_PATH = l_filename_c
IMPORTING
PFX_FILE = l_filename_e.
write the uploaded file to the application server
l_filename = l_filename_e.
concatenate l_file_ixos l_filename into l_file.
open dataset l_file for output IN LEGACY BINARY MODE.
loop at tbl_bin into wa_bin.
transfer wa_bin-line to l_file.
endloop.
close dataset l_file.
store the uploaded file on the IXOS-archive
l_doctype = l_content_type.
CALL FUNCTION 'ARCHIVOBJECT_CREATE_FILE'
EXPORTING
ARCHIV_ID = '2T'
DOCUMENT_TYPE = l_doctype
PATH = l_file_arc
IMPORTING
ARCHIV_DOC_ID = l_arc_doc_id
EXCEPTIONS
ERROR_ARCHIV = 1
ERROR_COMMUNICATIONTABLE = 2
ERROR_UPLOAD = 3
ERROR_KERNEL = 4
OTHERS = 5.
link the archived document to the business object DRAW
CALL FUNCTION 'ARCHIV_CONNECTION_INSERT'
EXPORTING
ARCHIV_ID = '2T'
ARC_DOC_ID = l_arc_doc_id
AR_OBJECT = 'DRW'
OBJECT_ID = g_object_id_arc
SAP_OBJECT = 'DRAW'
DOC_TYPE = l_extend
EXCEPTIONS
ERROR_CONNECTIONTABLE = 1
OTHERS = 2.
Remark: It´s vital to convert the uploaded file from XSTRING to BINARY. Otherwise the file cannot be stored/archived properly.
The archived document can then be displayed by inserting the (IXOS-web client-)link to the BSP page (e.g. http://193.228.208.78:4060/archive.dll/get?arc=2T&doc=44439F1B4F701E65E1000000C1E4D00A).
Hope this helps!
Regards,
Ulli
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Ulli,
Thanks for your reply. I didn't understand some thing here, after you write the file content to application server you are storing the uploaded file to IXOS-archive. I didn't understand this part, please explain what this part do.
What value should I pass to the parameter 'PATH' to FM ARCHIVOBJECT_CREATE_FILE. And please give an example for parameter 'l_extend' & g_object_id_arc in FM ARCHIV_CONNECTION_INSERT.
To display the Archived document, the link you mentioned is not working.
Please clear it.
Thanks,
Giri
Hi Giri,
Storing the uploaded file to any archive system (e.g. IXOS) is just one possibility to make the file available globally.
The parameter "PATH" holds the path, where the uploaded document is stored on the application server. (e.g. '/transfer/PV2/aus/IXOS/testfile.pdf', with "testfile.pdf" being the filename of the uploaded file).
The FM "ARCHIVOBJECT_CREATE_FILE" then creates an "archive doc id" that is used in FM "ARCHIV_CONNECTION_INSERT" to connect the archived document to the relevant object id (e.g. object "document" (=DRAW), see transaction code CV03N, another object could be BUS2012 (=purchase order).
The import parameter "g_object_id_arc" for FM "ARCHIV_CONNECTION_INSERT" could look something like that: "D01RABEST01 00D05". (This object id contains all the key fields of table "DRAW" (DRAW-DOKAR (=D01), DRAW-DOKNR (=RABEST01), DRAW-DOKVR (=00) and DRAW-DOKTL (=D05).
Regards,
Ulli
Hi Ulli,
Could please help the link you provided is not working.
http://193.228.208.78:4060/archive.dll/get?arc=2T&doc=44439F1B4F701E65E1000000C1E4D00A
Plesae help.
Thanks,
Gireesh
Hi Giri,
Look at this sample code, for how to handle file upload in the application server from BSP.
Layout:
<%@page language="abap" %>
<%@extension name="htmlb" prefix="htmlb" %>
<htmlb:content design="design2003" >
<htmlb:page title=" " >
<htmlb:form id = "form1"
encodingType = "multipart/form-data" >
<htmlb:fileUpload id = "myUpload"
onUpload = "HandleUpload"
upload_text = "Display"
size = "30"></htmlb:fileUpload>
<hr>
<%
if file_content is not initial.
%>
<br>Name = <%= file_name%>
<br>MIME-Type = <%= file_mime_type%>
<br>Length = <%= file_length%>
<br>URL = <%= display_url %>
<br>File Content <%= file_content %>
<%
endif.
%>
</htmlb:form>
</htmlb:page>
</htmlb:content>
OnInput Processing:
DATA: fileUpload TYPE REF TO CL_HTMLB_FILEUPLOAD.
fileUpload ?= CL_HTMLB_MANAGER=>GET_DATA(
request = request
id = 'myUpload'
name = 'fileUpload' ).
file_name = fileUpload->file_name.
file_mime_type = fileUpload->file_content_type.
file_length = fileUpload->file_length.
file_content = fileUpload->file_content.
DATA: fname type string.
* Enter the path to be stored in the server here....
Data : filepath type string,
t1 type string.
filepath = file_name .
while filepath CA ''.
split filepath at '' into t1 filepath.
endwhile.
* Enter the path to be stored in the server here....
*This location is not shared,
fname = '<Path in the application server>' .
concatenate fname filepath into fname.
OPEN DATASET fname FOR OUTPUT IN BINARY MODE.
TRANSFER file_content TO FNAME.
CLOSE DATASET FNAME.
* You can generate the URL..display_url shows you URL
REPLACE ALL OCCURRENCES OF '/' IN fname WITH ''.
concatenate '<hostname>' fname into display_url.
* to update the path into a data base table
data: s_no type int3.
data: wa type ZFILE_UPLOAD.
SELECT MAX( S_NO ) FROM ZFILE_UPLOAD INTO s_no.
wa-s_no = s_no + 1.
wa-PATH = fname.
Using this approach we handled file upload, into the application server, and the path of the file is maintained in a DB table, so that we can download the file the application server later.
Hope this helps,
Regards,
Ravikiran.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
73 | |
21 | |
8 | |
7 | |
6 | |
6 | |
5 | |
4 | |
4 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.