cancel
Showing results for 
Search instead for 
Did you mean: 

Analogue Transaction CODE_SCANNER for WD4A

Former Member
0 Kudos

Hi at all,

there exists a transaction "CODE_SCANNER" for searching code within a user defined area (packages ...) in SAP. This transaction searches the strings in programs, function groups and classes, but not in Web Dynpro components or methods in the component controller / views.

Does anybody know a transaction for searching code in Web Dynpro components???

Thanks for all answers.

Dirk

Accepted Solutions (0)

Answers (6)

Answers (6)

0 Kudos

Hi

I've written the prog, searches for texts in webdynpro sources and has code_scanner-like interface.

==========

REPORT  z_code_scanner.

TYPE-POOLS: abap, rs, slis, wdyrt.

TABLES: wdy_ctlr_compo_key, rsplf_srv, sscrfields.

CONSTANTS: c_fox          TYPE rsplf_srvtypenm VALUE '0RSPL_FORMULA',

           c_type_wdy     TYPE c VALUE '1',

           c_type_fox     TYPE c VALUE '2'.

TYPES: BEGIN OF lty_comp,

         component        TYPE wdy_component_name,

       END OF lty_comp.

TYPES: BEGIN OF lty_fox,

         srvnm            TYPE rsplf_srvnm,

       END OF lty_fox.

TYPES: BEGIN OF lty_found,

         type                TYPE char1,

         component_name      TYPE wdy_ctlr_compo-component_name,

         controller_name     TYPE wdy_ctlr_compo-controller_name,

         cmpname             TYPE wdy_ctlr_compo-cmpname,

         srvnm               TYPE rsplf_srv-srvnm,

         title               TYPE string,

         line                TYPE string,

         line_num            TYPE i,

       END OF lty_found.

DATA: gt_comp         TYPE TABLE OF lty_comp WITH HEADER LINE,

      gt_fox          TYPE TABLE OF lty_fox WITH HEADER LINE,

      gt_found        TYPE TABLE OF lty_found WITH HEADER LINE.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(23) twdy FOR FIELD s_wdyc.

SELECTION-SCREEN POSITION 30.

SELECT-OPTIONS: s_wdyc          FOR wdy_ctlr_compo_key-component_name.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(23) tfox FOR FIELD s_fox.

SELECTION-SCREEN POSITION 30.

SELECT-OPTIONS: s_fox           FOR rsplf_srv-srvnm.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(23) tstr FOR FIELD p_strg.

SELECTION-SCREEN POSITION 30.

PARAMETERS: p_strg(80).

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(23) twdyp FOR FIELD p_wdyc.

SELECTION-SCREEN POSITION 30.

PARAMETERS: p_wdyc       TYPE char1 AS CHECKBOX DEFAULT 'X'.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(23) tfoxp FOR FIELD p_fox.

SELECTION-SCREEN POSITION 30.

PARAMETERS: p_fox        TYPE char1 AS CHECKBOX DEFAULT 'X'.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN: FUNCTION KEY 1.

* INCLUDE Z79Y_CODE_SCANNER_EX_O01                .  " PBO-Modules

* INCLUDE Z79Y_CODE_SCANNER_EX_I01                .  " PAI-Modules

* INCLUDE Z79Y_CODE_SCANNER_EX_F01                .  " FORM-Routines

INITIALIZATION.

  twdy = 'Web-Dynpro-Component'.

  tfox = 'Fox Formulas'.

  tstr = 'Search string'.

  twdyp = 'Search in WebDynpro Components'.

  tfoxp = 'Search in Fox Formulas'.

  " Set default values

  s_wdyc-sign   = 'I'.

  s_wdyc-option = 'CP'.

  s_wdyc-low    = 'Z*'.

  APPEND s_wdyc.

  s_fox-sign   = 'I'.

  s_fox-option = 'CP'.

  s_fox-low    = 'Z*'.

  APPEND s_fox.

  sscrfields-functxt_01 = 'Запустить code_scanner'.

*  CALL FUNCTION 'ICON_CREATE'

*    EXPORTING

*      name                        = 'ICON_DESELECT_ALL'

*      text                        = ''

*      info                        = 'Отменить выделение'

**     ADD_STDINF                  = 'X'

*    IMPORTING

*      RESULT                      = sscrfields-functxt_01

*    EXCEPTIONS

*      icon_not_found              = 1

*      outputfield_too_short       = 2

*      OTHERS                      = 3.

*

*  IF sy-subrc <> 0.

*    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

*            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

*  ENDIF.

