Original of this article is published on my personal site at oprsteny.com
In this article I'll show you how to retrieve an Excel sheet from SAP DMS (Document management System) where it is stored as "original" in a Document container.
Let's presume that:
DATA:
ls_document_data TYPE bapi_doc_draw2,
ls_return TYPE bapiret2,
lt_document_files TYPE TABLE OF bapi_doc_files2_keys.
FIELD-SYMBOLS:
<ls_document_file> LIKE LINE OF lt_document_files.
* Specify our document key
ls_document_data-documenttype = 'ZTP'.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = '3000000000003'
IMPORTING
OUTPUT = ls_document_data-documentnumber.
ls_document_data-documentversion = '00'.
ls_document_data-documentpart = '000'.
* Read document info
CALL FUNCTION 'BAPI_DOCUMENT_GETLIST2'
EXPORTING
select_documentdata = ls_document_data
getdocfiles = 'X'
IMPORTING
return = ls_return
TABLES
documentfiles = lt_document_files.
IF ls_return-type CA 'EA'
OR lines( lt_document_files ) = 0.
* RAISE EXCEPTION document_does_not_exist.
ENDIF.
* To simplify our example we read just the first file from
* the document container
READ TABLE lt_document_files ASSIGNING <ls_document_file> INDEX 1.
DATA:
lt_cvapi_files TYPE TABLE OF cvapi_doc_file,
lt_bapi_files TYPE t_bapi_doc_files2,
lt_drao TYPE dms_tbl_drao,
ls_message TYPE messages,
lt_orblk TYPE TABLE OF orblk,
lv_excel_xstring TYPE xstring
lv_data_size TYPE i.
FIELD-SYMBOLS:
TYPE drao,
TYPE orblk.
* Convert BAPI file structure to CVAPI file structure
APPEND <ls_document_file> TO lt_bapi_files.
CALL FUNCTION 'MAP2I_BAPI_FILE2_TO_API_FILE'
TABLES
bapi_doc_file = lt_bapi_files
api_doc_file = lt_cvapi_files.
* Get binary data from system
* Content provider is set to 'TBL'
* -> tabular data filled in lt_drao
CALL FUNCTION 'CVAPI_DOC_CHECKOUTVIEW'
EXPORTING
pf_dokar = <ls_document_file>-documenttype
pf_doknr = <ls_document_file>-documentnumber
pf_dokvr = <ls_document_file>-documentversion
pf_doktl = <ls_document_file>-documentpart
pf_content_provide = 'TBL'
IMPORTING
psx_message = ls_message
TABLES
pt_files = lt_cvapi_files
ptx_content = lt_drao
EXCEPTIONS
error_message = 1
OTHERS = 2.
* Get the binary data and its length
LOOP AT lt_drao ASSIGNING <ls_drao>.
APPEND INITIAL LINE TO lt_orblk ASSIGNING <ls_orblk>.
<ls_orblk> = <ls_drao>-orblk.
IF lv_data_size IS INITIAL.
lv_data_size = <ls_drao>-orln.
ENDIF.
ENDLOOP.
* Convert binary data from itab to xstring
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
EXPORTING
input_length = lv_data_size
IMPORTING
BUFFER = lv_excel_xstring
tables
binary_tab = lt_orblk.
As we initially presumed - we have a WDY component with one View which contains the OfficeControlof type MS_EXCEL element in the Layout. Now we have to create a context Attribute where we will store the Excel binary data.
If you reached this point, you already know how to read the Excel data, you know how to integrate OfficeControl to the WDY view and bind it to the view's Context attribute. Now we just have to fill the Context attribute with data we've already prepared before - you can put the following piece of code e.g. in the View's WDDOMODIFYVIEW method in case you want to initialize the Excel control in the WDY right from the start
wd_context->set_attribute(
EXPORTING
value = lv_excel_xstring
name = 'XLS_DATA'
).
Now if you try to run your WDY application in browser, you should see the Excel being displayed within the browser window and loaded with data of the XLS sheet from your DMS document.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
6 | |
6 | |
5 | |
4 | |
3 | |
3 | |
3 | |
3 | |
3 | |
2 |