*&---------------------------------------------------------------------* *& Report DEMOEXCELINTEGRATION * *&---------------------------------------------------------------------* INCLUDE rdemoexcelintegration2top. DATA: control TYPE REF TO i_oi_container_control. DATA: container TYPE REF TO cl_gui_custom_container. DATA: link_server TYPE REF TO i_oi_link_server. DATA: table_coll TYPE REF TO i_oi_table_collection. DATA: document_type TYPE soi_document_type VALUE soi_doctype_excel_chart, document_format TYPE soi_document_type. DATA: doc_size TYPE i, doc_url TYPE t_url, doc_table TYPE sbdst_content. DATA: usa_sales TYPE i VALUE 1000, europe_sales TYPE i VALUE 2000, japan_sales TYPE i VALUE 1000, asia_sales TYPE i VALUE 100, america_sales TYPE i VALUE 100, africa_sales TYPE i VALUE 100. DATA: total_sales TYPE i VALUE 0. DATA: BEGIN OF test_line, region(50), sales TYPE i, END OF test_line. DATA: test_table LIKE TABLE OF test_line. DATA: wa_test_table LIKE test_line. *---------------------------------------------------------------------* * CLASS c_excel_document DEFINITION *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* CLASS c_excel_document DEFINITION. PUBLIC SECTION. DATA: proxy TYPE REF TO i_oi_document_proxy. DATA: document_type TYPE soi_document_type. DATA: data_table TYPE sbdst_content, data_size TYPE i, doc_url TYPE t_url. METHODS: constructor IMPORTING control TYPE REF TO i_oi_container_control document_type TYPE soi_document_type. METHODS: on_close_document FOR EVENT on_close_document OF i_oi_document_proxy IMPORTING document_proxy has_changed. METHODS: on_custom_event FOR EVENT on_custom_event OF i_oi_document_proxy IMPORTING document_proxy event_name param_count param1 param2 param3. METHODS: create_document IMPORTING open_inplace TYPE c DEFAULT ' ' value(no_flush) TYPE c DEFAULT ' ' EXPORTING error TYPE REF TO i_oi_error. METHODS: open_document IMPORTING open_inplace TYPE c DEFAULT ' ' open_readonly TYPE c DEFAULT ' ' value(no_flush) TYPE c DEFAULT ' ' EXPORTING error TYPE REF TO i_oi_error. METHODS: open_document_url IMPORTING open_inplace TYPE c DEFAULT ' ' open_readonly TYPE c DEFAULT ' ' doc_url TYPE t_url DEFAULT ' ' EXPORTING error TYPE REF TO i_oi_error. METHODS: retrieve_document IMPORTING documents TYPE document_list EXPORTING document_format TYPE soi_document_type doc_url TYPE t_url. METHODS: close_document IMPORTING do_save TYPE c DEFAULT ' ' value(no_flush) TYPE c DEFAULT ' ' EXPORTING error TYPE REF TO i_oi_error. PRIVATE SECTION. DATA: control TYPE REF TO i_oi_container_control. ENDCLASS. DATA: document TYPE REF TO c_excel_document. DATA: error TYPE REF TO i_oi_error. DATA: error_table TYPE TABLE OF REF TO i_oi_error. DATA: bds_instance TYPE REF TO cl_bds_document_set. *&---------------------------------------------------------------------* *& Module STATUS_0100 OUTPUT *&---------------------------------------------------------------------* MODULE status_0100 OUTPUT. SET PF-STATUS 'MAIN0100'. SET TITLEBAR '001'. IF control IS INITIAL. CLEAR error_table. DATA: b_has_activex. CALL FUNCTION 'GUI_HAS_ACTIVEX' IMPORTING return = b_has_activex. IF b_has_activex IS INITIAL. MESSAGE e007. ENDIF. CALL METHOD c_oi_container_control_creator=>get_container_control IMPORTING control = control error = error. APPEND error TO error_table. CREATE OBJECT container EXPORTING container_name = 'CONTAINER'. CALL METHOD control->init_control EXPORTING r3_application_name = 'R/3 Basis' "#EC NOTEXT inplace_enabled = 'X' inplace_scroll_documents = 'X' parent = container register_on_close_event = 'X' register_on_custom_event = 'X' no_flush = 'X' IMPORTING error = error. APPEND error TO error_table. CALL METHOD control->get_link_server EXPORTING no_flush = 'X' IMPORTING link_server = link_server error = error. APPEND error TO error_table. CALL METHOD link_server->start_link_server EXPORTING no_flush = 'X' IMPORTING error = error. APPEND error TO error_table. CALL METHOD control->get_table_collection EXPORTING no_flush = 'X' IMPORTING table_collection = table_coll error = error. APPEND error TO error_table. CALL METHOD table_coll->add_table EXPORTING table_name = 'SALES_IN' table_type = table_coll->table_type_input no_flush = ' ' IMPORTING error = error CHANGING data_table = test_table. APPEND error TO error_table. LOOP AT error_table INTO error. CALL METHOD error->raise_message EXPORTING type = 'E'. ENDLOOP. CLEAR error_table. PERFORM refresh_sales. CREATE OBJECT document EXPORTING control = control document_type = document_type. ENDIF. IF bds_instance IS INITIAL. CREATE OBJECT bds_instance. ENDIF. ENDMODULE. " STATUS_0100 OUTPUT *&---------------------------------------------------------------------* *& Module USER_COMMAND_0100 INPUT *&---------------------------------------------------------------------* MODULE user_command_0100 INPUT. DATA: l_fcode LIKE fcode. l_fcode = fcode. CLEAR fcode. CALL METHOD cl_gui_cfw=>dispatch. CASE l_fcode. WHEN 'EXIT'. "Zurück IF NOT document IS INITIAL. CALL METHOD document->close_document. FREE document. ENDIF. IF NOT link_server IS INITIAL. CALL METHOD link_server->stop_link_server. FREE link_server. ENDIF. IF NOT table_coll IS INITIAL. FREE table_coll. ENDIF. IF NOT control IS INITIAL. CALL METHOD control->destroy_control. FREE control. ENDIF. IF NOT bds_instance IS INITIAL. FREE bds_instance. ENDIF. LEAVE PROGRAM. WHEN 'CREATE'. IF NOT control IS INITIAL. CALL METHOD document->create_document. CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'. ENDIF. WHEN 'SELECT'. IF NOT control IS INITIAL. DATA: documents TYPE document_list. DATA: descr TYPE document_descr. CLEAR documents. descr-document_name = 'Car Sales Chart'(do1). descr-document_id = 'DEMOEXCELCHART1'. APPEND descr TO documents. descr-document_name = 'Car Sales Chart 2'(do3). descr-document_id = 'DEMOEXCELCHART2'. APPEND descr TO documents. descr-document_name = 'Car Sales Sheet'(do2). descr-document_id = 'DEMOEXCELSHEET1'. APPEND descr TO documents. CLEAR doc_url. CALL METHOD document->retrieve_document EXPORTING documents = documents IMPORTING document_format = document_format doc_url = doc_url. IF NOT doc_url IS INITIAL. CALL METHOD document->close_document. CALL METHOD document->open_document_url EXPORTING open_inplace = 'X' doc_url = doc_url IMPORTING error = error. CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'. ELSE. MESSAGE e010. ENDIF. ENDIF. WHEN 'OPEN'. IF document->data_size NE 0. IF NOT control IS INITIAL. CALL METHOD document->open_document IMPORTING error = error. CALL METHOD error->raise_message EXPORTING type = 'E'. ENDIF. ELSE. MESSAGE e005. ENDIF. WHEN 'INPLACE'. IF document->data_size NE 0. IF NOT control IS INITIAL. CALL METHOD document->open_document EXPORTING open_inplace = 'X' open_readonly = 'X' IMPORTING error = error. CALL METHOD error->raise_message EXPORTING type = 'E'. ENDIF. ELSE. MESSAGE e005. ENDIF. WHEN 'SAVEAS'. IF NOT document IS INITIAL AND NOT document->proxy IS INITIAL. CALL METHOD document->proxy->save_as EXPORTING prompt_user = 'X' IMPORTING error = error. CALL METHOD error->raise_message EXPORTING type = 'E'. ELSE. MESSAGE e000. ENDIF. WHEN 'CLOSE'. IF NOT document IS INITIAL. CALL METHOD document->close_document EXPORTING do_save = 'X' IMPORTING error = error. CALL METHOD error->raise_message EXPORTING type = 'E'. ELSE. MESSAGE e000. ENDIF. WHEN 'COPYLINK'. IF NOT link_server IS INITIAL. PERFORM refresh_sales. CALL METHOD link_server->execute_copy_link_dialog IMPORTING error = error. CALL METHOD error->raise_message EXPORTING type = 'E'. ELSE. MESSAGE e004. ENDIF. WHEN 'REFRESH'. IF NOT link_server IS INITIAL. PERFORM refresh_sales. ELSE. MESSAGE e004. ENDIF. IF NOT document IS INITIAL AND NOT document->proxy IS INITIAL. CALL METHOD document->proxy->execute_macro EXPORTING macro_string = 'module1.R3StartupMacro' param_count = 1 param1 = 10 IMPORTING error = error. * CHANGING retvalue = usa_sales. * CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'. ELSE. MESSAGE e000. ENDIF. WHEN 'PRINT'. IF NOT document IS INITIAL AND NOT document->proxy IS INITIAL. CALL METHOD document->proxy->print_document EXPORTING prompt_user = 'X' IMPORTING error = error. CALL METHOD error->raise_message EXPORTING type = 'E'. ELSE. MESSAGE e000. ENDIF. ENDCASE. ENDMODULE. " USER_COMMAND_0100 INPUT ************************************************************************ * CLASS c_excel_document IMPLEMENTATION. ************************************************************************ CLASS c_excel_document IMPLEMENTATION. METHOD: constructor. * IMPORTING control TYPE REF TO i_oi_container_control * document_type TYPE soi_document_type me->control = control. me->document_type = document_type. ENDMETHOD. METHOD create_document. * IMPORTING open_inplace TYPE c DEFAULT ' ' * EXPORTING error TYPE REF TO i_oi_error. IF NOT proxy IS INITIAL. CALL METHOD me->close_document. ENDIF. CALL METHOD control->get_document_proxy EXPORTING document_type = document_type register_container = 'X' IMPORTING document_proxy = proxy error = error. IF error->error_code NE c_oi_errors=>ret_ok. EXIT. ENDIF. CALL METHOD proxy->create_document EXPORTING create_view_data = 'X' open_inplace = open_inplace document_title = 'R/3 Demo' "#EC NOTEXT IMPORTING error = error. IF error->error_code NE c_oi_errors=>ret_ok. EXIT. ENDIF. SET HANDLER me->on_close_document FOR proxy. SET HANDLER me->on_custom_event FOR proxy. ENDMETHOD. METHOD open_document. * IMPORTING open_inplace TYPE c DEFAULT ' ' * open_readonly TYPE c DEFAULT ' ' * EXPORTING error TYPE REF TO i_oi_error. IF NOT proxy IS INITIAL. CALL METHOD me->close_document. ENDIF. CALL METHOD control->get_document_proxy EXPORTING document_type = document_type register_container = 'X' IMPORTING document_proxy = proxy error = error. IF error->error_code NE c_oi_errors=>ret_ok. EXIT. ENDIF. CALL METHOD proxy->open_document_from_table EXPORTING document_table = data_table document_size = data_size open_inplace = open_inplace open_readonly = open_readonly document_title = 'R/3 Demo' IMPORTING error = error. IF error->error_code NE c_oi_errors=>ret_ok. EXIT. ENDIF. SET HANDLER me->on_close_document FOR proxy. SET HANDLER me->on_custom_event FOR proxy. CALL METHOD proxy->update_document_links IMPORTING error = error. ENDMETHOD. METHOD open_document_url. * IMPORTING open_inplace TYPE c DEFAULT ' ' * open_readonly TYPE c DEFAULT ' ' * doc_url TYPE t_url DEFAULT ' ' * EXPORTING error TYPE REF TO i_oi_error. DATA: save_error TYPE REF TO i_oi_error. IF NOT proxy IS INITIAL. CALL METHOD me->close_document. ENDIF. CALL METHOD control->get_document_proxy EXPORTING document_type = document_type register_container = 'X' IMPORTING document_proxy = proxy error = error. IF error->error_code NE c_oi_errors=>ret_ok. EXIT. ENDIF. me->doc_url = doc_url. CALL METHOD proxy->open_document EXPORTING document_url = doc_url open_inplace = open_inplace open_readonly = open_readonly IMPORTING error = error. IF error->error_code NE c_oi_errors=>ret_ok. EXIT. ENDIF. data: is_available TYPE I. data: sheet_interface TYPE REF TO i_oi_spreadsheet. CALL METHOD proxy->has_spreadsheet_interface IMPORTING is_available = is_available error = error. if is_available EQ 1. CALL METHOD proxy->get_spreadsheet_interface IMPORTING sheet_interface = sheet_interface error = error. CALL METHOD sheet_interface->select_sheet EXPORTING name = 'Sheet1' IMPORTING error = error. CALL METHOD proxy->update_document_links IMPORTING error = error. CALL METHOD sheet_interface->select_sheet EXPORTING name = 'Chart1' IMPORTING error = error. endif. * Document shall also be available in ITAB for respective operations: CALL METHOD proxy->save_document_to_table IMPORTING error = save_error CHANGING document_table = data_table document_size = data_size. IF NOT save_error IS INITIAL. IF save_error->error_code NE c_oi_errors=>ret_ok. error = save_error. EXIT. ENDIF. ENDIF. SET HANDLER me->on_close_document FOR proxy. SET HANDLER me->on_custom_event FOR proxy. CALL METHOD proxy->update_document_links IMPORTING error = error. ENDMETHOD. METHOD retrieve_document. * importing documents type document_list * exporting document_format type soi_document_format * doc_url type t_url. *------BDS-Data-Structures:--------------------------------------------- * Tables and WAs: DATA: doc_signature TYPE sbdst_signature, wa_doc_signature LIKE LINE OF doc_signature, doc_components TYPE sbdst_components, wa_doc_components LIKE LINE OF doc_components, doc_properties TYPE sbdst_properties, wa_doc_properties LIKE LINE OF doc_properties, doc_uris TYPE sbdst_uri, wa_doc_uris LIKE LINE OF doc_uris. * ID's: DATA: doc_classname TYPE sbdst_classname VALUE 'SOFFICEINTEGRATION', doc_classtype TYPE sbdst_classtype VALUE 'OT', doc_object_key TYPE sbdst_object_key VALUE 'SOFFICEINTEGRATION', doc_mimetype TYPE bapicompon-mimetype. *----------------------------------------------------------------------- DATA: field_desc TYPE TABLE OF rsvbfidesc. DATA: wa_field_desc TYPE rsvbfidesc. DATA: l_nr LIKE sy-tabix. CLEAR: field_desc, wa_field_desc. wa_field_desc-fieldnum = 1. wa_field_desc-display = 'X'. APPEND wa_field_desc TO field_desc. l_nr = 0. CALL FUNCTION 'RS_VALUES_BOX' EXPORTING left_upper_col = 5 left_upper_row = 5 pagesize = 10 title = 'Select document'(sdc) IMPORTING linenumber = l_nr TABLES field_desc = field_desc value_tab = documents EXCEPTIONS OTHERS = 1. IF sy-subrc EQ 0 AND l_nr NE 0. READ TABLE documents INDEX l_nr INTO descr. IF sy-subrc EQ 0. CLEAR: wa_doc_signature, wa_doc_components, wa_doc_uris. CLEAR: doc_signature, doc_components, doc_uris. wa_doc_signature-prop_name = 'DESCRIPTION'. wa_doc_signature-prop_value = descr-document_id. APPEND wa_doc_signature TO doc_signature. CALL METHOD bds_instance->get_info EXPORTING classname = doc_classname classtype = doc_classtype object_key = doc_object_key CHANGING components = doc_components signature = doc_signature EXCEPTIONS nothing_found = 1 error_kpro = 2 internal_error = 3 parameter_error = 4 not_authorized = 5 not_allowed = 6. IF sy-subrc NE 0 AND sy-subrc NE 1. MESSAGE e016. ENDIF. IF sy-subrc = 1. MESSAGE e017. ENDIF. CALL METHOD bds_instance->get_with_url EXPORTING classname = doc_classname classtype = doc_classtype object_key = doc_object_key CHANGING uris = doc_uris signature = doc_signature EXCEPTIONS nothing_found = 1 error_kpro = 2 internal_error = 3 parameter_error = 4 not_authorized = 5 not_allowed = 6. IF sy-subrc NE 0 AND sy-subrc NE 1. MESSAGE e016. ENDIF. IF sy-subrc = 1. MESSAGE e017. ENDIF. READ TABLE doc_components INTO wa_doc_components INDEX 1. READ TABLE doc_uris INTO wa_doc_uris INDEX 1. doc_mimetype = wa_doc_components-mimetype. doc_url = wa_doc_uris-uri. CASE doc_mimetype. WHEN 'application/x-rtf' OR 'text/rtf'. document_format = soi_docformat_rtf. WHEN 'application/x-oleobject'. document_format = soi_docformat_compound. WHEN 'text/plain'. document_format = soi_docformat_text. WHEN OTHERS. document_format = soi_docformat_native. ENDCASE. ENDIF. ENDIF. ENDMETHOD. METHOD close_document. * IMPORTING do_save TYPE c DEFAULT ' ' * EXPORTING error TYPE REF TO i_oi_error. DATA: is_closed TYPE i, has_changed TYPE i. DATA: save_error TYPE REF TO i_oi_error. IF NOT proxy IS INITIAL. CALL METHOD proxy->is_destroyed IMPORTING ret_value = is_closed. IF is_closed IS INITIAL. CALL METHOD proxy->close_document EXPORTING do_save = do_save IMPORTING has_changed = has_changed error = error. IF error->error_code NE c_oi_errors=>ret_ok. EXIT. ENDIF. ENDIF. IF NOT has_changed IS INITIAL. CALL METHOD proxy->save_document_to_table EXPORTING no_flush = 'X' IMPORTING error = save_error CHANGING document_table = data_table document_size = data_size. ENDIF. CALL METHOD proxy->release_document IMPORTING error = error. IF NOT save_error IS INITIAL. IF save_error->error_code NE c_oi_errors=>ret_ok. error = save_error. ENDIF. ENDIF. SET HANDLER me->on_close_document FOR proxy ACTIVATION ' '. SET HANDLER me->on_custom_event FOR proxy ACTIVATION ' '. ELSE. CALL METHOD c_oi_errors=>create_error_for_retcode EXPORTING retcode = c_oi_errors=>ret_document_not_open no_flush = ' ' IMPORTING error = error. ENDIF. ENDMETHOD. METHOD on_close_document. * FOR EVENT on_close_document OF c_oi_container_control * IMPORTING document_proxy has_changed. DATA: answer, do_save. IF has_changed EQ 1. CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING titlebar = 'Office Integration Demo'(oid) text_question = 'Save Document?'(sav) display_cancel_button = ' ' IMPORTING answer = answer. IF answer EQ '1'. do_save = 'X'. ELSE. do_save = ' '. ENDIF. CALL METHOD me->close_document EXPORTING do_save = do_save IMPORTING error = error. CALL METHOD error->raise_message EXPORTING type = 'E'. ENDIF. ENDMETHOD. METHOD on_custom_event. * FOR EVENT on_custom_event OF i_oi_document_proxy * IMPORTING document_proxy event_name param_count * param1 param2 param3. IF event_name EQ 'ON_SERIES_CHANGE'. CALL METHOD table_coll->get_table EXPORTING table_name = 'SALES_IN' IMPORTING error = error CHANGING data_table = test_table. CALL METHOD error->raise_message EXPORTING type = 'E'. CLEAR wa_test_table. READ TABLE test_table INTO wa_test_table INDEX 1. usa_sales = wa_test_table-sales. CLEAR wa_test_table. READ TABLE test_table INTO wa_test_table INDEX 2. europe_sales = wa_test_table-sales. CLEAR wa_test_table. READ TABLE test_table INTO wa_test_table INDEX 3. japan_sales = wa_test_table-sales. CLEAR wa_test_table. READ TABLE test_table INTO wa_test_table INDEX 4. asia_sales = wa_test_table-sales. CLEAR wa_test_table. READ TABLE test_table INTO wa_test_table INDEX 5. america_sales = wa_test_table-sales. CLEAR wa_test_table. READ TABLE test_table INTO wa_test_table INDEX 6. africa_sales = wa_test_table-sales. CLEAR wa_test_table. ENDIF. ENDMETHOD. ENDCLASS. ************************************************************************ * FORM refresh_sales. ************************************************************************ FORM refresh_sales. DATA: BEGIN OF item_line, region(60), sales TYPE i, date TYPE d, time TYPE t, weight TYPE f, amount TYPE p DECIMALS 3, id(10) TYPE n, END OF item_line. DATA: sales_table LIKE TABLE OF item_line. DATA: wa_sales_table LIKE item_line. DATA: fields_table TYPE TABLE OF rfc_fields. DATA: wa_fields_table TYPE rfc_fields. DATA: ind TYPE i. CALL FUNCTION 'DP_GET_FIELDS_FROM_TABLE' TABLES data = sales_table fields = fields_table. READ TABLE fields_table INDEX 1 INTO wa_fields_table. wa_fields_table-fieldname = 'Region'."#EC NOTEXT MODIFY fields_table FROM wa_fields_table INDEX 1. CLEAR wa_fields_table. READ TABLE fields_table INDEX 2 INTO wa_fields_table. wa_fields_table-fieldname = 'Sales'. "#EC NOTEXT MODIFY fields_table FROM wa_fields_table INDEX 2. CLEAR: sales_table, wa_sales_table. wa_sales_table-region = 'USA'(usa). wa_sales_table-sales = usa_sales. APPEND wa_sales_table TO sales_table. CLEAR wa_sales_table. wa_sales_table-region = 'Europe'(eur). wa_sales_table-sales = europe_sales. APPEND wa_sales_table TO sales_table. CLEAR wa_sales_table. wa_sales_table-region = 'Japan'(jap). wa_sales_table-sales = japan_sales. APPEND wa_sales_table TO sales_table. CLEAR wa_sales_table. wa_sales_table-region = 'Asia'(asi). wa_sales_table-sales = asia_sales. APPEND wa_sales_table TO sales_table. CLEAR wa_sales_table. wa_sales_table-region = 'America'(ame). wa_sales_table-sales = america_sales. APPEND wa_sales_table TO sales_table. CLEAR wa_sales_table. wa_sales_table-region = 'Africa'(afr). wa_sales_table-sales = africa_sales. APPEND wa_sales_table TO sales_table. CLEAR wa_sales_table. LOOP AT sales_table INTO wa_sales_table. ind = sy-tabix. wa_sales_table-date = sy-datum + ind. wa_sales_table-time = sy-uzeit + ind. wa_sales_table-weight = 100000 * ind. wa_sales_table-amount = 11111 * ind. wa_sales_table-id = ind. MODIFY sales_table FROM wa_sales_table INDEX ind. ENDLOOP. CALL METHOD table_coll->add_table EXPORTING table_name = 'SALES_OUT' table_type = table_coll->table_type_output no_flush = 'X' IMPORTING error = error CHANGING data_table = sales_table fields_table = fields_table. CALL METHOD link_server->add_table_item2 EXPORTING item_name = 'Sales' "#EC NOTEXT item_title = 'Car Sales Figures'(sal) no_flush = 'X' IMPORTING error = error CHANGING data_table = sales_table fields_table = fields_table. CALL METHOD link_server->add_string_item EXPORTING item_name = 'ChartTitle' item_title = 'Chart Title'(ti0) item_value = 'Car Sales by Region'(ti1) no_flush = 'X' IMPORTING error = error. CALL METHOD link_server->add_string_item EXPORTING item_name = 'ColumnTitle1' item_title = 'Column Title 1'(ti2) item_value = 'Region'(ti3) no_flush = 'X' IMPORTING error = error. CALL METHOD link_server->add_string_item EXPORTING item_name = 'ColumnTitle2' item_title = 'Column Title 2'(ti4) item_value = 'Sold Cars'(ti5) no_flush = ' ' IMPORTING error = error. ENDFORM.
*----------------------------------------------------------------------* * INCLUDE RDEMOEXCELINTEGRATIONTOP2 * *----------------------------------------------------------------------* REPORT saprdemoexcelintegration2 MESSAGE-ID demoofficeintegratio. SET SCREEN 100. TYPE-POOLS: sbdst, soi. CLASS c_oi_errors DEFINITION LOAD. TYPES: BEGIN OF document_descr, document_name(40), document_id(64), END OF document_descr. TYPES: document_list TYPE TABLE OF document_descr. TYPES: t_url LIKE bapiuri-uri. DATA: fcode LIKE sy-ucomm.