AT SELECTION-SCREEN.

  CASE sscrfields-ucomm.

    WHEN 'FC01'.

      CALL TRANSACTION 'CODE_SCANNER'.

  ENDCASE.

START-OF-SELECTION.

  PERFORM main.

*&---------------------------------------------------------------------*

*&      Form  get_data

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM get_data CHANGING value(c_rc)   TYPE sysubrc.

  CLEAR c_rc.

  CLEAR: gt_comp, gt_fox, gt_found.

  REFRESH: gt_comp[], gt_fox[], gt_found[].

  IF p_wdyc = abap_true.

    SELECT DISTINCT component_name

      FROM wdy_component

      INTO TABLE gt_comp                                 "#EC CI_BYPASS

      WHERE component_name IN s_wdyc.                 "#EC CI_SGLSELECT

  ENDIF.

  IF p_fox = abap_true.

    SELECT DISTINCT srvnm

      FROM rsplf_srv

      INTO TABLE gt_fox

      WHERE srvnm IN s_fox

        AND objvers = rs_c_objvers-active                "#EC CI_BYPASS

        AND srvtypenm = c_fox.                        "#EC CI_SGLSELECT

  ENDIF.

  IF gt_comp[] IS INITIAL AND gt_fox[] IS INITIAL.

    MESSAGE 'Данные не выбраны' TYPE 'S'.

    c_rc = 1.

  ENDIF.

ENDFORM.                    " get_data

*&---------------------------------------------------------------------*

*&      Form  main

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM main .

  DATA: lv_rc          TYPE sysubrc.

  IF p_strg IS INITIAL.

    MESSAGE 'Заполните строку поиска' TYPE 'S' DISPLAY LIKE 'E'.

    RETURN.

  ENDIF.

  PERFORM get_data CHANGING lv_rc.

  IF lv_rc <> 0.

    RETURN.

  ENDIF.

  PERFORM search_wdy.

  PERFORM search_fox.

  PERFORM create_alvlist.

ENDFORM.                    " main

*&---------------------------------------------------------------------*

*&      Form  search_wdy

*&---------------------------------------------------------------------*

*       Поиск в компонентах WebDynpro

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM search_wdy .

  TYPES: BEGIN OF lty_found_wdy_ex.

  INCLUDE TYPE lty_found.

  TYPES: code_body        TYPE wdy_ctlr_compo-code_body,

       END OF lty_found_wdy_ex.

  DATA: lv_search        TYPE string,

        lt_found_wdy_ex  TYPE TABLE OF lty_found_wdy_ex,

        lt_lines         TYPE TABLE OF string,

        lt_results       TYPE TABLE OF match_result. " WITH HEADER LINE.

  FIELD-SYMBOLS: <ls_found_wdy_ex>           TYPE lty_found_wdy_ex,

                 <ls_result>                 TYPE match_result.

  CHECK gt_comp[] IS NOT INITIAL.

  SELECT component_name controller_name cmpname code_body

    FROM wdy_ctlr_compo

    INTO CORRESPONDING FIELDS OF TABLE lt_found_wdy_ex

    FOR ALL ENTRIES IN gt_comp

    WHERE component_name = gt_comp-component.

  LOOP AT lt_found_wdy_ex ASSIGNING <ls_found_wdy_ex>

    WHERE code_body CS p_strg.

    SPLIT <ls_found_wdy_ex>-code_body AT cl_abap_char_utilities=>cr_lf

      INTO TABLE lt_lines.

    FIND ALL OCCURRENCES OF p_strg IN TABLE lt_lines

      IGNORING CASE

      RESULTS lt_results.

    IF sy-subrc <> 0.

      BREAK-POINT.

      MESSAGE 'Произошла внутренняя ошибка' TYPE 'E'.

    ENDIF.

    LOOP AT lt_results ASSIGNING <ls_result>.

      CLEAR gt_found.

      MOVE-CORRESPONDING <ls_found_wdy_ex> TO gt_found.

      gt_found-type = c_type_wdy.

      gt_found-line_num = <ls_result>-line.

      READ TABLE lt_lines INDEX <ls_result>-line INTO gt_found-line.

      CONCATENATE gt_found-component_name gt_found-controller_name gt_found-cmpname

        INTO gt_found-title SEPARATED BY '/'.

      CONCATENATE 'WDY:' gt_found-title INTO gt_found-title SEPARATED BY space.

      APPEND gt_found.

    ENDLOOP.

  ENDLOOP.

ENDFORM.                    " search_wdy

*&---------------------------------------------------------------------*

