SAP Netweaver收藏夾管理工具

  • 2020 年 1 月 16 日
  • 筆記

REPORT zfavorite.    TYPES: tt_tcode  TYPE STANDARD TABLE OF tstct-tcode,         tt_wd_app TYPE STANDARD TABLE OF wdy_applicationt-application_name.  TYPES: BEGIN OF ty_file,           text  LIKE smen_buffc-text,           tcode LIKE smen_buffc-report,         END   OF ty_file.    CLASS lcl_counter DEFINITION.      PUBLIC SECTION.      METHODS: get_new_obj_id RETURNING VALUE(rv_id) TYPE int4,        get_folder_sort RETURNING VALUE(rv_id) TYPE int4,        get_tcode_sort RETURNING VALUE(rv_id) TYPE int4,        reset_tcode_sort.        CONSTANTS: cv_root TYPE smen_buffc-parent_id VALUE '00001'.      CONSTANTS: cv_level1 TYPE smen_buffc-menu_level VALUE '01',                 cv_level2 LIKE cv_level1 VALUE '02'.    PRIVATE SECTION.      DATA: mv_object_id   TYPE int4 VALUE 1,            mv_folder_sort TYPE int4 VALUE 0,            mv_tcode_sort  TYPE int4 VALUE 0.  ENDCLASS.    CLASS lcl_counter IMPLEMENTATION.    METHOD: get_new_obj_id.      ADD 1 TO mv_object_id.      rv_id = mv_object_id.    ENDMETHOD.      METHOD: get_folder_sort.      ADD 10 TO mv_folder_sort.      rv_id = mv_folder_sort.    ENDMETHOD.      METHOD: get_tcode_sort.      ADD 10 TO mv_tcode_sort.      rv_id = mv_tcode_sort.    ENDMETHOD.      METHOD reset_tcode_sort.      CLEAR: mv_tcode_sort.    ENDMETHOD.  ENDCLASS.    CLASS lcl_tool DEFINITION.    PUBLIC SECTION.      CLASS-METHODS: is_tcode  IMPORTING iv_text TYPE string RETURNING VALUE(result) TYPE abap_bool.      CLASS-METHODS: is_wd_app  IMPORTING iv_text TYPE string RETURNING VALUE(result) TYPE abap_bool.      CLASS-METHODS: get_tcode IMPORTING iv_text TYPE smen_buffc-text RETURNING VALUE(result) TYPE smen_buffc-report.      CLASS-METHODS: get_wd_app IMPORTING iv_text TYPE smen_buffc-text RETURNING VALUE(result) TYPE smen_buffc-report.      CLASS-METHODS: set_tcode_list IMPORTING it_tcode TYPE tt_tcode.      CLASS-METHODS: set_wd_app_list IMPORTING it_app TYPE tt_wd_app.        CLASS-METHODS: get_tcode_description IMPORTING iv_tcode TYPE smen_buffc-report RETURNING VALUE(result) TYPE smen_buffc-text.      CLASS-METHODS: get_app_description IMPORTING iv_app TYPE smen_buffc-text RETURNING VALUE(result) TYPE smen_buffc-text.      CLASS-METHODS: get_menu_type IMPORTING is_menu TYPE ty_file RETURNING VALUE(result) TYPE int4.        CONSTANTS: cv_wd_app_type   TYPE smen_buffc-reporttype VALUE 'OT',                 cv_wd_app_report TYPE smen_buffc-report VALUE 'WDY_APPLICATION',                 BEGIN OF cs_entry_type,                   top_tcode    TYPE int4 VALUE 1,                   folder       TYPE int4 VALUE 2,                   child_tcode  TYPE int4 VALUE 3,                   top_wd_app   TYPE int4 VALUE 4,                   child_wd_app TYPE int4 VALUE 5,                   invalid      TYPE int4 VALUE 6,                 END OF cs_entry_type.      PRIVATE SECTION.      CLASS-DATA: st_tcode  TYPE STANDARD TABLE OF tstct,                  st_wd_app TYPE STANDARD TABLE OF wdy_applicationt.  ENDCLASS.    CLASS lcl_tool IMPLEMENTATION.    METHOD: is_tcode.      IF iv_text CP '[*]'.        result = abap_true.      ELSE.        result = abap_false.      ENDIF.    ENDMETHOD.      METHOD: is_wd_app.      IF iv_text CP '(*)'.        result = abap_true.      ELSE.        result = abap_false.      ENDIF.    ENDMETHOD.      METHOD: get_tcode.        result = iv_text.      REPLACE ALL OCCURRENCES OF REGEX `[[]]` IN result WITH space.        CONDENSE result NO-GAPS.    ENDMETHOD.      METHOD: get_wd_app.        result = iv_text.      REPLACE ALL OCCURRENCES OF REGEX `[()]` IN result WITH space.        CONDENSE result NO-GAPS.    ENDMETHOD.      METHOD: set_tcode_list.      SELECT * INTO CORRESPONDING FIELDS OF TABLE st_tcode FROM tstct        FOR ALL ENTRIES IN it_tcode WHERE sprsl = sy-langu AND tcode = it_tcode-table_line.      ENDMETHOD.      METHOD: set_wd_app_list.      SELECT * INTO CORRESPONDING FIELDS OF TABLE st_wd_app FROM wdy_applicationt         FOR ALL ENTRIES IN it_app WHERE application_name = it_app-table_line AND langu = sy-langu.    ENDMETHOD.      METHOD: get_tcode_description.      FIELD-SYMBOLS: <line> TYPE tstct.      READ TABLE st_tcode ASSIGNING <line> WITH KEY tcode = iv_tcode.      IF sy-subrc = 0.        result = <line>-ttext.      ENDIF.    ENDMETHOD.      METHOD: get_app_description.        FIELD-SYMBOLS: <line> LIKE LINE OF st_wd_app.      READ TABLE st_wd_app ASSIGNING <line> WITH KEY application_name = iv_app.      IF sy-subrc = 0.        result = <line>-description.      ENDIF.    ENDMETHOD.      METHOD: get_menu_type.      DATA: lv_is_tcode  TYPE abap_bool,            lv_is_wd_app TYPE abap_bool.        lv_is_tcode = is_tcode( CONV #( is_menu-text ) ).      lv_is_wd_app = is_wd_app( CONV #( is_menu-text ) ).        IF is_menu-text IS NOT INITIAL AND is_menu-tcode IS INITIAL.        IF is_tcode( CONV #( is_menu-text ) ) = abap_true.          result = cs_entry_type-top_tcode.        ELSEIF is_wd_app( CONV #( is_menu-text ) ) = abap_true.          result = cs_entry_type-top_wd_app.        ELSE.          result = cs_entry_type-folder.        ENDIF.      ELSEIF is_menu-tcode IS NOT INITIAL.        IF is_tcode( CONV #( is_menu-tcode ) ) = abap_true.          result = cs_entry_type-child_tcode.        ELSEIF is_wd_app( CONV #( is_menu-tcode ) ) = abap_true.          result = cs_entry_type-child_wd_app.        ELSE.          result = cs_entry_type-invalid.        ENDIF.      ELSE.        result = cs_entry_type-invalid.      ENDIF.    ENDMETHOD.  ENDCLASS.    START-OF-SELECTION.      DATA: gt_file     TYPE STANDARD TABLE OF ty_file,          gt_tcodes   TYPE tt_tcode,          gt_wd_app   TYPE tt_wd_app,          lo_counter  TYPE REF TO lcl_counter,          lv_filename TYPE localfile,          lv_name_string type string.      CALL FUNCTION 'NAVIGATION_FILENAME_HELP'      EXPORTING        default_path_long      = '*.*'        mode                   = 'O'      IMPORTING        selected_filename = lv_filename.        CHECK lv_filename IS NOT INITIAL.    lv_name_string = lv_filename.    CREATE OBJECT lo_counter.      CALL FUNCTION 'GUI_UPLOAD'      EXPORTING        filename                = lv_name_string        filetype                = 'ASC'        has_field_separator     = 'X'      TABLES        data_tab                = gt_file      EXCEPTIONS        file_open_error         = 1        file_read_error         = 2        no_batch                = 3        gui_refuse_filetransfer = 4        invalid_type            = 5        no_authority            = 6                           "as of 4.6C        OTHERS                  = 7.      DELETE gt_file WHERE tcode IS INITIAL AND text IS INITIAL.      DATA: ls_menu_entry     TYPE smen_buffc,          lt_menu_entry     TYPE STANDARD TABLE OF smen_buffc,          ls_web_link       TYPE smen_buffi,          lt_web_link       TYPE STANDARD TABLE OF smen_buffi,          lv_current_par_id TYPE smen_buffc-parent_id.      FIELD-SYMBOLS: <entry> LIKE LINE OF gt_file,                   <menu>  LIKE LINE OF lt_menu_entry,                   <link>  TYPE smen_buffi.      LOOP AT gt_file ASSIGNING <entry>.      CLEAR: ls_menu_entry.      ls_menu_entry-object_id = lo_counter->get_new_obj_id( ).      ls_menu_entry-uname = 'LIKE2'.      ls_menu_entry-mandt = sy-mandt.        CASE lcl_tool=>get_menu_type( <entry> ).        WHEN lcl_tool=>cs_entry_type-top_tcode.          ls_menu_entry-reporttype = 'TR'.          ls_menu_entry-parent_id = lcl_counter=>cv_root.          ls_menu_entry-report = lcl_tool=>get_tcode( <entry>-text ).          ls_menu_entry-menu_level = lcl_counter=>cv_level1.          ls_menu_entry-sort_order = lo_counter->get_folder_sort( ).          APPEND ls_menu_entry-report TO gt_tcodes.        WHEN lcl_tool=>cs_entry_type-top_wd_app.          ls_menu_entry-reporttype = 'OT'.          ls_menu_entry-parent_id = lcl_counter=>cv_root.          ls_menu_entry-report = lcl_tool=>cv_wd_app_report.          ls_menu_entry-menu_level = lcl_counter=>cv_level1.          ls_menu_entry-sort_order = lo_counter->get_folder_sort( ).          ls_web_link-object_id = ls_menu_entry-object_id.          APPEND ls_web_link TO lt_web_link.          ls_menu_entry-text  = lcl_tool=>get_wd_app( <entry>-text ).          APPEND ls_menu_entry-text  TO gt_wd_app.        WHEN lcl_tool=>cs_entry_type-folder.          ls_menu_entry-text = <entry>-text.          ls_menu_entry-parent_id = lcl_counter=>cv_root.            ls_menu_entry-sort_order = lo_counter->get_folder_sort( ).          ls_menu_entry-menu_level = lcl_counter=>cv_level1.          lv_current_par_id = ls_menu_entry-object_id.          lo_counter->reset_tcode_sort( ).        WHEN lcl_tool=>cs_entry_type-child_tcode.          ls_menu_entry-reporttype = 'TR'.          ls_menu_entry-report = lcl_tool=>get_tcode( CONV #( <entry>-tcode ) ).          ls_menu_entry-parent_id = lv_current_par_id.          ls_menu_entry-sort_order = lo_counter->get_tcode_sort( ).          ls_menu_entry-menu_level = lcl_counter=>cv_level2.          APPEND ls_menu_entry-report TO gt_tcodes.        WHEN lcl_tool=>cs_entry_type-child_wd_app.          ls_menu_entry-reporttype = 'OT'.          ls_menu_entry-report = lcl_tool=>cv_wd_app_report.          ls_menu_entry-parent_id = lv_current_par_id.          ls_menu_entry-sort_order = lo_counter->get_tcode_sort( ).          ls_menu_entry-menu_level = lcl_counter=>cv_level2.          ls_menu_entry-text  = lcl_tool=>get_wd_app( CONV #( <entry>-tcode ) ).          APPEND ls_menu_entry-text TO gt_wd_app.          ls_web_link-object_id = ls_menu_entry-object_id.          APPEND ls_web_link TO lt_web_link.        WHEN OTHERS.          WRITE: / 'Invalid record: ', <entry>-text, <entry>-tcode COLOR COL_NEGATIVE.          RETURN.      ENDCASE.      APPEND ls_menu_entry TO lt_menu_entry.    ENDLOOP.      lcl_tool=>set_tcode_list( gt_tcodes ).    lcl_tool=>set_wd_app_list( gt_wd_app ).      LOOP AT lt_menu_entry ASSIGNING <menu> WHERE reporttype = 'TR'.      <menu>-text = lcl_tool=>get_tcode_description( <menu>-report ).    ENDLOOP.      LOOP AT lt_web_link ASSIGNING <link>.      <link>-mandt = sy-mandt.      <link>-link_type = 'W'.      <link>-uname = 'LIKE2'.      READ TABLE lt_menu_entry INTO ls_menu_entry WITH KEY object_id = <link>-object_id.      CHECK sy-subrc = 0.      TRANSLATE ls_menu_entry-text TO LOWER CASE.      <link>-url = '0E' && ls_menu_entry-text.    ENDLOOP.      LOOP AT lt_menu_entry ASSIGNING <menu> WHERE reporttype = 'OT'.      <menu>-text = lcl_tool=>get_app_description( <menu>-text ).    ENDLOOP.      DELETE FROM smen_buffc WHERE uname = 'LIKE2'.    DELETE FROM smen_buffi WHERE uname = 'LIKE2'.      INSERT smen_buffc FROM TABLE lt_menu_entry.    INSERT smen_buffi FROM TABLE lt_web_link.      COMMIT WORK AND WAIT.      WRITE: / 'Favorite list uploaded successfully, total entries: ', lines( lt_menu_entry ) COLOR COL_POSITIVE.

要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":