zoukankan      html  css  js  c++  java
  • SAP Word97 Intergration

    *&---------------------------------------------------------------------*
    *& Report  SAPRDEMOWORD97INTEGRATION                                   *
    *&---------------------------------------------------------------------*
    INCLUDE rdemoword97integrationtop.
    
    DATA: factory TYPE REF TO i_oi_document_factory.
    DATA: document TYPE REF TO i_oi_document_proxy.
    DATA: link_server TYPE REF TO i_oi_link_server.
    DATA: bds_instance TYPE REF TO cl_bds_document_set.
    
    DATA: retcode TYPE t_oi_ret_string,
          document_type(80) VALUE soi_doctype_word97_document,
          document_format(80) TYPE c.
    DATA: documents TYPE document_list.
    DATA: descr TYPE document_descr.
    
    
    DATA: data_table TYPE sbdst_content,
          data_size TYPE i, doc_url TYPE t_url,
          has_changed TYPE i,
          delimiter(1) TYPE c VALUE'/',
          data_type(64) TYPE c,
          data_subtype(64) TYPE c,
          document_mimetype TYPE bapicompon-mimetype.
    
    DATA: first_open VALUE '1'.
    
    DATA: BEGIN OF point_data,
                   proposal(40), lastname(30), comment(128),
          END OF point_data.
    DATA: points LIKE point_data OCCURS 0 WITH HEADER LINE.
    
    CLASS c_event_handler DEFINITION.
    
      PUBLIC SECTION.
        CLASS-METHODS: close_event_handler
                  FOR EVENT on_close_document OF i_oi_document_proxy
                  IMPORTING document_proxy has_changed.
    
        CLASS-METHODS: custom_event_handler
                  FOR EVENT on_custom_event OF i_oi_document_proxy
                  IMPORTING document_proxy event_name param_count
                            param1 param2 param3.
    
    ENDCLASS.
    
    CLASS c_event_handler IMPLEMENTATION.
      METHOD close_event_handler.
    *              FOR EVENT on_close_document OF c_oi_container_control
    *              IMPORTING document_proxy has_changed.
        DATA: answer.
    *   if has_changed eq 1.
        PERFORM save_document TABLES data_table
                    USING 'X' 'X'
                    CHANGING data_size document_proxy retcode.
        open_document = false.
    *   endif.
      ENDMETHOD.
    
      METHOD custom_event_handler.
    *              FOR EVENT on_custom_event OF i_oi_document_proxy
    *              IMPORTING document_proxy event_name param_count
    *                        param1 param2 param3.
        DATA: text(80).
        CONCATENATE 'Word:' event_name 'fired with parameter:' param1
           INTO text SEPARATED BY space.   "#EC NOTEXT
        CALL FUNCTION 'POPUP_TO_INFORM'
             EXPORTING
                  titel = 'Word 97 Integration Demo'(002)
                  txt1  = text
                  txt2  = space.
      ENDMETHOD.
    ENDCLASS.
    
    *&---------------------------------------------------------------------*
    *&      Module  STATUS_0100  OUTPUT
    *&---------------------------------------------------------------------*
    MODULE status_0100 OUTPUT.
      DATA: o1 TYPE REF TO c_event_handler.
      CREATE OBJECT o1.
    
      SET PF-STATUS 'MAIN0100'.
      SET TITLEBAR '001'.
    
      retcode = c_oi_errors=>ret_ok.
    
      IF bds_instance is initial.
        CREATE OBJECT bds_instance.
      ENDIF.
    
      IF factory is initial.
        CALL METHOD c_oi_factory_creator=>get_document_factory
                          IMPORTING factory = factory
                                    retcode = retcode.
        IF retcode ne c_oi_errors=>ret_ok. EXIT. ENDIF.
    
        CALL METHOD factory->start_factory
                            EXPORTING r3_application_name =
                                                'SAP Basis'   "#EC NOTEXT
                                      register_on_close_event = 'X'
                                      register_on_custom_event = 'X'
                            IMPORTING retcode = retcode.
        CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
    
        CALL METHOD factory->get_link_server
                           IMPORTING link_server = link_server
                                     retcode = retcode.
        CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
    
        CALL METHOD link_server->start_link_server
                          IMPORTING retcode = retcode.
        CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
    
        CALL METHOD factory->get_document_proxy
                          EXPORTING document_type = document_type
                          IMPORTING document_proxy = document
                                    retcode = retcode.
        CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
    
        SET HANDLER c_event_handler=>close_event_handler FOR document.
        SET HANDLER c_event_handler=>custom_event_handler FOR document.
    * dynpro fields default
        template = 'DEMOWORD97TEMPLATE'.
        user = 'Ehre'.                     "#EC NOTEXT
        company = 'SAP'.                   "#EC NOTEXT
        macro = 'swap_color'.              "#EC NOTEXT
        event = 'event2'.                  "#EC NOTEXT
        menubar = 'SAP Menu Bar'.          "#EC NOTEXT
        menu = 'SAP Menu'.                 "#EC NOTEXT
        menuitem = 'Fire R/3 event'.       "#EC NOTEXT
        proposal = 'First Proposal'.       "#EC NOTEXT
        author   = 'Ehre'.                 "#EC NOTEXT
        comment = 'This is a comment'.     "#EC NOTEXT
    
        PERFORM refresh_links.
    
      ENDIF.
    
    ENDMODULE.                             " STATUS_0100  OUTPUT
    
    *&---------------------------------------------------------------------*
    *&      Module  USER_COMMAND_0100  INPUT
    *&---------------------------------------------------------------------*
    MODULE user_command_0100 INPUT.
      CALL METHOD cl_gui_cfw=>dispatch.
    
      CASE fcode.
        WHEN 'EXIT'.                       "Zurück
          IF not document is initial.
            PERFORM save_document TABLES data_table
                       USING 'X' 'X'
                       CHANGING data_size document retcode.
            FREE document.
          ENDIF.
          IF not link_server is initial.
            CALL METHOD link_server->stop_link_server
                                           IMPORTING retcode = retcode.
            FREE link_server.
          ENDIF.
          IF not factory is initial.
            CALL METHOD factory->stop_factory IMPORTING retcode = retcode.
            FREE factory.
          ENDIF.
          IF not bds_instance is initial.
            FREE bds_instance.
          ENDIF.
    
          LEAVE TO SCREEN 0.
    
        WHEN 'SELECT'.
          IF not document is initial.
            PERFORM save_document TABLES data_table
                       USING 'X' 'X'
                       CHANGING data_size document retcode.
          ENDIF.
          IF not factory is initial.
            REFRESH documents.
            descr-document_name =
                         'Office Integration Description'(do1).
            descr-document_id = 'DEMOWORD97DOC'.
            APPEND descr TO documents.
            descr-document_name =
                         'Demo Document'(do2).
            descr-document_id = 'DEMOWORD97DOC2'.
            APPEND descr TO documents.
            descr-document_name =
                         'Demo Document XP'(do3).
            descr-document_id = 'DEMOWORDXPDOC2'.
            APPEND descr TO documents.
    
    
            CLEAR doc_url.
            PERFORM select_and_load_document
                        TABLES documents
                        USING  'Select Document'(sdo)
                        CHANGING document_type document_format doc_url.
    
            IF not doc_url is initial.
              CALL METHOD document->open_document
                                     EXPORTING document_url = doc_url
                                     IMPORTING retcode = retcode.
              CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
    * Document shall also be available in ITAB for respective operations:
              CALL METHOD document->save_document_to_table
                                IMPORTING retcode = retcode
                                CHANGING  document_table = data_table
                                          document_size = data_size.
              CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
    
              first_open = false.
              open_document = true.
    
              CALL METHOD document->execute_macro
                      EXPORTING macro_string = 'R3UpdateTables' "#EC NOTEXT
                      IMPORTING retcode = retcode.
            ELSE.
              MESSAGE e010.
            ENDIF.
          ENDIF.
    
        WHEN 'OPEN'.
          IF first_open = true.
            first_open = false.
    
            REFRESH documents.
            descr-document_name =
                         'Office Integration Description'(do1).
            descr-document_id = 'DEMOWORD97DOC'.
            APPEND descr TO documents.
    
            PERFORM select_and_load_document
                        TABLES documents
                        USING  'Select Document'(sdo)
                        CHANGING document_type document_format doc_url.
            CALL METHOD document->open_document
                                   EXPORTING document_url = doc_url
                                   IMPORTING retcode = retcode.
            CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
    * Document shall also be available in ITAB for respective operations:
            CALL METHOD document->save_document_to_table
                              IMPORTING retcode = retcode
                              CHANGING  document_table = data_table
                                        document_size = data_size.
            CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
    
          ELSE.
    * open document stored in internal table data_table
            DATA: is_closed TYPE i.
    
            CALL METHOD document->is_destroyed
                                            IMPORTING ret_value = is_closed.
    
            IF is_closed is initial.
              CALL METHOD document->close_document
                             EXPORTING do_save = 'X'
                             IMPORTING retcode = retcode.
              CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
    
              CALL METHOD document->save_document_to_table
                               IMPORTING retcode = retcode
                               CHANGING  document_table = data_table[]
                                         document_size = data_size.
              CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
            ENDIF.
    
            CALL METHOD document->release_document
                                           IMPORTING retcode = retcode.
    
            CALL METHOD document->open_document_from_table
                                EXPORTING document_table = data_table[]
                                          document_size  = data_size
                                IMPORTING retcode = retcode.
            CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
          ENDIF.
          open_document = true.
          CALL METHOD document->execute_macro
                       EXPORTING macro_string = 'R3UpdateTables' "#EC NOTEXT
                       IMPORTING retcode = retcode.
    
        WHEN 'REFRESH'.
          IF not link_server is initial.
            PERFORM refresh_links.
            CALL METHOD document->execute_macro
                      EXPORTING macro_string = 'R3UpdateTables' "#EC NOTEXT
                      IMPORTING retcode = retcode.
          ELSE.
            MESSAGE e004.
          ENDIF.
    
        WHEN 'SAVEAS'.
          CALL METHOD document->save_as
                               EXPORTING file_name = ''
                                         prompt_user = 'X'
                               IMPORTING retcode = retcode.
          CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
    
        WHEN 'CLOSE'.
          PERFORM save_document TABLES data_table
                     USING ' ' 'X'
                     CHANGING data_size document retcode.
          open_document = false.
    
        WHEN 'COPYLINK'.
          IF not link_server is initial.
            PERFORM refresh_links.
    
            CALL METHOD link_server->execute_copy_link_dialog
                     IMPORTING retcode = retcode.
            CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
          ELSE.
            MESSAGE e004.
          ENDIF.
    
        WHEN 'INSTALL'.
          DATA: wp_ref TYPE REF TO i_oi_word_processor_document.
    
          CHECK not document is initial and open_document = true.
          CALL METHOD document->get_wordprocessor_interface
                           IMPORTING wp_interface = wp_ref
                                     retcode = retcode.
          IF retcode eq c_oi_errors=>ret_ok.
    
            CLEAR item_url.
            CLEAR descr.
            descr-document_id = template.
    
            PERFORM select_document
                               CHANGING descr-document_id
                                        document_format
                                        doc_url
                                        document_mimetype.
            item_url = doc_url.
            CALL METHOD wp_ref->install_template
                           EXPORTING template_name = template
                                     url = item_url
                           IMPORTING retcode = retcode.
            FREE wp_ref.
            CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
          ELSE.
            CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
          ENDIF.
    
        WHEN 'EXECT'.
          CHECK not document is initial and open_document = true.
          CALL METHOD document->get_wordprocessor_interface
                           IMPORTING wp_interface = wp_ref
                                     retcode = retcode.
          IF retcode eq c_oi_errors=>ret_ok.
            CALL METHOD wp_ref->set_template
                           EXPORTING template_name = template
                           IMPORTING retcode = retcode.
            FREE wp_ref.
            CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
          ELSE.
            CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
          ENDIF.
    
        WHEN 'EXECS'.
          CHECK not document is initial and open_document = true.
    *     straight ole automation
          DATA: document_cntl_handle TYPE cntl_handle.
          INCLUDE ole2incl.
          DATA: ocharacters   TYPE ole2_object,
                orange        TYPE ole2_object,
                oreplacement  TYPE ole2_object,
                ofind         TYPE ole2_object,
                ofont         TYPE ole2_object.
    
          DATA: char_count TYPE i,
                char_position TYPE i,
                old_search_string LIKE search,
                string_found TYPE i,
                color_index TYPE i.
    
          CALL METHOD document->get_document_handle
                               IMPORTING handle = document_cntl_handle
                                         retcode = retcode.
          CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
          IF old_search_string ne search.
    *        get number of document characters.
            GET PROPERTY OF document_cntl_handle-obj
                           'characters' = ocharacters.
            GET PROPERTY OF ocharacters 'count' = char_count.
            char_position = 0.
            old_search_string = search.
          ENDIF.
    *     set range now
          IF char_position >= char_count.
            char_position = 0.
          ENDIF.
          CALL METHOD OF document_cntl_handle-obj 'Range' = orange
          EXPORTING #1 = char_position #2 = char_count.
    *     search now
          GET PROPERTY OF orange 'Find' = ofind.
    *      set property of ofind 'Text' = search.
    *      set property of ofind 'Forward' = true.
    *      call method of ofind 'ClearFormatting'.
    *      IF NOT REPLACE IS INITIAL.
    *         GET PROPERTY OF OFIND 'Replacement' = OREPLACEMENT.
    *         SET PROPERTY OF OREPLACEMENT 'Text' = REPLACE.
    *         CALL METHOD OF OREPLACEMENT 'ClearFormatting'.
    *      ENDIF.
          IF not replace is initial.
    * replace
    *        CALL METHOD OF ofind 'Execute'
    *          EXPORTING  #1 = search       "FindText
    *                     #2 = false        "MatchCase
    *                     #3 = false        "MatchWholeWord
    *                     #4 = false        "MatchWildCards
    *                     #5 = false        "MatchSoundsLike
    *                     #6 = true         "MatchAllWordForms
    *                     #7 = true         "Forward
    *                     #8 = '1'          "Wrap
    *                     #9 = true
    *                     #91 = replace
    *                     #92 = '2'.
    *        char_position = 0.
    *BEGIN - Japaneese characters get garbled refer note 878178.
           DATA: is_available type i.
    
           CALL METHOD document->has_wordprocessor_interface
               IMPORTING is_available = is_available
                         retcode      = retcode.
    
           IF is_available = 1 .
    
              CALL METHOD document->get_wordprocessor_interface
                           IMPORTING wp_interface = wp_ref
                                     retcode = retcode.
    
               IF RETCODE EQ C_OI_ERRORS=>RET_OK.
    
                  CALL METHOD wp_ref->replace
                           EXPORTING replace_string = replace
                                     search_string  = search
                                     pos            = 'GLOBAL'
                                     flag           = 'ALL'.
    
                ENDIF.
    
            ENDIF.
    *END - Japaneese characters get garbled refer note 878178.
    
          ELSE.
    *search
            CALL METHOD OF ofind 'Execute'
              EXPORTING  #1 = search       "FindText
                         #2 = false        "MatchCase
                         #3 = false        "MatchWholeWord
                         #4 = false        "MatchWildCards
                         #5 = false        "MatchSoundsLike
                         #6 = true         "MatchAllWordForms
                         #7 = true         "Forward
                         #8 = '1'          "Wrap
                         #9 = true.
            GET PROPERTY OF ofind 'Found' = string_found.
            IF string_found > 0.
              GET PROPERTY OF orange 'Font' = ofont.
              GET PROPERTY OF ofont 'ColorIndex' = color_index.
              IF color_index ne 6.
                color_index = 6.
              ELSE.
                color_index = 11.
              ENDIF.
              SET PROPERTY OF ofont 'ColorIndex' = color_index.
            ENDIF.
            GET PROPERTY OF orange 'End' = char_position.
          ENDIF.
    *      CALL METHOD DOCUMENT->GET_WORDPROCESSOR_INTERFACE
    *                       IMPORTING WP_INTERFACE = WP_REF
    *                                 RETCODE = RETCODE.
    *      IF RETCODE EQ C_OI_ERRORS=>RET_OK.
    *        IF REPLACE IS INITIAL.
    *           CALL METHOD WP_REF->SEARCH
    *                       EXPORTING SEARCH_STRING = SEARCH
    *                                 POS = '1'
    *                                 FLAG = SPACE
    *                       importing RETCODE = RETCODE.
    *        ELSE.
    *           CALL METHOD WP_REF->REPLACE
    *                       EXPORTING SEARCH_STRING = SEARCH
    *                                 POS = '1'
    *                                 FLAG = SPACE
    *                                 REPLACE_STRING = REPLACE
    *                       importing RETCODE = RETCODE.
    *        ENDIF.
    *        CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE EXPORTING TYPE = 'E'.
    *        FREE WP_REF.
    *      ELSE.
    *        CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE EXPORTING TYPE = 'E'.
    *      ENDIF.
    
        WHEN 'EXECM'.
          CHECK not document is initial and open_document = true.
          CALL METHOD document->execute_macro
                           EXPORTING macro_string = macro
                           IMPORTING retcode = retcode.
          CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
    
        WHEN 'CHANGE'.
          CALL METHOD link_server->add_string_item
                      EXPORTING item_name = 'user'
                                item_value  = user
                      IMPORTING retcode = retcode.
    
          CALL METHOD link_server->add_string_item
                      EXPORTING item_name = 'company'
                                item_value  = company
                      IMPORTING retcode = retcode.
    
        WHEN 'ADDMBAR'.
          CHECK not document is initial and open_document = true.
          CALL METHOD document->add_menu_bar EXPORTING name = menubar
                                             IMPORTING retcode = retcode.
          CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
    
        WHEN 'ADDMENU'.
          CHECK not document is initial and open_document = true.
          CALL METHOD document->add_menu_popup
                                  EXPORTING name                = menu
                                            menu_bar_name       = menubar
                                            insert_before_popup = 1
                                  IMPORTING retcode = retcode.
          CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
    
        WHEN 'ADDITEM'.
          DATA: position(256).
          CHECK not document is initial.
          CALL METHOD document->add_menu_item EXPORTING
                                       item_name          = menuitem
                                       menu_bar_name      = menubar
                                       menu_popup_name    = menu
                                       insert_before_item = 0
                                       item_macro         = event
                             IMPORTING retcode = retcode.
          CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
    
    * just for straight ole automation
    *      data: document_cntl_handle type cntl_handle.
    *      include ole2incl.
    *      CALL METHOD DOCUMENT->GET_DOCUMENT_HANDLE
    *                           IMPORTING HANDLE = DOCUMENT_CNTL_HANDLE
    *                                     RETCODE = RETCODE.
    *      CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE EXPORTING TYPE = 'E'.
    *      CALL METHOD OF DOCUMENT_CNTL_HANDLE-OBJ ....
    
      ENDCASE.
    
    ENDMODULE.                             " USER_COMMAND_0100  INPUT
    
    *---------------------------------------------------------------------*
    *       FORM REFRESH_LINKS                                            *
    *---------------------------------------------------------------------*
    *       ........                                                      *
    *---------------------------------------------------------------------*
    FORM refresh_links.
      IF not link_server is initial.
    
        CALL METHOD link_server->add_string_item
                 EXPORTING item_name = 'Project Name' "#EC NOTEXT
                           item_value  = project_name
                           no_flush    = 'X'
                 IMPORTING retcode = retcode.
    
        CALL METHOD link_server->add_string_item
                 EXPORTING item_name = 'Topic'       "#EC NOTEXT
                           item_value  = project_topic
                           no_flush    = 'X'
                 IMPORTING retcode = retcode.
    
        CALL METHOD link_server->add_string_item
                 EXPORTING item_name = 'Department'       "#EC NOTEXT
                           item_value  = department
                           no_flush    = 'X'
                 IMPORTING retcode = retcode.
    
        CALL METHOD link_server->add_string_item
                 EXPORTING item_name = 'Author'       "#EC NOTEXT
                           item_value  = author
                           no_flush    = 'X'
                 IMPORTING retcode = retcode.
    
        CALL METHOD link_server->add_string_item
                 EXPORTING item_name = 'Distribution List' "#EC NOTEXT
                           item_value  = distr_list
                           no_flush    = 'X'
                 IMPORTING retcode = retcode.
    
        CALL METHOD link_server->add_string_item
                 EXPORTING item_name = 'User'        "#EC NOTEXT
                           item_value  = user
                           no_flush    = 'X'
                 IMPORTING retcode = retcode.
    
        CALL METHOD link_server->add_string_item
                 EXPORTING item_name = 'Company'       "#EC NOTEXT
                           item_value  = company
                           no_flush    = 'X'
                 IMPORTING retcode = retcode.
    
        DATA: int TYPE i VALUE 100.
        CALL METHOD link_server->add_string_item
                EXPORTING item_name = 'Number'        "#EC NOTEXT
                          item_value  = int
                           no_flush    = 'X'
                IMPORTING retcode = retcode.
    
        DATA: date TYPE d VALUE '19961231'.
        CALL METHOD link_server->add_string_item
                EXPORTING item_name = 'Date'    "#EC NOTEXT
                          item_value  = date
                           no_flush    = ' '
                IMPORTING retcode = retcode.
    
        REFRESH points.
        points-proposal = proposal.
        points-lastname = author.
        points-comment  = comment.
        APPEND points.
        points-proposal = 'Second Proposal'.
        points-lastname  = 'Neuendorf'.    "#EC NOTEXT
        points-comment    = '017299'.
        APPEND points.
        points-proposal = 'Third Proposal'.
        points-lastname  = 'Kolb'.         "#EC NOTEXT
        points-comment    = '004711'.
        APPEND points.
        points-proposal = 'Conclusion'.
        points-lastname  = 'Kretschmer'.   "#EC NOTEXT
        points-comment    = '000001'.
        APPEND points.
    
        CALL METHOD link_server->add_table_item2
                 EXPORTING item_name = 'Agenda'  "#EC NOTEXT
                 IMPORTING retcode = retcode
                 CHANGING  data_table = points[].
    
    
        CLEAR item_url.
        CLEAR descr.
        descr-document_name = 'RTF Logo'.        "#EC NOTEXT
        descr-document_id = 'DEMOWORD97RTF1'.    "#EC NOTEXT
    
        PERFORM select_document
                           CHANGING descr-document_id
                                    document_format
                                    doc_url
                                    document_mimetype.
        item_url = doc_url.
        SPLIT document_mimetype AT delimiter INTO data_type data_subtype.
        CALL METHOD link_server->add_binary_item
                 EXPORTING item_name = 'RTF Item'      "#EC NOTEXT
                           table_url  = item_url
                           data_type = soi_type_application
                           data_subtype = soi_subtype_rtf
                 IMPORTING retcode = retcode.
    
    
        CLEAR: item_url.
        CLEAR descr.
        descr-document_name = 'SAP LOGO'.
        descr-document_id = 'DEMOWORD97SAPLOGO'.
    
        PERFORM select_document
                           CHANGING descr-document_id
                                    document_format
                                    doc_url
                                    document_mimetype.
        item_url = doc_url.
        SPLIT document_mimetype AT delimiter INTO data_type data_subtype.
        CALL METHOD link_server->add_binary_item
                 EXPORTING item_name = 'SAPLogo'
                           item_title = 'SAP Logo'      "#EC NOTEXT
                           table_url  = item_url
                           data_type = soi_type_image
                           data_subtype = soi_subtype_gif
                 IMPORTING retcode = retcode.
    
      ENDIF.
    ENDFORM.
    
    
    *---------------------------------------------------------------------*
    *       FORM SAVE_DOCUMENT                                            *
    *---------------------------------------------------------------------*
    *       ........                                                      *
    *---------------------------------------------------------------------*
    *  -->  DOC_TABLE                                                     *
    *  -->  DO_ASK                                                        *
    *  -->  DO_RELEASE                                                    *
    *  -->  DOC_SIZE                                                      *
    *  -->  DOCUMENT                                                      *
    *  -->  TO                                                            *
    *  -->  I_OI_DOCUMENT_PROXY                                           *
    *  -->  RETCODE                                                       *
    *---------------------------------------------------------------------*
    FORM save_document TABLES   doc_table TYPE table
                       USING    do_ask TYPE c do_release TYPE c
                       CHANGING doc_size TYPE i
                                document TYPE REF TO i_oi_document_proxy
                                retcode TYPE t_oi_ret_string.
    
      DATA: is_closed TYPE i, answer TYPE c, has_changed TYPE i.
    
      CALL METHOD document->is_destroyed IMPORTING ret_value = is_closed.
    
      IF is_closed is initial.
        CALL METHOD document->close_document
                       EXPORTING do_save = 'X'
                       IMPORTING has_changed = has_changed
                                 retcode = retcode.
        CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
      ENDIF.
    
      IF not has_changed is initial.
        IF not do_ask is initial.
          CALL FUNCTION 'POPUP_TO_CONFIRM'
               EXPORTING
                    titlebar              = 'Office Integration Demo'(oid)
                    text_question         = 'Save Document?'(sav)
                    display_cancel_button = ' '
               IMPORTING
                    answer                = answer.
        ELSE.
          answer = '1'.
        ENDIF.
    
        IF answer eq '1'.
          CALL METHOD document->save_document_to_table
                         IMPORTING retcode = retcode
                         CHANGING  document_table = doc_table[]
                                   document_size = doc_size.
          CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.
        ENDIF.
      ENDIF.
    
      IF not do_release is initial.
        CALL METHOD document->release_document
                                     IMPORTING retcode = retcode.
      ENDIF.
    ENDFORM.
    *=======================================================================
    *=======================================================================
    FORM select_document
                       CHANGING document_id TYPE c
                                document_format TYPE c
                                doc_url TYPE t_url
                                document_mimetype TYPE bapicompon-mimetype.
    
    * 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_uris TYPE sbdst_uri,
            wa_doc_uris LIKE LINE OF doc_uris.
    * IDs:
      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 LIKE bapicompon-mimetype.
    *-----------------------------------------------------------------------
    
      CLEAR: wa_doc_signature, wa_doc_components, wa_doc_uris.
      REFRESH: 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.
    
    ENDFORM.
    *=======================================================================
    *=======================================================================
    FORM select_and_load_document
                       TABLES documents
                       USING dialog_title TYPE c
                       CHANGING document_type TYPE c
                                document_format TYPE c
                                doc_url TYPE t_url.
    * 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.
    * IDs:
      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 LIKE bapicompon-mimetype.
    *-----------------------------------------------------------------------
    
      DATA: field_desc LIKE rsvbfidesc OCCURS 1 WITH HEADER LINE.
      DATA: l_nr LIKE sy-tabix.
    
      REFRESH field_desc.
      field_desc-fieldnum = 1.
      field_desc-display = 'X'.
      APPEND field_desc.
    
      l_nr = 0.
      CALL FUNCTION 'RS_VALUES_BOX'
           EXPORTING
                left_upper_col = 5
                left_upper_row = 5
                pagesize       = 10
                title          = dialog_title
           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.
          REFRESH: 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.
          document_mimetype = doc_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.
    
    ENDFORM.
    *=======================================================================
    *----------------------------------------------------------------------*
    *   INCLUDE RDEMOWORD97INTEGRATIONTOP                                  *
    *----------------------------------------------------------------------*
    REPORT  SAPRDEMOWORD97INTEGRATION MESSAGE-ID DEMOOFFICEINTEGRATIO.
    
    CONSTANTS: TRUE VALUE 1, FALSE VALUE 0.
    
    TYPES: BEGIN OF DOCUMENT_DESCR,
              DOCUMENT_NAME(40), DOCUMENT_ID(64),
           END OF DOCUMENT_DESCR.
    
    TYPES: DOCUMENT_LIST TYPE DOCUMENT_DESCR OCCURS 0.
    
    TYPES: T_URL LIKE BAPIURI-URI.
    
    * dynpro 100 fields:
    DATA:  TEMPLATE(30),SEARCH(19), USER(19), COMPANY(19),
           MACRO(19), MENU(19), MENUITEM(19),MENUBAR(19), EVENT(19).
    DATA:  REPLACE LIKE SEARCH.
    
    
    DATA:  CURRENTMENUBAR LIKE MENUBAR, CURRENTMENU LIKE MENU,
           OPEN_DOCUMENT(1).
    DATA: ITEM_URL TYPE T_URL.
    
    DATA: PROJECT_NAME(80) VALUE 'Office Integration',   "#EC NOTEXT
          PROJECT_TOPIC(80) VALUE 'Word97 Integration',  "#EC NOTEXT
          DEPARTMENT(40) VALUE 'SAP AG',                 "#EC NOTEXT
          AUTHOR(30) VALUE 'Ehre',                       "#EC NOTEXT
          DISTR_LIST(30) VALUE 'SAP01',
          PROPOSAL(40), COMMENT(128).
    
    SET SCREEN 100.
    
    TYPE-POOLS: SBDST.
    
    INCLUDE OFFICEINTEGRATIONINCLUDE.
    
    DATA: FCODE LIKE SY-UCOMM.
    *----------------------------------------------------------------------*
    *   INCLUDE OFFICEINTEGRATIONINCLUDE                                   *
    *----------------------------------------------------------------------*
    
    TYPE-POOLS: SOI.
    TYPE-POOLS: CNDP.
    
    CLASS C_OI_ERRORS DEFINITION LOAD.
    CLASS CL_GUI_CFW DEFINITION LOAD.
    
    INCLUDE OFFICEINTEGRATIONINTERFACES.
    INCLUDE OFFICEINTEGRATIONOLECREATOR.
    INCLUDE OFFICEINTEGRATIONOLECLASSESIMP.
    *----------------------------------------------------------------------*
    *   INCLUDE OFFICEINTEGRATIONINTERFACES                                *
    *----------------------------------------------------------------------*
    
    TYPES: T_OI_RET_STRING TYPE SOI_RET_STRING,
           T_OI_CUSTOM_PARAM TYPE SOI_CUSTOM_PARAM.
    TYPES: T_OI_MESSAGE_PARAM(50) TYPE C.
    TYPES: T_OI_PROXY_ERROR_CODE TYPE I.
    
    TYPES: T_OI_FIELDS_TABLE TYPE STANDARD TABLE OF RFC_FIELDS.
    TYPES: T_OI_PROPERTIES_TABLE TYPE STANDARD TABLE OF DPPROPS.
    
    CLASS CL_GUI_CFW DEFINITION LOAD.
    
    INTERFACE I_OI_DOCUMENT_FACTORY.
        CONSTANTS:
          DOCUMENT_FORMAT_COMPOUND(3) TYPE C VALUE 'OLE',
          DOCUMENT_FORMAT_NATIVE(6)   TYPE C VALUE 'NATIVE',
          DOCUMENT_FORMAT_RTF(3)      TYPE C VALUE 'RTF',
          DOCUMENT_FORMAT_TEXT(4)     TYPE C VALUE 'TEXT'.
    
        METHODS: START_FACTORY
                     IMPORTING R3_APPLICATION_NAME TYPE C
                               VALUE(REP_ID) TYPE SY-REPID DEFAULT SY-REPID
                               VALUE(DYNPRO_NR) TYPE SY-DYNNR
                                                           DEFAULT SY-DYNNR
                               REGISTER_ON_CLOSE_EVENT TYPE C DEFAULT ' '
                               REGISTER_ON_CUSTOM_EVENT TYPE C DEFAULT ' '
                               VALUE(NO_FLUSH)   TYPE C DEFAULT ' '
                     EXPORTING RETCODE           TYPE SOI_RET_STRING
                               ERROR             TYPE REF TO I_OI_ERROR.
    
        METHODS: STOP_FACTORY
                     IMPORTING EXIT_CONTROL_MANAGER TYPE C DEFAULT ' '
                               VALUE(NO_FLUSH)      TYPE C DEFAULT ' '
                     EXPORTING RETCODE              TYPE SOI_RET_STRING
                               ERROR                TYPE REF TO I_OI_ERROR.
    
        METHODS: LINK_FACTORY
                     IMPORTING VALUE(REP_ID)    TYPE SY-REPID
                               VALUE(DYNPRO_NR) TYPE SY-DYNNR
                               VALUE(NO_FLUSH)  TYPE C DEFAULT ' '
                     EXPORTING RETCODE          TYPE SOI_RET_STRING
                               ERROR            TYPE REF TO I_OI_ERROR.
    
        METHODS: GET_DOCUMENT_PROXY
                    IMPORTING DOCUMENT_TYPE   TYPE C
                              DOCUMENT_FORMAT TYPE C DEFAULT 'NATIVE'
                              REGISTER_CONTAINER TYPE C DEFAULT ' '
                              VALUE(NO_FLUSH) TYPE C DEFAULT ' '
                    EXPORTING DOCUMENT_PROXY TYPE REF TO I_OI_DOCUMENT_PROXY
                              RETCODE        TYPE SOI_RET_STRING
                              ERROR          TYPE REF TO I_OI_ERROR.
    
        METHODS: GET_LINK_SERVER
                    IMPORTING SERVER_TYPE TYPE C DEFAULT ' '
                              VALUE(NO_FLUSH) TYPE C DEFAULT ' '
                    EXPORTING LINK_SERVER TYPE REF TO I_OI_LINK_SERVER
                              RETCODE     TYPE SOI_RET_STRING
                              ERROR       TYPE REF TO I_OI_ERROR.
    
        METHODS: GET_TABLE_COLLECTION
                    IMPORTING VALUE(NO_FLUSH)  TYPE C DEFAULT ' '
                    EXPORTING TABLE_COLLECTION TYPE
                                                REF TO I_OI_TABLE_COLLECTION
                              RETCODE          TYPE SOI_RET_STRING
                              ERROR            TYPE REF TO I_OI_ERROR.
    
        METHODS: GET_REGISTERED_DOC_TYPES
                    IMPORTING INTERFACE_TYPE  TYPE C DEFAULT ' '
                              VALUE(NO_FLUSH) TYPE C DEFAULT ' '
                    EXPORTING DESCR_LIST TYPE SOI_DOCUMENT_TYPE_DESCR_LIST
                              RETCODE    TYPE SOI_RET_STRING
                              ERROR      TYPE REF TO I_OI_ERROR.
    
        METHODS: CHECK_REGISTERED_DOC_TYPES
                    IMPORTING VALUE(NO_FLUSH)  TYPE C DEFAULT ' '
                    EXPORTING ERROR      TYPE REF TO I_OI_ERROR
                    CHANGING  DESCR_LIST TYPE SOI_DOCUMENT_TYPE_DESCR_LIST
                              RETCODE    TYPE SOI_RET_STRING.
    ENDINTERFACE.
    *----------------------------------------------------------------------*
    
    CLASS C_OI_OLE_CONTROL_CREATOR DEFINITION.
      PUBLIC SECTION.
        CLASS-METHODS: GET_OLE_CONTAINER_CONTROL
                   EXPORTING CONTROL TYPE REF TO I_OI_OLE_CONTAINER_CONTROL
                             RETCODE TYPE SOI_RET_STRING
                             ERROR   TYPE REF TO I_OI_ERROR.
    ENDCLASS.
    
    CLASS C_OI_FACTORY_CREATOR DEFINITION.
      PUBLIC SECTION.
        CONSTANTS:
          FACTORY_TYPE_OLE(3)      TYPE C VALUE 'OLE',
          FACTORY_TYPE_PORTABLE(8) TYPE C VALUE 'PORTABLE'.
    
        CLASS-METHODS: GET_DOCUMENT_FACTORY
                     IMPORTING FACTORY_TYPE TYPE C DEFAULT 'PORTABLE'
                     EXPORTING FACTORY TYPE REF TO I_OI_DOCUMENT_FACTORY
                               RETCODE TYPE SOI_RET_STRING
                               ERROR   TYPE REF TO I_OI_ERROR.
    ENDCLASS.
    
    CLASS C_OI_OLE_DOCUMENT_FACTORY DEFINITION.
      PUBLIC SECTION.
        INTERFACES: I_OI_DOCUMENT_FACTORY.
    
      PRIVATE SECTION.
        DATA: CONTAINER_CONTROL TYPE REF TO I_OI_OLE_CONTAINER_CONTROL.
    ENDCLASS.
    *----------------------------------------------------------------------*
    *   INCLUDE OFFICEINTEGRATIONIMPL                                      *
    *----------------------------------------------------------------------*
    
    CLASS c_oi_factory_creator IMPLEMENTATION.
       METHOD get_document_factory.
    *                 IMPORTING factory_type TYPE c
    *                 EXPORTING factory TYPE REF TO i_oi_document_factory
    *                           retcode TYPE c.
         DATA: olefactoryobj TYPE REF TO c_oi_ole_document_factory.
         DATA: has_activex,has_javabean.
    
    *     DATA: WINSYS TYPE OLELOAD-WINSYS.
    *  determine  window system
    *     CALL FUNCTION 'WS_QUERY'
    *           EXPORTING QUERY  = 'WS'
    *           IMPORTING RETURN = WINSYS.
    *     CASE WINSYS.
    *      WHEN 'WN32'.
    *       CREATE OBJECT OLEFACTORYOBJ.
    *       FACTORY = OLEFACTORYOBJ.
    *       RETCODE = C_OI_ERRORS=>RET_OK.
    *      WHEN 'JAVA'.
    *       CREATE OBJECT OLEFACTORYOBJ.
    *       FACTORY = OLEFACTORYOBJ.
    *       RETCODE = C_OI_ERRORS=>RET_OK.
    *      WHEN 'PLAT'.
    *       CREATE OBJECT OLEFACTORYOBJ.
    *       FACTORY = OLEFACTORYOBJ.
    *       RETCODE = C_OI_ERRORS=>RET_OK.
    *      WHEN OTHERS.
    *       RETCODE = C_OI_ERRORS=>RET_ERROR.
    *     ENDCASE.
    
          CALL FUNCTION 'GUI_HAS_ACTIVEX'
              IMPORTING
                   return  = has_activex.
    
          CALL FUNCTION 'GUI_HAS_JAVABEANS'
              IMPORTING
                   return  = has_javabean.
    
          IF ( NOT has_activex IS INITIAL ) OR
              ( NOT has_javabean IS INITIAL ).
            CREATE OBJECT olefactoryobj.
            factory = olefactoryobj.
            retcode = c_oi_errors=>ret_ok.
          ELSE.
            retcode = c_oi_errors=>ret_error.
          ENDIF.
    
         CALL METHOD c_oi_errors=>create_error_for_retcode
                                  EXPORTING retcode = retcode
                                            no_flush = ' '
                                  IMPORTING error = error.
       ENDMETHOD.
    ENDCLASS.
    
    CLASS c_oi_ole_control_creator IMPLEMENTATION.
        METHOD get_ole_container_control.
    *               EXPORTING control TYPE REF TO i_oi_container_control
    *                         retcode TYPE t_oi_ret_string.
         DATA: l_control TYPE REF TO i_oi_container_control.
    
         CALL METHOD c_oi_container_control_creator=>get_container_control
                    IMPORTING control = l_control
                              retcode = retcode
                              error = error.
         control ?= l_control.
    
        ENDMETHOD.
    ENDCLASS.
    
    CLASS c_oi_ole_document_factory IMPLEMENTATION.
        METHOD i_oi_document_factory~start_factory.
    *                 IMPORTING r3_application_name TYPE c
    *                           value(rep_id) type sy-repid default sy-repid
    *                           value(dynpro_nr) type sy-dynnr
    *                                                       default sy-dynnr
    *                          register_on_close_event type c default ' '
    *                          register_on_custom_event type c default ' '
    *                 RETURNING value(retcode) TYPE c.
          IF container_control IS INITIAL.
            CALL METHOD c_oi_ole_control_creator=>get_ole_container_control
               IMPORTING control = container_control
                         retcode = retcode.
            IF retcode EQ c_oi_errors=>ret_ok.
              CALL METHOD container_control->init_control
                 EXPORTING r3_application_name = r3_application_name
                           inplace_mode = 0
                           rep_id = rep_id
                           shell_style = cl_gui_control=>ws_child
                           dynpro_nr = dynpro_nr
                           parent = cl_gui_container=>default_screen
                           register_on_close_event = register_on_close_event
                           register_on_custom_event =
                                                    register_on_custom_event
                           no_flush = no_flush
                 IMPORTING retcode = retcode
                           error = error.
            ELSE.
              CALL METHOD c_oi_errors=>create_error_for_retcode
                                       EXPORTING retcode = retcode
                                                 no_flush = no_flush
                                       IMPORTING error = error.
            ENDIF.
          ELSE. " already created
            retcode = c_oi_errors=>ret_ok.
            CALL METHOD c_oi_errors=>create_error_for_retcode
                                       EXPORTING retcode = retcode
                                                 no_flush = no_flush
                                       IMPORTING error = error.
          ENDIF.
        ENDMETHOD.
    
        METHOD i_oi_document_factory~stop_factory.
    *                IMPORTING exit_control_manager TYPE c DEFAULT 'X'
    *                RETURNING value(retcode) TYPE c.
          IF NOT container_control IS INITIAL.
            CALL METHOD container_control->destroy_control
                 EXPORTING no_flush = no_flush
                 IMPORTING retcode = retcode
                           error = error.
          ELSE. " already destroyed
            retcode = c_oi_errors=>ret_ok.
            CALL METHOD c_oi_errors=>create_error_for_retcode
                                       EXPORTING retcode = retcode
                                                 no_flush = no_flush
                                       IMPORTING error = error.
          ENDIF.
        ENDMETHOD.
    
        METHOD i_oi_document_factory~link_factory.
    *                 IMPORTING value(rep_id) LIKE sy-repid
    *                           value(dynpro_nr) LIKE sy-dynnr
    *                 RETURNING value(retcode) TYPE t_oi_ret_string.
         IF NOT container_control IS INITIAL.
           CALL METHOD container_control->link_control
                         EXPORTING rep_id = rep_id
                                   dynpro_nr = dynpro_nr
                                   no_flush = no_flush
                         IMPORTING retcode = retcode
                                   error = error.
         ELSE.
           retcode = c_oi_errors=>ret_object_not_initialized.
           CALL METHOD c_oi_errors=>create_error_for_retcode
                                       EXPORTING retcode = retcode
                                                 no_flush = no_flush
                                       IMPORTING error = error.
         ENDIF.
        ENDMETHOD.
    
        METHOD i_oi_document_factory~get_document_proxy.
    *                 IMPORTING document_type TYPE c
    *                 EXPORTING document_proxy TYPE
    *                                             REF TO i_oi_document_proxy
    *                           retcode TYPE c.
         IF NOT container_control IS INITIAL.
           CALL METHOD container_control->get_document_proxy
                         EXPORTING document_type = document_type
                                   document_format = document_format
                                   register_container = register_container
                                   no_flush = no_flush
                         IMPORTING document_proxy = document_proxy
                                   retcode = retcode
                                   error = error.
         ELSE.
           retcode = c_oi_errors=>ret_object_not_initialized.
           CALL METHOD c_oi_errors=>create_error_for_retcode
                                       EXPORTING retcode = retcode
                                                 no_flush = no_flush
                                       IMPORTING error = error.
         ENDIF.
        ENDMETHOD.
    
        METHOD i_oi_document_factory~get_link_server.
    *               IMPORTING server_type TYPE c DEFAULT ' '
    *               EXPORTING link_server TYPE REF TO i_oi_link_server
    *                          retcode TYPE t_oi_ret_string.
         IF NOT container_control IS INITIAL.
           CALL METHOD container_control->get_link_server
                         EXPORTING server_type = server_type
                                   no_flush = no_flush
                         IMPORTING link_server = link_server
                                   retcode = retcode
                                   error = error.
         ELSE.
           retcode = c_oi_errors=>ret_object_not_initialized.
           CALL METHOD c_oi_errors=>create_error_for_retcode
                                       EXPORTING retcode = retcode
                                                 no_flush = no_flush
                                       IMPORTING error = error.
         ENDIF.
        ENDMETHOD.
    
        METHOD i_oi_document_factory~get_table_collection.
    *                EXPORTING table_collection TYPE
    *                                         REF TO i_oi_table_collection
    *                           retcode TYPE t_oi_ret_string.
         IF NOT container_control IS INITIAL.
           CALL METHOD container_control->get_table_collection
                         EXPORTING no_flush = no_flush
                         IMPORTING table_collection = table_collection
                                   retcode = retcode
                                   error = error.
         ELSE.
           retcode = c_oi_errors=>ret_object_not_initialized.
           CALL METHOD c_oi_errors=>create_error_for_retcode
                                       EXPORTING retcode = retcode
                                                 no_flush = no_flush
                                       IMPORTING error = error.
         ENDIF.
        ENDMETHOD.
    
        METHOD i_oi_document_factory~get_registered_doc_types.
    *                IMPORTING interface_type TYPE c DEFAULT ' '
    *                EXPORTING descr_list TYPE t_oi_interface_descr_list
    *                          retcode TYPE t_oi_ret_string.
         IF NOT container_control IS INITIAL.
           CALL METHOD container_control->get_registered_doc_types
                         EXPORTING interface_type = interface_type
                                   no_flush = no_flush
                         IMPORTING descr_list = descr_list
                                   retcode = retcode
                                   error = error.
         ELSE.
           retcode = c_oi_errors=>ret_object_not_initialized.
           CALL METHOD c_oi_errors=>create_error_for_retcode
                                       EXPORTING retcode = retcode
                                                 no_flush = no_flush
                                       IMPORTING error = error.
         ENDIF.
        ENDMETHOD.
    
        METHOD i_oi_document_factory~check_registered_doc_types.
    *                CHANGING descr_list TYPE t_oi_interface_descr_list
    *                         retcode TYPE t_oi_ret_string.
         IF NOT container_control IS INITIAL.
           CALL METHOD container_control->check_registered_doc_types
                         EXPORTING no_flush = no_flush
                         IMPORTING error = error
                         CHANGING descr_list = descr_list
                                  retcode = retcode.
         ELSE.
           retcode = c_oi_errors=>ret_object_not_initialized.
           CALL METHOD c_oi_errors=>create_error_for_retcode
                                       EXPORTING retcode = retcode
                                                 no_flush = no_flush
                                       IMPORTING error = error.
         ENDIF.
        ENDMETHOD.
    ENDCLASS.
    ***INCLUDE OLE2INCL.
    TYPE-POOLS OLE2 .
  • 相关阅读:
    【codeforces 411B】Multi-core Processor
    【codeforces 314C】Sereja and Subsequences
    【hdu 1890】Robotic Sort
    【图灵杯 A】谷神的赌博游戏
    【图灵杯 J】简单的变位词
    【图灵杯 F】一道简单的递推题(矩阵快速幂,乘法模板)
    【图灵杯 E也即POJ 3368】简单的RMQ
    【codeforces 496E】Distributing Parts
    【codeforces 553C】Love Triangles
    Diffie-Hellman Key Exchange – A Non-Mathematician’s Explanation
  • 原文地址:https://www.cnblogs.com/JackeyLove/p/13650612.html
Copyright © 2011-2022 走看看