*&      Form  create_alvlist

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM create_alvlist .

  DATA: ls_layout         TYPE slis_layout_alv,

        lt_all_events     TYPE TABLE OF slis_alv_event,

        lt_events         TYPE TABLE OF slis_alv_event,

        ls_event          TYPE slis_alv_event,

        lt_fieldcat       TYPE TABLE OF slis_fieldcat_alv.

  FIELD-SYMBOLS: <ls_fieldcat>        TYPE slis_fieldcat_alv.

* Initialize Layout for activity log

  ls_layout-detail_popup         = abap_true.

  ls_layout-detail_initial_lines = abap_true.

  ls_layout-expand_all           = abap_true.

  ls_layout-colwidth_optimize    = abap_true.

  ls_layout-zebra                = abap_true.

* Get possible events

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'

    EXPORTING

      i_list_type = 0

    IMPORTING

      et_events   = lt_all_events[].

* User-command for activity log

  READ TABLE lt_all_events WITH KEY name = slis_ev_user_command

             INTO ls_event.

  IF sy-subrc = 0.

    ls_event-form = 'ALV_USER_COMMAND'.

    APPEND ls_event TO lt_events.

  ENDIF.

  APPEND INITIAL LINE TO lt_fieldcat ASSIGNING <ls_fieldcat>.

  <ls_fieldcat>-fieldname = 'TITLE'.

  <ls_fieldcat>-outputlen = 70.

  <ls_fieldcat>-seltext_l = 'Месторасположение'.

  APPEND INITIAL LINE TO lt_fieldcat ASSIGNING <ls_fieldcat>.

  <ls_fieldcat>-fieldname = 'LINE_NUM'.

  "<ls_fieldcat>-outputlen = .

  <ls_fieldcat>-seltext_s = '№ строки'.

  APPEND INITIAL LINE TO lt_fieldcat ASSIGNING <ls_fieldcat>.

  <ls_fieldcat>-fieldname = 'LINE'.

  <ls_fieldcat>-outputlen = 70.

  <ls_fieldcat>-seltext_l = 'Текст'.

  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

    EXPORTING

*   I_INTERFACE_CHECK                 = con_false

*   I_BYPASSING_BUFFER                = con_false

*   I_BUFFER_ACTIVE                   = ' '

      i_callback_program                = sy-repid

*   I_CALLBACK_PF_STATUS_SET          = con_false

*   I_CALLBACK_USER_COMMAND           = con_false

*   I_CALLBACK_TOP_OF_PAGE            = con_false

*   I_CALLBACK_HTML_TOP_OF_PAGE       = con_false

*   I_CALLBACK_HTML_END_OF_LIST       = con_false

*   i_structure_name                  = con_false

*   I_BACKGROUND_ID                   = con_false

*   I_GRID_TITLE                      =

*   I_GRID_SETTINGS                   =

      is_layout                         = ls_layout

      it_fieldcat                       = lt_fieldcat

*   IT_EXCLUDING                      =

*   IT_SPECIAL_GROUPS                 =

   "it_sort                           = l_tab_sort

*   IT_FILTER                         =

*   IS_SEL_HIDE                       =

*   I_DEFAULT                         = con_true

      i_save                            = 'A'

*   IS_VARIANT                        =

      it_events                         = lt_events

*   IT_EVENT_EXIT                     =

*   IS_PRINT                          =

*   IS_REPREP_ID                      =

*   I_SCREEN_START_COLUMN             = 0

*   I_SCREEN_START_LINE               = 0

*   I_SCREEN_END_COLUMN               = 0

*   I_SCREEN_END_LINE                 = 0

*   IT_ALV_GRAPHICS                   =

*   IT_HYPERLINK                      =

*   IT_ADD_FIELDCAT                   =

*   IT_EXCEPT_QINFO                   =

*   I_HTML_HEIGHT_TOP                 =

*   I_HTML_HEIGHT_END                 =

* IMPORTING

*   E_EXIT_CAUSED_BY_CALLER           =

*   ES_EXIT_CAUSED_BY_USER            =

  TABLES

    t_outtab                          = gt_found[]

  EXCEPTIONS

    program_error                     = 1

    OTHERS                            = 2.

  IF sy-subrc <> 0.

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  ENDIF.

ENDFORM.                    " create_alvlist

*---------------------------------------------------------------------*

*       FORM ALV_USER_COMMAND                                         *

*---------------------------------------------------------------------*

