• SAP Office Excel Intergration


    *&---------------------------------------------------------------------*
    *& 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.
  • 相关阅读:
    vs2010 项目生成成功,发布失败
    net导出到excel数字变为科学技术法
    vba 2-6位随机大小写字母
    vba 延时
    foxmail错误信息:501 请登录exmail.qq.com修改密码
    电脑开机出现C:WindowsSystem32driversfs_rec.sys
    向txt中插入一行数据
    定时关机
    ASCII码
    C# 事件与继承
  • 原文地址:https://www.cnblogs.com/JackeyLove/p/13650565.html
Copyright © 2020-2023  润新知