FORM alv_user_command

     USING i_ucomm TYPE syucomm

           i_selfield TYPE slis_selfield.                   "#EC CALLED

  "FIELD-SYMBOLS: <ls_line>            TYPE lty_found.

  CHECK i_ucomm = '&IC1'.

  READ TABLE gt_found INDEX i_selfield-tabindex.

  IF sy-subrc = 0.

    CASE gt_found-type.

      WHEN c_type_wdy.

        PERFORM open_webdynpro USING gt_found-component_name

                                     gt_found-controller_name

                                     gt_found-cmpname

                                     gt_found-line_num.

      WHEN c_type_fox.

        PERFORM open_fox_in_browser USING gt_found-srvnm.

    ENDCASE.

  ENDIF.

*

*  l_position = 1.

*  READ TABLE g_tab_lines INTO l_str_lines INDEX i_selfield-tabindex.

*  IF sy-subrc = 0.

*    l_position = l_str_lines-linno.

*  ENDIF.

*

**  BREAK-POINT.

*  CASE i_ucomm.

*

*    WHEN '&IC1'.

*      PERFORM navigate_to_object USING l_str_lines-progname

*                                       l_position

*                                       p_edit.

*

*  ENDCASE.

*

** Do refresh always col- and row-stable

*  IF i_selfield-refresh = con_true.

*    i_selfield-col_stable = con_true.

*    i_selfield-row_stable = con_true.

*  ENDIF.

ENDFORM.                    "alv_user_command

*&---------------------------------------------------------------------*

*&      Form  open_webdynpro

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->VALUE(U_COMPONENT_NAME)   text

*      -->VALUE(U_CONTROLLER_NAME)  text

*      -->VALUE(U_METHOD)           text

*      -->VALUE(U_LINE)             text

*----------------------------------------------------------------------*

FORM open_webdynpro USING value(u_component_name) TYPE wdy_ctlr_compo-component_name

                          value(u_controller_name) TYPE wdy_ctlr_compo-controller_name

                          value(u_method) TYPE wdy_ctlr_compo-cmpname

                          value(u_line)   TYPE i.

  DATA: ls_cont_key        TYPE wdy_controller_key,

        lv_include         TYPE program,

        lt_map             TYPE wdyrt_line_info_tab_type WITH HEADER LINE,

        lv_line            TYPE i,

        lo_req             TYPE REF TO cl_wb_request,

        lt_request_set     TYPE swbm_wb_request_set.

  ls_cont_key-component_name = u_component_name.

  ls_cont_key-controller_name = u_controller_name.

  CALL METHOD cl_wdy_wb_naming_service=>get_includename_for_controller

    EXPORTING

      p_controller       = ls_cont_key

    RECEIVING

      p_includename      = lv_include

    EXCEPTIONS

      no_generation_info = 1

      OTHERS             = 2.

  IF sy-subrc <> 0.

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  ENDIF.

  CALL FUNCTION 'WDY_WB_GET_SOURCECODE_MAPPING'

    EXPORTING

      p_include          = lv_include

    IMPORTING

      p_map              = lt_map[]

*   P_HEADER           =

    EXCEPTIONS

      import_error       = 1

      OTHERS             = 2.

  IF sy-subrc <> 0.

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  ENDIF.

  "READ TABLE lt_map WITH KEY meta-text = u_method.

  "READ TABLE lt_map WITH KEY code-text = u_method.

  LOOP AT lt_map WHERE code-text = u_method.            "#EC CI_SORTSEQ

  ENDLOOP.

  IF sy-subrc <> 0.

    MESSAGE 'Не удалось' TYPE 'I'.

    RETURN.

  ENDIF.

  lv_line = lt_map-line + u_line - 1.

  CALL FUNCTION 'WDY_WB_REQUEST_FOR_SOURCEPOS'

    EXPORTING

      p_include             = lv_include

      p_line                = lv_line

      p_operation           = 'DISPLAY'

    IMPORTING

      p_wb_request          = lo_req

    EXCEPTIONS

      no_corresponding_code = 1

      OTHERS                = 2.

  IF sy-subrc <> 0.

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  ENDIF.

  APPEND lo_req TO lt_request_set.

  CALL METHOD cl_wb_startup=>start

    EXPORTING

      p_wb_request_set = lt_request_set.

*  IMPORTING

*    p_wb_error          = l_error

*  CHANGING

*    p_wb_data_container = l_container.

ENDFORM.                    "open_webdynpro

*&---------------------------------------------------------------------*

*&      Form  search_fox

*&---------------------------------------------------------------------*

*       Поиск текста в формулах FOX

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM search_fox .

  DATA: lo_srv                  TYPE REF TO cl_rsplfs_srv,

        lt_param_set_rule       TYPE TABLE OF rsplfa_s_param_set_rule,

        lt_param_tab            TYPE TABLE OF REF TO if_rsplfa_param_struc,

        lv_formula_string       TYPE string,

        lo_fline                TYPE REF TO if_rsplfa_param_elem,

        lv_line                 TYPE c LENGTH 60,

        lt_forml                TYPE rspls_ts_forml,

        lt_lines                TYPE TABLE OF string,

        lt_results              TYPE TABLE OF match_result.

  FIELD-SYMBOLS: <ls_param_set_rule>       TYPE rsplfa_s_param_set_rule,

                 <ls_param_tab>            TYPE REF TO if_rsplfa_param_struc,

                 <ls_result>               TYPE match_result,

                 <ls_forml>                TYPE rspls_s_forml.

  LOOP AT gt_fox.

    TRY.

        lo_srv = cl_rsplfs_srv=>factory( gt_fox-srvnm ).

      CATCH cx_rspls_msg_static_check .

        MESSAGE e001(00) WITH 'Ошибка cl_rsplfs_srv=>factory' gt_fox-srvnm.

    ENDTRY.

    lt_param_set_rule = lo_srv->if_rsplfa_srv~get_param_set_rules( ).

    SORT lt_param_set_rule BY rulepos.

    LOOP AT lt_param_set_rule ASSIGNING <ls_param_set_rule>.

      " Get FOX coding from parameters

      lt_param_tab = <ls_param_set_rule>-r_param_set->get_tab_param_struc( 'FORMULATAB' ).

      CLEAR lv_formula_string.

      LOOP AT lt_param_tab ASSIGNING <ls_param_tab>.

        lo_fline = <ls_param_tab>->get_comp_elem( 'FLINE' ).

        lo_fline->get_value( IMPORTING e_value = lv_line ).

        CONCATENATE lv_formula_string lv_line INTO lv_formula_string

          RESPECTING BLANKS.

      ENDLOOP.

      " Convert FOX coding and get field catalog for parsing

      lt_forml[] =  cl_rsplfc_formula=>string_to_forml_tab( lv_formula_string ).

      REFRESH lt_lines.

      LOOP AT lt_forml ASSIGNING <ls_forml>.

        APPEND <ls_forml>-fline TO lt_lines.

      ENDLOOP.

      " Find

      FIND ALL OCCURRENCES OF p_strg IN TABLE lt_lines

        IGNORING CASE

        RESULTS lt_results.

      CHECK sy-subrc = 0.

      LOOP AT lt_results ASSIGNING <ls_result>.

        CLEAR gt_found.

        gt_found-type = c_type_fox.

        gt_found-srvnm = gt_fox-srvnm.

        gt_found-line_num = <ls_result>-line.

        READ TABLE lt_lines INDEX <ls_result>-line INTO gt_found-line.

        CONCATENATE 'FOX:' gt_fox-srvnm INTO gt_found-title SEPARATED BY space.

        APPEND gt_found.

      ENDLOOP.

    ENDLOOP.

  ENDLOOP.

ENDFORM.                    " search_fox

*&---------------------------------------------------------------------*

*&      Form  open_fox_in_browser

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM open_fox_in_browser USING value(u_srvnm)    TYPE rsplf_srvnm.

  DATA: lv_iobjnm         TYPE sobj_name.

  lv_iobjnm = u_srvnm.

  cl_rspls_wdapp=>start_modeler( i_tlogo = rs_c_tlogo-planning_service

                                 i_objnm = lv_iobjnm ).

ENDFORM.                    " open_fox_in_browser

Former Member
0 Kudos

hi.

Thank you.It works/

Karthik.R

Former Member
0 Kudos

Solved.

- start transaction SE24

- enter the class CL_WDY_WB_NAMING_SERVICE

- start the method GET_CLASSNAME_FOR_COMPONENT

- enter your compontent name in the import parameter P_COMPONENT

- execute the method and you get the automatic generatet class where all coding of the component is within including views ...

- take this class name and start SE24 again

- enter the generatet class name

- now the search function in the top menu is available and we all can search any strings

Yippi!!

Former Member
0 Kudos

sure if it is there it will be good

Former Member
0 Kudos

I fear that you have to do that only.

Former Member
0 Kudos

I'm afraid you are right but let's wait, maybe someone got a more pleasent answer.

Former Member
0 Kudos

HI,

As far as i know there are no special transaction for web dynpro.There is only the object navigator SE80 to develop webdynpro.

Karthik.R

Former Member
0 Kudos

That means that I have to check all methods when I'm searching for a special coding or comment .... not really funny