查找smartform/script form中的字符串
业务:今天接了个需求,需要查找所有的smartform中是否存在写死的某些文本(比如STRING),拿到需求第一反应就是pass掉一个一个打开smartform去找,一个smartform可能有几十上百个文本框,这看不得看到猴年马月了。
解决办法:首先跟了下smartform的显示,发现它的文本都是存在一个自建表STXFTXT里的,这就好办多了,直接在TDLINE里输入我们需要查找的字符串,注意哦,这里是严格区分大小写的。也就是输入HR和hr结果是不一样的!
然后就可以了。
但是但是!有可能文本是维护在SO01中,那怎么办呢?还是同样的办法,肯定首先pass掉一个一个看的办法,trace again!发现它是存在STXH这个表里的,接着就好办多了,参考以下代码即可找出对应的smartform,可以交差了~
以下代码请根据具体情况进行必要优化,此并不是最终版本!
*&---------------------------------------------------------------------*
*& Report ZSEARCH_TEXT_FOR_SMARFORM
*&
*&---------------------------------------------------------------------*
************************************************************************
* Program Title : Search Text For Smartform
* Program Description: Search Text For Smartform USE Standard-Text SO10
************************************************************************
REPORT ZSEARCH_TEXT_FOR_SMARFORM MESSAGE-ID eu.
TYPE-POOLS:
slis,
seop,
sscr.
TABLES:
seoclasstx,
tadir,
tlibt,
d020s,
trdir,
TLINE.
TYPES:BEGIN OF TY_OUTPUT,
FNAME TYPE TDSFNAME, "smartform name
TDNAME TYPE STXH-TDNAME, "TEXT NAME
TDSPRAS TYPE STXH-TDSPRAS,"language
TDLINE TYPE TLINE-TDLINE, "search text
PROGNAME TYPE PROGNAME,
END OF TY_OUTPUT,
BEGIN OF ty_rs38l_fnam,
formname TYPE STXFADM-formname,
rs38l_fnam TYPE rs38l_fnam,
INCLUDE_PROGRAM_NAME TYPE STRING,
END OF ty_rs38l_fnam.
DATA:GT_OUTPUT TYPE TABLE OF TY_OUTPUT,
GS_OUTPUT LIKE LINE OF GT_OUTPUT.
DATA:LT_STXH TYPE TABLE OF STXH,
LS_STXH LIKE LINE OF LT_STXH.
DATA T_LINES LIKE TLINE OCCURS 0 WITH HEADER LINE.
DATA:L_SYREPID TYPE SYREPID,
LPFSTATUS TYPE SYPFKEY VALUE 'SALV_GUI_DEMO'.
MOVE SY-REPID TO L_SYREPID.
DATA: GO_ALV TYPE REF TO CL_SALV_TABLE.
DATA: GR_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS.
DATA: GR_DISPLAY TYPE REF TO CL_SALV_DISPLAY_SETTINGS.
DATA: LR_EVENTS TYPE REF TO CL_SALV_EVENTS_TABLE.
DATA:LR_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS_LIST.
DATA:GT_fm_name TYPE TABLE OF ty_rs38l_fnam,
GS_fm_name LIKE LINE OF GT_fm_name,
GT_fm_name_TEMP TYPE TABLE OF ty_rs38l_fnam.
CLASS:lcl_source_scan DEFINITION DEFERRED.
DATA:
lo_sscan TYPE REF TO lcl_source_scan,
lv_sstring TYPE text255,
lv_appl TYPE taplt-appl.
SELECT-OPTIONS: S_STTXT FOR TLINE-TDLINE NO INTERVALS MODIF ID MI1.
*SELECTION-SCREEN BEGIN OF BLOCK: a05 WITH FRAME TITLE a05 .
SELECT-OPTIONS sstring FOR lv_sstring NO INTERVALS MODIF ID dsp NO-DISPLAY .
PARAMETERS p_regex TYPE xfeld AS CHECKBOX MODIF ID dsp .
*SELECTION-SCREEN: END OF BLOCK a05,
* BEGIN OF BLOCK a10 WITH FRAME TITLE a10.
SELECT-OPTIONS: repname FOR trdir-name MEMORY ID rs_scan_repid NO-DISPLAY ,
dynnr FOR d020s-dnum MODIF ID MI2 NO-DISPLAY ,
subc FOR trdir-subc MODIF ID MI2 NO-DISPLAY ,
appl FOR lv_appl MODIF ID MI2 NO-DISPLAY ,
cnam FOR trdir-cnam MATCHCODE OBJECT user_addr MODIF ID MI2 NO-DISPLAY ,
unam FOR trdir-unam MATCHCODE OBJECT user_addr MODIF ID MI2 NO-DISPLAY .
*SELECTION-SCREEN: END OF BLOCK a10,
* BEGIN OF BLOCK a11 WITH FRAME TITLE a11.
SELECT-OPTIONS devclass FOR tadir-devclass MODIF ID MI2 NO-DISPLAY .
*SELECTION-SCREEN: END OF BLOCK a11,
* BEGIN OF BLOCK a12 WITH FRAME TITLE a12.
SELECT-OPTIONS: funcgrp FOR tlibt-area MODIF ID MI2 NO-DISPLAY .
*SELECTION-SCREEN: END OF BLOCK a12,
* BEGIN OF BLOCK a13 WITH FRAME TITLE a13.
SELECT-OPTIONS: p_class FOR seoclasstx-clsname MODIF ID MI2 NO-DISPLAY .
*SELECTION-SCREEN: END OF BLOCK a13,
* BEGIN OF BLOCK a20 WITH FRAME TITLE a20 .
PARAMETERS: plusminu(2) TYPE n DEFAULT 2 MODIF ID MI2 NO-DISPLAY ,
inclu TYPE xfeld AS CHECKBOX DEFAULT 'X' MODIF ID MI2 ,
modiass TYPE xfeld AS CHECKBOX USER-COMMAND dummy MODIF ID MI2,
comment TYPE xfeld AS CHECKBOX MODIF ID MI2.
*SELECTION-SCREEN: END OF BLOCK a20,
* BEGIN OF BLOCK a30 WITH FRAME TITLE a30.
PARAMETERS: rb_code RADIOBUTTON GROUP r10 MODIF ID MI2 ,
rb_dyn RADIOBUTTON GROUP r10 MODIF ID MI2,
rb_all RADIOBUTTON GROUP r10 MODIF ID MI2,
p_vers TYPE xfeld AS CHECKBOX MODIF ID MI2 .
*SELECTION-SCREEN: END OF BLOCK a30.
*----------------------------------------------------------------------*
* CLASS lcx_scan_exceptions DEFINITION
*----------------------------------------------------------------------*
* Exceptions for source scanning
*----------------------------------------------------------------------*
CLASS lcx_scan_exceptions DEFINITION INHERITING FROM cx_static_check FINAL.
ENDCLASS. "lcx_scan_exceptions DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_source_scan DEFINITION
*----------------------------------------------------------------------*
* ABAP source scanner
*----------------------------------------------------------------------*
CLASS lcl_source_scan DEFINITION FINAL.
PUBLIC SECTION.
METHODS:
constructor,
f4_class
CHANGING
cv_class_name TYPE clike,
f4_function_group
IMPORTING
iv_group_name TYPE clike,
f4_repname
CHANGING
cv_repname TYPE clike,
pbo,
start.
PROTECTED SECTION.
TYPES:
BEGIN OF ty_dynpro,
repname LIKE d020s-prog,
dynnr LIKE d020s-dnum,
END OF ty_dynpro.
TYPES:
BEGIN OF ty_ls_objname,
report TYPE sy-repid,
dynnr TYPE sy-dynnr,
END OF ty_ls_objname.
DATA:
go_alv TYPE REF TO cl_salv_hierseq_table,
gv_hit_count TYPE i,
gv_sstring TYPE string,
gv_dynp_found TYPE xfeld,
gv_vers_found TYPE xfeld,
gt_dynpro TYPE STANDARD TABLE OF ty_dynpro,
gt_object TYPE STANDARD TABLE OF tadir-obj_name,
gt_vrsd TYPE HASHED TABLE OF vrsd
WITH UNIQUE KEY objname versno,
BEGIN OF gs_alv_header,
repname TYPE tadir-obj_name,
dynnr TYPE sy-dynnr,
expand TYPE xfeld,
versno TYPE vrsd-versno,
END OF gs_alv_header,
gt_alv_header LIKE STANDARD TABLE OF gs_alv_header,
BEGIN OF gs_alv_item,
repname TYPE sy-repid,
dynnr TYPE sy-dynnr,
versno TYPE vrsd-versno,
line_no TYPE rsrow,
text TYPE text255,
hit TYPE xfeld,
cell_color TYPE lvc_t_scol,
END OF gs_alv_item,
gt_alv_item LIKE STANDARD TABLE OF gs_alv_item.
CONSTANTS:
gc_x TYPE xfeld VALUE 'X'.
METHODS:
add_to_hitlist
IMPORTING
iv_report TYPE clike
iv_dynpro TYPE clike OPTIONAL
iv_source_line TYPE clike
iv_tabix TYPE sy-tabix
iv_hit TYPE xfeld
iv_versno TYPE vrsd-versno,
call_abap_editor
IMPORTING
is_alv_item LIKE gs_alv_item,
call_screen_painter
IMPORTING
is_alv_item LIKE gs_alv_item,
display,
display_abap_version
IMPORTING
is_alv_item LIKE gs_alv_item,
display_screen_painter_version
IMPORTING
is_alv_item LIKE gs_alv_item,
display_version_management
IMPORTING
is_alv_header LIKE gs_alv_header,
get_alv_instance,
get_dynpro_flow_logic
IMPORTING
iv_report TYPE clike
iv_dynpro TYPE clike
RETURNING value(rt_dflow) TYPE abaptxt255_tab,
get_hit_set
IMPORTING
iv_report TYPE clike
iv_dynpro TYPE clike OPTIONAL
it_abap TYPE abaptxt255_tab
iv_tabix TYPE sy-tabix
iv_versno TYPE vrsd-versno,
get_version_numbers
IMPORTING
iv_report TYPE clike
iv_dynpro TYPE clike OPTIONAL
RETURNING value(rt_vrsd) LIKE gt_vrsd,
get_dynpros,
get_source_names,
get_source_by_version
IMPORTING
iv_report TYPE clike
iv_dynpro TYPE clike OPTIONAL
iv_versno TYPE vrsd-versno
RETURNING value(rt_abap) TYPE abaptxt255_tab,
get_report_names,
get_function_names,
get_class_names,
get_interface_names,
get_includes,
search_abap_source RAISING lcx_scan_exceptions,
search_dynpro_source RAISING lcx_scan_exceptions,
search_source
IMPORTING
it_source TYPE abaptxt255_tab
iv_report TYPE clike
iv_dynpro TYPE clike OPTIONAL
RAISING lcx_scan_exceptions,
set_alv_attributes,
on_link_click
FOR EVENT link_click OF cl_salv_events_hierseq
IMPORTING
sender
level
row
column.
ENDCLASS. "lcl_source_scan DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_source_scan IMPLEMENTATION
*----------------------------------------------------------------------*
* ABAP source scanner
*----------------------------------------------------------------------*
CLASS lcl_source_scan IMPLEMENTATION.
METHOD display_screen_painter_version.
DATA:
lv_object_name TYPE versobjnam,
ls_infolna TYPE vrsinfolna,
ls_infolnb TYPE vrsinfolnb,
ls_vrsd LIKE LINE OF gt_vrsd,
ls_object_name TYPE ty_ls_objname.
ls_object_name-report = is_alv_item-repname.
ls_object_name-dynnr = is_alv_item-dynnr.
lv_object_name = ls_object_name.
READ TABLE gt_vrsd WITH TABLE KEY objname = lv_object_name
versno = is_alv_item-versno
INTO ls_vrsd.
CHECK sy-subrc IS INITIAL.
ls_infolna = lv_object_name.
MOVE-CORRESPONDING ls_vrsd TO ls_infolnb.
CALL FUNCTION 'RS_SCRP_SHOW_VERS'
EXPORTING
infolna = ls_infolna
infolnb = ls_infolnb
objname = lv_object_name
versno = is_alv_item-versno
EXCEPTIONS
no_version = 1
cancelled = 2
OTHERS = 3.
ENDMETHOD. "display_screen_painter_version
METHOD display_abap_version.
DATA:
lt_trdir TYPE STANDARD TABLE OF trdir,
lv_object_name TYPE versobjnam,
lv_title TYPE sy-title,
lt_abap TYPE abaptxt255_tab.
lv_object_name = is_alv_item-repname.
* Display report version
CALL FUNCTION 'SVRS_GET_REPS_FROM_OBJECT'
EXPORTING
object_name = lv_object_name
object_type = 'REPS'
versno = is_alv_item-versno
iv_no_release_transformation = gc_x
TABLES
repos_tab = lt_abap
trdir_tab = lt_trdir
EXCEPTIONS
no_version = 1
OTHERS = 2.
CHECK sy-subrc IS INITIAL.
CONCATENATE 'Programm:'(004)
is_alv_item-repname
'Version'(005)
is_alv_item-versno
INTO lv_title SEPARATED BY space.
EDITOR-CALL FOR lt_abap TITLE lv_title DISPLAY-MODE.
ENDMETHOD. "display_abap_version
METHOD call_screen_painter.
CALL FUNCTION 'RS_SCRP'
EXPORTING
abl_line = is_alv_item-line_no
dynnr = is_alv_item-dynnr
progname = is_alv_item-repname
wanted_mode = 'SHOW'
EXCEPTIONS
already_exists = 1
not_found = 2
not_executed = 3
OTHERS = 4.
ENDMETHOD. "call_screen_painter
METHOD call_abap_editor.
CALL FUNCTION 'EDITOR_PROGRAM'
EXPORTING
appid = 'PG'
display = gc_x
program = is_alv_item-repname
line = is_alv_item-line_no
topline = is_alv_item-line_no
EXCEPTIONS
OTHERS = 1.
ENDMETHOD. "call_abap_editor
METHOD display_version_management.
IF is_alv_header-dynnr IS INITIAL.
* call version management for programs
CALL FUNCTION 'RS_PROGRAM_VERSIONS'
EXPORTING
progname = is_alv_header-repname
EXCEPTIONS
function_include = 1
OTHERS = 2.
ELSE.
CALL FUNCTION 'RS_SCRP_VERSION'
EXPORTING
dynnr = is_alv_header-dynnr
progname = is_alv_header-repname
no_update = gc_x.
ENDIF.
ENDMETHOD. "display_version_management
METHOD constructor.
DATA:
ls_restrict TYPE sscr_restrict,
ls_opt_list TYPE sscr_opt_list,
ls_association TYPE sscr_ass.
ls_opt_list-name = 'RESTRICT'.
ls_opt_list-options-cp = gc_x.
ls_opt_list-options-eq = gc_x.
APPEND ls_opt_list TO ls_restrict-opt_list_tab.
ls_association-kind = 'S'.
ls_association-name = 'SSTRING'.
ls_association-sg_main = 'I'.
ls_association-op_main = ls_association-op_addy = 'RESTRICT'.
APPEND ls_association TO ls_restrict-ass_tab.
CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
EXPORTING
program = sy-repid
restriction = ls_restrict
EXCEPTIONS
too_late = 1
repeated = 2
selopt_without_options = 3
selopt_without_signs = 4
invalid_sign = 5
empty_option_list = 6
invalid_kind = 7
repeated_kind_a = 8
OTHERS = 9.
ENDMETHOD. "constructor
METHOD get_dynpro_flow_logic.
DATA: ls_dhead TYPE d020s,
lt_dfield TYPE STANDARD TABLE OF d021s,
lt_dflow TYPE STANDARD TABLE OF d022s,
lt_dmatch TYPE STANDARD TABLE OF d023s,
BEGIN OF ls_dynp_id,
prog TYPE d020s-prog,
dnum TYPE d020s-dnum,
END OF ls_dynp_id.
ls_dynp_id-prog = iv_report.
ls_dynp_id-dnum = iv_dynpro.
IMPORT DYNPRO ls_dhead lt_dfield lt_dflow lt_dmatch ID ls_dynp_id.
rt_dflow = lt_dflow.
ENDMETHOD. "get_dynpro_flow_logic
METHOD on_link_click.
DATA:
ls_alv_header LIKE LINE OF gt_alv_header,
ls_alv_item LIKE LINE OF gt_alv_item.
CASE level.
WHEN '1'.
READ TABLE gt_alv_header INDEX row INTO ls_alv_header.
CHECK sy-subrc IS INITIAL.
display_version_management( ls_alv_header ).
WHEN '2'.
READ TABLE gt_alv_item INDEX row INTO ls_alv_item.
CHECK sy-subrc IS INITIAL.
IF ls_alv_item-dynnr IS INITIAL.
IF ls_alv_item-versno IS INITIAL.
call_abap_editor( ls_alv_item ).
ELSE.
display_abap_version( ls_alv_item ).
ENDIF.
SET PARAMETER ID 'RID' FIELD sy-repid.
ELSE.
* Call screen painter
IF ls_alv_item-versno IS INITIAL.
call_screen_painter( ls_alv_item ).
ELSE.
display_screen_painter_version( ls_alv_item ).
ENDIF.
ENDIF.
ENDCASE.
ENDMETHOD. "on_link_click
METHOD set_alv_attributes.
DATA:
lo_layout TYPE REF TO cl_salv_layout,
lo_events TYPE REF TO cl_salv_events_hierseq,
lo_functions TYPE REF TO cl_salv_functions_list,
lo_level TYPE REF TO cl_salv_hierseq_level,
lo_column TYPE REF TO cl_salv_column_hierseq,
lo_columns TYPE REF TO cl_salv_columns_hierseq,
lt_columns TYPE salv_t_column_ref,
ls_columns LIKE LINE OF lt_columns,
lo_settings TYPE REF TO cl_salv_display_settings,
lv_title TYPE lvc_title,
lv_hits TYPE lvc_title,
ls_color TYPE lvc_s_colo,
ls_layout TYPE salv_s_layout_key,
lt_functions TYPE salv_t_ui_func.
* Layout
ls_layout-report = sy-repid.
ls_layout-handle = 'SCAN'.
lo_layout = go_alv->get_layout( ).
lo_layout->set_key( ls_layout ).
lo_layout->set_save_restriction( ).
* Function keys/buttons
lo_functions = go_alv->get_functions( ).
lo_functions->set_all( gc_x ).
* exclude the following functions (column paging buttons)
lt_functions = lo_functions->get_functions( ).
TRY.
* lo_functions->remove_function( '&CRB' ).
* lo_functions->remove_function( '&CRL' ).
* lo_functions->remove_function( '&CRR' ).
* lo_functions->remove_function( '&CRE' ).
CATCH cx_salv_wrong_call
cx_salv_not_found.
ENDTRY.
* Display settings
lo_settings = go_alv->get_display_settings( ).
* Title
lv_hits = gv_hit_count.
SHIFT lv_hits LEFT DELETING LEADING space.
CONCATENATE lv_hits
'Treffer'(001)
INTO lv_hits SEPARATED BY space.
lv_title = 'Source Scan für String:'(002).
CONCATENATE lv_title
gv_sstring
INTO lv_title SEPARATED BY space.
CONCATENATE lv_title
lv_hits
INTO lv_title SEPARATED BY ' - '.
lo_settings->set_list_header( lv_title ).
* Event handling
lo_events = go_alv->get_event( ).
SET HANDLER on_link_click FOR lo_events.
* Field catalog
TRY.
* Field catalog/columns - header table
lo_columns = go_alv->get_columns( '1' ).
lt_columns = lo_columns->get( ).
TRY.
lo_columns->set_expand_column( 'EXPAND' ).
lo_level = go_alv->get_level( '1' ).
lo_level->set_items_expanded( gc_x ).
CATCH cx_salv_data_error.
ENDTRY.
LOOP AT lt_columns INTO ls_columns.
CASE ls_columns-columnname.
WHEN 'EXPAND'.
ls_columns-r_column->set_technical( ).
WHEN 'DYNNR'.
IF gv_dynp_found IS INITIAL.
ls_columns-r_column->set_technical( ).
ELSE.
ls_columns-r_column->set_output_length( '15' ).
ENDIF.
WHEN 'VERSNO'.
IF gv_vers_found IS INITIAL.
ls_columns-r_column->set_technical( ).
ELSE.
ls_columns-r_column->set_leading_zero( gc_x ).
ls_columns-r_column->set_output_length( '15' ).
TRY.
lo_column ?= ls_columns-r_column.
lo_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
CATCH cx_sy_move_cast_error.
ENDTRY.
ENDIF.
ENDCASE.
ENDLOOP.
* Field catalog/columns - item table
lo_columns = go_alv->get_columns( '2' ).
TRY.
lo_columns->set_color_column( 'CELL_COLOR' ).
CATCH cx_salv_data_error.
ENDTRY.
lt_columns = lo_columns->get( ).
LOOP AT lt_columns INTO ls_columns.
CASE ls_columns-columnname.
WHEN 'REPNAME'.
ls_columns-r_column->set_technical( ).
WHEN 'DYNNR'.
ls_columns-r_column->set_technical( ).
WHEN 'VERSNO'.
ls_columns-r_column->set_technical( ).
WHEN 'CELL_COLOR'.
ls_columns-r_column->set_technical( ).
WHEN 'HIT'.
ls_columns-r_column->set_technical( ).
WHEN 'LINE_NO'.
ls_color-col = '4'.
TRY.
lo_column ?= ls_columns-r_column.
lo_column->set_color( ls_color ).
lo_column->set_leading_zero( gc_x ).
CATCH cx_sy_move_cast_error.
ENDTRY.
WHEN 'TEXT'.
TRY.
lo_column ?= ls_columns-r_column.
lo_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
CATCH cx_sy_move_cast_error.
ENDTRY.
ENDCASE.
ENDLOOP.
CATCH cx_salv_not_found.
ENDTRY.
ENDMETHOD. "set_alv_attributes
METHOD get_alv_instance.
DATA:
lt_alv_bind TYPE salv_t_hierseq_binding,
ls_alv_bind LIKE LINE OF lt_alv_bind.
ls_alv_bind-master = ls_alv_bind-slave = 'REPNAME'.
APPEND ls_alv_bind TO lt_alv_bind.
ls_alv_bind-master = ls_alv_bind-slave = 'DYNNR'.
APPEND ls_alv_bind TO lt_alv_bind.
ls_alv_bind-master = ls_alv_bind-slave = 'VERSNO'.
APPEND ls_alv_bind TO lt_alv_bind.
TRY.
CALL METHOD cl_salv_hierseq_table=>factory
EXPORTING
t_binding_level1_level2 = lt_alv_bind
IMPORTING
r_hierseq = go_alv
CHANGING
t_table_level1 = gt_alv_header
t_table_level2 = gt_alv_item.
CATCH cx_salv_data_error.
CATCH cx_salv_not_found.
ENDTRY.
ENDMETHOD. "get_alv_instance
METHOD f4_repname.
CALL FUNCTION 'REPOSITORY_INFO_SYSTEM_F4'
EXPORTING
object_type = 'PROG'
object_name = cv_repname
suppress_selection = 'X'
IMPORTING
object_name_selected = cv_repname
EXCEPTIONS
cancel = 1.
ENDMETHOD. "f4_repname
METHOD f4_function_group.
DATA:
lv_fname TYPE dynfnam.
lv_fname = iv_group_name.
CALL FUNCTION 'RS_HELP_HANDLING'
EXPORTING
dynpfield = lv_fname
dynpname = sy-dynnr
object = 'FG '
progname = sy-repid
suppress_selection_screen = 'X'.
ENDMETHOD. "f4_function_group
METHOD f4_class.
CALL FUNCTION 'F4_DD_ALLTYPES'
EXPORTING
object = cv_class_name
suppress_selection = gc_x
display_only = space
only_types_for_clifs = gc_x
IMPORTING
result = cv_class_name.
ENDMETHOD. "f4_class
METHOD display.
DATA: text TYPE c LENGTH 150.
DATA: lv_hits TYPE c LENGTH 16.
IF gv_hit_count IS INITIAL.
MESSAGE s326 WITH gv_sstring.
RETURN.
ENDIF.
IF sy-batch IS INITIAL.
lv_hits = gv_hit_count.
CONCATENATE 'DISPLAY' lv_hits ' HITS...' INTO text.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = text.
ENDIF.
SORT gt_alv_item BY repname dynnr versno line_no hit DESCENDING.
DELETE ADJACENT DUPLICATES FROM gt_alv_item COMPARING repname dynnr versno line_no.
get_alv_instance( ).
CHECK go_alv IS NOT INITIAL.
set_alv_attributes( ).
go_alv->display( ).
ENDMETHOD. "display
METHOD add_to_hitlist.
DATA:
ls_col LIKE LINE OF gs_alv_item-cell_color.
gs_alv_item-repname = iv_report.
gs_alv_item-dynnr = iv_dynpro.
gs_alv_item-line_no = iv_tabix.
gs_alv_item-versno = iv_versno.
gs_alv_item-text = iv_source_line.
IF iv_hit IS NOT INITIAL.
gs_alv_item-hit = gc_x.
ADD 1 TO gv_hit_count.
ls_col-fname = 'TEXT'.
ls_col-color-col = '5'.
APPEND ls_col TO gs_alv_item-cell_color.
ENDIF.
APPEND gs_alv_item TO gt_alv_item.
CLEAR gs_alv_item.
ENDMETHOD. "add_to_hitlist
METHOD get_hit_set.
DATA: lv_end TYPE i,
lv_start TYPE i,
lv_xtabix TYPE sy-tabix,
lv_hitline TYPE xfeld.
FIELD-SYMBOLS:
<lv_abap> TYPE any.
lv_start = iv_tabix - plusminu .
lv_end = iv_tabix + plusminu.
IF lv_start < 1.
lv_start = 1.
ENDIF.
WHILE lv_start <= lv_end.
READ TABLE it_abap ASSIGNING <lv_abap> INDEX lv_start.
IF sy-subrc IS NOT INITIAL.
EXIT.
ENDIF.
lv_xtabix = sy-tabix.
IF lv_start = iv_tabix.
lv_hitline = gc_x.
ELSE.
CLEAR lv_hitline.
ENDIF.
ADD 1 TO lv_start.
IF comment IS NOT INITIAL.
IF modiass IS INITIAL.
IF <lv_abap>(1) = '*'
OR <lv_abap>(1) = '"'.
CONTINUE.
ENDIF.
ELSE.
IF <lv_abap>(1) = '*'.
IF <lv_abap>(2) = '*{' OR <lv_abap>(2) = '*}'.
ELSE.
CONTINUE.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
CALL METHOD add_to_hitlist
EXPORTING
iv_report = iv_report
iv_dynpro = iv_dynpro
iv_source_line = <lv_abap>
iv_tabix = lv_xtabix
iv_hit = lv_hitline
iv_versno = iv_versno.
ENDWHILE.
ENDMETHOD. "get_hit_set
METHOD get_source_by_version.
DATA:
lv_object_name TYPE versobjnam,
ls_object_name TYPE ty_ls_objname,
lt_trdir TYPE STANDARD TABLE OF trdir,
lt_d022s TYPE STANDARD TABLE OF d022s.
IF iv_dynpro IS INITIAL.
lv_object_name = iv_report.
CALL FUNCTION 'SVRS_GET_REPS_FROM_OBJECT'
EXPORTING
object_name = lv_object_name
object_type = 'REPS'
versno = iv_versno
iv_no_release_transformation = 'X'
TABLES
repos_tab = rt_abap
trdir_tab = lt_trdir
EXCEPTIONS
no_version = 1
OTHERS = 2.
ELSE.
ls_object_name-report = iv_report.
ls_object_name-dynnr = iv_dynpro.
lv_object_name = ls_object_name.
CALL FUNCTION 'SVRS_GET_VERSION_DYNP_40'
EXPORTING
object_name = lv_object_name
versno = iv_versno
TABLES
d022s_tab = lt_d022s
EXCEPTIONS
no_version = 01
OTHERS = 02.
CHECK sy-subrc IS INITIAL AND lt_d022s IS NOT INITIAL.
APPEND LINES OF lt_d022s TO rt_abap.
ENDIF.
ENDMETHOD. "get_source_by_version
METHOD get_version_numbers.
DATA:
ls_objname TYPE ty_ls_objname,
lv_objtype TYPE vrsd-objtype,
lv_objname TYPE versobjnam,
lv_versno TYPE versno,
lt_vrsn TYPE STANDARD TABLE OF vrsn,
lt_vrsd TYPE STANDARD TABLE OF vrsd.
ls_objname-report = iv_report.
ls_objname-dynnr = iv_dynpro.
lv_objname = ls_objname.
IF iv_dynpro IS INITIAL.
lv_objtype = 'REPS'.
ELSE.
lv_objtype = 'DYNP'.
ENDIF.
CALL FUNCTION 'SVRS_GET_VERSION_DIRECTORY_46'
EXPORTING
objname = lv_objname
objtype = lv_objtype
TABLES
lversno_list = lt_vrsn
version_list = lt_vrsd
EXCEPTIONS
no_entry = 1
communication_failure_ = 2
system_failure = 3
OTHERS = 4.
CHECK sy-subrc IS INITIAL .
SORT lt_vrsd BY objname versno.
DELETE ADJACENT DUPLICATES FROM lt_vrsd COMPARING objname versno.
rt_vrsd = lt_vrsd.
DELETE TABLE rt_vrsd WITH TABLE KEY objname = lv_objname
versno = lv_versno.
SORT rt_vrsd.
CHECK iv_dynpro IS NOT INITIAL.
* For dynpros we need to save the version information for the version display
* this is not required for source code
INSERT LINES OF rt_vrsd INTO TABLE gt_vrsd.
ENDMETHOD. "get_version_Numbers
METHOD search_abap_source.
DATA:
lt_abap TYPE abaptxt255_tab,
percentage TYPE i,
old_percentage TYPE i VALUE -1,
text TYPE c LENGTH 150.
FIELD-SYMBOLS:
<lv_obj> TYPE tadir-obj_name.
LOOP AT gt_object ASSIGNING <lv_obj>.
IF sy-batch IS INITIAL.
percentage = sy-tabix * 100 / lines( gt_object ).
* text = |SEARCH ABAP SOURCES ({ sy-tabix }/{ lines( gt_object ) })...|.
text ='SEARCH ABAP SOURCES ...'.
IF old_percentage <> percentage.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = percentage
text = text.
old_percentage = percentage.
ENDIF.
ENDIF.
READ REPORT <lv_obj> INTO lt_abap.
IF sy-subrc IS NOT INITIAL.
CONTINUE.
ENDIF.
search_source( it_source = lt_abap
iv_report = <lv_obj> ).
ENDLOOP.
FREE gt_object.
ENDMETHOD. "search_abap_source
METHOD search_source.
DATA:
lt_source TYPE abaptxt255_tab,
lt_source_vers TYPE abaptxt255_tab,
lv_string_found TYPE xfeld,
lt_vrsd TYPE STANDARD TABLE OF vrsd,
ls_vrsd LIKE LINE OF lt_vrsd,
lv_number TYPE i,
lv_index TYPE i,
lt_results TYPE match_result_tab,
ls_result LIKE LINE OF lt_results,
ls_sstring LIKE LINE OF sstring.
lt_source = it_source.
IF p_vers IS INITIAL.
lv_number = 1.
ELSE.
lt_vrsd = get_version_numbers( iv_report = iv_report
iv_dynpro = iv_dynpro ).
lv_number = lines( lt_vrsd ) + 1.
ENDIF.
DO lv_number TIMES.
CLEAR lv_string_found.
IF sy-index = 1.
CLEAR ls_vrsd.
ELSE.
lv_index = sy-index - 1.
READ TABLE lt_vrsd INDEX lv_index INTO ls_vrsd.
CHECK sy-subrc IS INITIAL.
lt_source_vers = get_source_by_version( iv_report = iv_report
iv_dynpro = iv_dynpro
iv_versno = ls_vrsd-versno ).
IF lt_source_vers IS NOT INITIAL.
lt_source = lt_source_vers.
ELSE.
CONTINUE.
ENDIF.
ENDIF.
LOOP AT sstring INTO ls_sstring.
REFRESH lt_results.
IF p_regex IS INITIAL.
FIND ALL OCCURRENCES OF ls_sstring-low IN TABLE lt_source
IN CHARACTER MODE
IGNORING CASE
RESULTS lt_results.
ELSE.
TRY.
FIND ALL OCCURRENCES OF REGEX ls_sstring-low IN TABLE lt_source
IN CHARACTER MODE
IGNORING CASE
RESULTS lt_results.
CATCH cx_sy_regex.
* invalid regex -> stop processing
MESSAGE s384 WITH ls_sstring-low DISPLAY LIKE 'E'.
RAISE EXCEPTION TYPE lcx_scan_exceptions.
ENDTRY.
ENDIF.
CHECK lt_results IS NOT INITIAL.
lv_string_found = gc_x.
SORT lt_results BY line.
DELETE ADJACENT DUPLICATES FROM lt_results COMPARING line.
LOOP AT lt_results INTO ls_result.
CALL METHOD get_hit_set
EXPORTING
iv_report = iv_report
iv_dynpro = iv_dynpro
it_abap = lt_source
iv_tabix = ls_result-line
iv_versno = ls_vrsd-versno.
ENDLOOP.
ENDLOOP.
IF lv_string_found IS NOT INITIAL.
* Add ALV header entry
CLEAR gs_alv_header.
gs_alv_header-repname = iv_report.
gs_alv_header-dynnr = iv_dynpro.
gs_alv_header-versno = ls_vrsd-versno.
APPEND gs_alv_header TO gt_alv_header.
IF iv_dynpro IS NOT INITIAL.
gv_dynp_found = gc_x.
ENDIF.
IF ls_vrsd-versno IS NOT INITIAL.
gv_vers_found = gc_x.
ENDIF.
ENDIF.
ENDDO.
ENDMETHOD. "search_source
METHOD search_dynpro_source.
DATA:
lt_dflow TYPE abaptxt255_tab.
FIELD-SYMBOLS:
<ls_dynpro> LIKE LINE OF gt_dynpro.
IF sy-batch IS INITIAL.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = 'SEARCH DYNPRO SOURCES...'.
ENDIF.
LOOP AT gt_dynpro ASSIGNING <ls_dynpro>.
REFRESH lt_dflow.
lt_dflow = get_dynpro_flow_logic( iv_report = <ls_dynpro>-repname
iv_dynpro = <ls_dynpro>-dynnr ).
CHECK lt_dflow IS NOT INITIAL.
search_source( it_source = lt_dflow
iv_report = <ls_dynpro>-repname
iv_dynpro = <ls_dynpro>-dynnr ).
ENDLOOP.
ENDMETHOD. "search_dynpro_source
METHOD get_dynpros.
CHECK gt_object IS NOT INITIAL.
SELECT prog dnum INTO TABLE gt_dynpro
FROM d020s FOR ALL ENTRIES IN gt_object
WHERE prog = gt_object-table_line
AND dnum IN dynnr.
ENDMETHOD. "get_dynpros
METHOD get_includes.
DATA:
lt_inc TYPE STANDARD TABLE OF tadir-obj_name,
lt_inc_tmp LIKE lt_inc,
lv_program TYPE sy-repid,
lv_obj TYPE tadir-obj_name,
l_inc TYPE tadir-obj_name,
class_name TYPE seoclsname,
method_includes TYPE seop_methods_w_include.
FIELD-SYMBOLS:
<ls_method> LIKE LINE OF method_includes. "note 1695054 (3)
CHECK inclu IS NOT INITIAL.
LOOP AT gt_object INTO lv_obj.
IF lv_obj+30(2) = 'CP'. "Class Pool
DELETE gt_object INDEX sy-tabix.
class_name = lv_obj(30).
TRANSLATE class_name USING '= '.
cl_oo_classname_service=>get_all_method_includes(
EXPORTING clsname = class_name
RECEIVING result = method_includes
EXCEPTIONS class_not_existing = 1 ).
IF sy-subrc = 0.
LOOP AT method_includes ASSIGNING <ls_method>. "note 1695054 (3)
l_inc = <ls_method>-incname.
APPEND l_inc TO lt_inc.
ENDLOOP.
l_inc = cl_oo_classname_service=>get_ccdef_name( class_name ).
APPEND l_inc TO lt_inc.
l_inc = cl_oo_classname_service=>get_ccmac_name( class_name ).
APPEND l_inc TO lt_inc.
l_inc = cl_oo_classname_service=>get_ccimp_name( class_name ).
APPEND l_inc TO lt_inc.
l_inc = cl_oo_classname_service=>get_ccau_name( class_name ).
APPEND l_inc TO lt_inc.
l_inc = cl_oo_classname_service=>get_pubsec_name( class_name ).
APPEND l_inc TO lt_inc.
l_inc = cl_oo_classname_service=>get_prosec_name( class_name ).
APPEND l_inc TO lt_inc.
l_inc = cl_oo_classname_service=>get_prisec_name( class_name ).
APPEND l_inc TO lt_inc.
ENDIF.
ELSEIF lv_obj+30(2) = 'IP'. "Interface Pool
DELETE gt_object INDEX sy-tabix.
lv_obj+31(1) = 'U'.
APPEND lv_obj TO lt_inc.
ENDIF.
REFRESH lt_inc_tmp.
lv_program = lv_obj.
CALL FUNCTION 'RS_GET_ALL_INCLUDES'
EXPORTING
program = lv_program
TABLES
includetab = lt_inc_tmp
EXCEPTIONS
not_existent = 1
no_program = 2
OTHERS = 3.
CHECK sy-subrc IS INITIAL.
APPEND LINES OF lt_inc_tmp TO lt_inc.
ENDLOOP.
SORT lt_inc.
DELETE ADJACENT DUPLICATES FROM lt_inc.
APPEND LINES OF lt_inc TO gt_object.
ENDMETHOD. "get_includes
METHOD get_report_names.
SELECT obj_name INTO TABLE gt_object
FROM tadir
WHERE pgmid = 'R3TR'
AND object = 'PROG'
AND devclass IN devclass. "#EC CI_GENBUFF
ENDMETHOD. "get_report_names
METHOD get_function_names.
DATA:
lt_obj TYPE STANDARD TABLE OF tadir-obj_name,
lv_obj TYPE tadir-obj_name,
lv_fgroup TYPE rs38l-area,
lv_program TYPE progname.
FIELD-SYMBOLS:
<lv_obj> LIKE LINE OF lt_obj.
SELECT obj_name INTO TABLE lt_obj
FROM tadir
WHERE pgmid = 'R3TR'
AND object = 'FUGR'
AND devclass IN devclass
AND obj_name IN funcgrp. "#EC CI_GENBUFF
LOOP AT lt_obj ASSIGNING <lv_obj>.
lv_fgroup = <lv_obj>.
CLEAR lv_program.
CALL FUNCTION 'FUNCTION_INCLUDE_CONCATENATE'
CHANGING
program = lv_program
complete_area = lv_fgroup
EXCEPTIONS
not_enough_input = 1
no_function_pool = 2
delimiter_wrong_position = 3
OTHERS = 4.
CHECK sy-subrc IS INITIAL AND lv_program IS NOT INITIAL.
lv_obj = lv_program.
APPEND lv_obj TO gt_object.
ENDLOOP.
ENDMETHOD. "get_function_names
METHOD get_class_names.
DATA:
lt_obj TYPE STANDARD TABLE OF tadir-obj_name,
ls_obj TYPE seoclsname,
l_classpool TYPE tadir-obj_name.
SELECT obj_name INTO TABLE lt_obj
FROM tadir
WHERE pgmid = 'R3TR'
AND object = 'CLAS'
AND devclass IN devclass
AND obj_name IN p_class. "#EC CI_GENBUFF
LOOP AT lt_obj INTO ls_obj.
l_classpool = cl_oo_classname_service=>get_classpool_name( ls_obj ).
APPEND l_classpool TO gt_object.
ENDLOOP.
ENDMETHOD. "get_class_names
METHOD get_interface_names.
DATA lt_obj TYPE STANDARD TABLE OF tadir-obj_name.
DATA ls_obj TYPE seoclsname.
DATA l_interface TYPE tadir-obj_name.
SELECT obj_name INTO TABLE lt_obj
FROM tadir
WHERE pgmid = 'R3TR'
AND object = 'INTF'
AND devclass IN devclass
AND obj_name IN p_class. "#EC CI_GENBUFF
LOOP AT lt_obj INTO ls_obj.
l_interface = cl_oo_classname_service=>get_interfacepool_name( ls_obj ).
APPEND l_interface TO gt_object.
ENDLOOP.
ENDMETHOD.
METHOD get_source_names.
IF repname[] IS NOT INITIAL OR
cnam[] IS NOT INITIAL OR
unam[] IS NOT INITIAL OR
subc[] IS NOT INITIAL OR
appl[] IS NOT INITIAL.
SELECT name APPENDING TABLE gt_object
FROM trdir
WHERE name IN repname
AND cnam IN cnam
AND unam IN unam
AND subc IN subc
AND appl IN appl.
ENDIF.
IF devclass[] IS NOT INITIAL.
get_report_names( ).
get_function_names( ).
get_class_names( ).
get_interface_names( ).
ENDIF.
IF funcgrp[] IS NOT INITIAL.
get_function_names( ).
ENDIF.
IF p_class[] IS NOT INITIAL.
get_class_names( ).
get_interface_names( ).
ENDIF.
IF rb_code IS INITIAL.
get_dynpros( ).
ENDIF.
ENDMETHOD. "get_source_names
METHOD start.
DATA:
ls_sstring LIKE LINE OF sstring[].
IF sstring[] IS INITIAL AND modiass IS INITIAL.
* Please specifiy a search term
MESSAGE s385 DISPLAY LIKE 'E'.
RETURN.
ENDIF.
IF NOT modiass IS INITIAL.
REFRESH sstring.
ls_sstring-sign = 'I'.
ls_sstring-option = 'EQ'.
ls_sstring-low = '^\*\{'.
APPEND ls_sstring TO sstring.
ls_sstring-low = '^\*\}'.
APPEND ls_sstring TO sstring.
p_regex = gc_x.
ENDIF.
READ TABLE sstring[] INTO ls_sstring INDEX 1.
IF lines( sstring[] ) = 1.
gv_sstring = ls_sstring-low.
ELSE.
CONCATENATE ls_sstring-low
'...'
INTO gv_sstring.
ENDIF.
IF sy-batch IS INITIAL.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = 'GET INCLUDES...'.
ENDIF.
get_source_names( ).
get_includes( ).
IF rb_dyn IS INITIAL.
TRY.
search_abap_source( ).
CATCH lcx_scan_exceptions.
RETURN.
ENDTRY.
ENDIF.
IF rb_code IS INITIAL.
TRY.
search_dynpro_source( ).
CATCH lcx_scan_exceptions.
RETURN.
ENDTRY.
ENDIF.
* DELETE gt_alv_item WHERE hit NE 'X'.
LOOP AT GT_OUTPUT INTO GS_OUTPUT.
LOOP AT gt_alv_item INTO gs_alv_item WHERE text CS GS_OUTPUT-TDNAME.
READ TABLE GT_fm_name INTO GS_fm_name WITH KEY INCLUDE_PROGRAM_NAME = gs_alv_item-repname.
IF SY-SUBRC EQ 0.
GS_OUTPUT-FNAME = GS_fm_name-formname.
GS_OUTPUT-PROGNAME = GS_fm_name-INCLUDE_PROGRAM_NAME.
MODIFY GT_OUTPUT FROM GS_OUTPUT.
EXIT.
ENDIF.
ENDLOOP.
* READ TABLE gt_alv_item INTO gS_alv_item WITH KEY
ENDLOOP.
ENDMETHOD. "start
METHOD pbo.
DATA ls_screen TYPE screen.
CHECK modiass IS NOT INITIAL.
REFRESH sstring[].
CLEAR sstring.
CLEAR p_regex.
LOOP AT screen INTO ls_screen.
CHECK ls_screen-group1 = 'DSP'.
ls_screen-input = '0'.
MODIFY screen FROM ls_screen.
ENDLOOP.
ENDMETHOD. "pbo
ENDCLASS. "lcl_source_scan IMPLEMENTATION
INITIALIZATION.
CREATE OBJECT lo_sscan.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'MI1'.
SCREEN-INVISIBLE = '0'.
ELSEIF SCREEN-GROUP1 = 'DSP' OR SCREEN-GROUP1 = 'MI2'.
SCREEN-INVISIBLE = '1'.
ELSE.
SCREEN-INVISIBLE = '1'.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
* lo_sscan->pbo( ).
START-OF-SELECTION.
PERFORM AUTH_CHECK.
PERFORM GET_FM.
PERFORM GET_TEXT.
PERFORM SHOW_ALV.
*&---------------------------------------------------------------------*
*& Form GET_FM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_FM .
TYPES:BEGIN OF TY_STXFADM.
INCLUDE STRUCTURE STXFADM.
TYPES:PNAME TYPE TFDIR-PNAME,
END OF TY_STXFADM.
DATA:LT_STXFADM TYPE TABLE OF TY_STXFADM,
LS_STXFADM LIKE LINE OF LT_STXFADM.
DATA:LV_STR1 TYPE STRING,
LV_STR2 TYPE STRING.
DATA:LT_TFDIR TYPE TABLE OF TFDIR,
LS_TFDIR LIKE LINE OF LT_TFDIR.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE LT_STXFADM
FROM STXFADM
WHERE FIRSTUSER NE 'SAP'
AND LASTUSER NE 'SAP'.
LOOP AT LT_STXFADM INTO LS_STXFADM.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = LS_STXFADM-formname
IMPORTING
fm_name = GS_fm_name-rs38l_fnam
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc EQ 0.
APPEND GS_fm_name TO GT_fm_name_TEMP.
ENDIF.
ENDLOOP.
IF GT_fm_name_TEMP IS NOT INITIAL.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE LT_TFDIR
FROM TFDIR
FOR ALL ENTRIES IN GT_fm_name_TEMP
WHERE FUNCNAME EQ GT_fm_name_TEMP-rs38l_fnam.
IF SY-SUBRC EQ 0.
SORT LT_TFDIR BY FUNCNAME.
LOOP AT GT_fm_name_TEMP INTO GS_fm_name.
READ TABLE LT_TFDIR INTO LS_TFDIR WITH KEY FUNCNAME = GS_fm_name-rs38l_fnam BINARY SEARCH .
IF SY-SUBRC EQ 0.
SPLIT LS_TFDIR-PNAME at 'SAP' INTO LV_STR1 LV_STR2.
CONCATENATE LV_STR1 LV_STR2 'F01' INTO GS_fm_name-INCLUDE_PROGRAM_NAME.
GS_fm_name-formname = LS_STXFADM-formname.
APPEND GS_fm_name TO GT_fm_name .
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDFORM. " GET_FM
*&---------------------------------------------------------------------*
*& Form GET_TEXT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_TEXT .
DATA:LS_DATA TYPE REF TO DATA.
FIELD-SYMBOLS: <LT_DATA> TYPE ANY TABLE.
* <L_DATA> TYPE STYPE_TOTALS_FLAT.
data:LT_RANGE_SSTRING TYPE RANGE OF text255,
LS_RANGE_SSTRING LIKE LINE OF LT_RANGE_SSTRING,
LT_RANGE_REPNAME TYPE RANGE OF PROGNAME,
LS_RANGE_REPNAME LIKE LINE OF LT_RANGE_REPNAME.
LS_RANGE_SSTRING-SIGN = 'I'.
LS_RANGE_SSTRING-OPTION = 'EQ'.
LS_RANGE_SSTRING-LOW = 'PERFORM %MOVE USING %TEXTKEY-NAME'.
APPEND LS_RANGE_SSTRING TO sstring.
SELECT *
INTO TABLE LT_STXH
FROM STXH
WHERE TDFUSER NE 'SAP*'
AND TDLUSER NE 'SAP*'.
LOOP AT GT_fm_name INTO GS_fm_name.
LS_RANGE_REPNAME-SIGN = 'I'.
LS_RANGE_REPNAME-OPTION = 'EQ'.
LS_RANGE_REPNAME-LOW = GS_fm_name-INCLUDE_PROGRAM_NAME.
APPEND LS_RANGE_REPNAME TO REPNAME.
CLEAR:LS_RANGE_REPNAME.
ENDLOOP.
SORT REPNAME.
DELETE ADJACENT DUPLICATES FROM REPNAME.
LOOP AT LT_STXH INTO LS_STXH.
REFRESH T_LINES.
CALL FUNCTION 'READ_TEXT'
EXPORTING
* CLIENT = SY-MANDT
ID = LS_STXH-TDID
LANGUAGE = LS_STXH-TDSPRAS
NAME = LS_STXH-TDNAME
OBJECT = LS_STXH-TDOBJECT
TABLES
LINES = T_LINES
EXCEPTIONS
ID = 0
LANGUAGE = 0
NAME = 0
NOT_FOUND = 0
OBJECT = 0
REFERENCE_CHECK = 0
WRONG_ACCESS_TO_ARCHIVE = 0
OTHERS = 0 .
LOOP AT S_STTXT.
SEARCH T_LINES FOR S_STTXT-LOW.
IF SY-SUBRC EQ 0.
MOVE-CORRESPONDING LS_STXH TO GS_OUTPUT.
GS_OUTPUT-TDLINE = S_STTXT-LOW.
APPEND GS_OUTPUT TO GT_OUTPUT.
ENDIF.
ENDLOOP.
ENDLOOP.
AUTHORITY-CHECK OBJECT 'S_DEVELOP'
ID 'DEVCLASS' DUMMY
ID 'OBJTYPE' DUMMY
ID 'OBJNAME' DUMMY
ID 'P_GROUP' DUMMY
ID 'ACTVT' FIELD '03'.
IF sy-subrc <> 0.
MESSAGE e516(eu) WITH '03' 'S_DEVELOP'.
ENDIF.
lo_sscan->start( ).
ENDFORM. " GET_TEXT
*&---------------------------------------------------------------------*
*& Form SHOW_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SHOW_ALV .
TRY.
CL_SALV_TABLE=>FACTORY(
IMPORTING
R_SALV_TABLE = GO_ALV
CHANGING
T_TABLE = GT_OUTPUT ).
CATCH CX_SALV_MSG.
ENDTRY.
LR_FUNCTIONS = GO_ALV->GET_FUNCTIONS( ).
LR_FUNCTIONS->SET_ALL( 'X' ).
LR_FUNCTIONS->SET_DEFAULT( ABAP_TRUE ).
GR_DISPLAY = GO_ALV->GET_DISPLAY_SETTINGS( ).
GR_DISPLAY->SET_STRIPED_PATTERN( CL_SALV_DISPLAY_SETTINGS=>TRUE ).
DATA:lr_columns TYPE REF TO cl_salv_columns_table,
lr_column TYPE REF TO cl_salv_column_table.
lr_columns = go_alv->get_columns( ).
lr_columns->set_optimize( 'X' ).
TRY .
lr_column ?= lr_columns->get_column( 'FNAME' ).
lr_column->set_medium_text( 'Smartform Name' ).
CATCH cx_salv_not_found.
ENDTRY.
TRY .
lr_column ?= lr_columns->get_column( 'TDNAME' ).
lr_column->set_medium_text( 'Text Name' ).
CATCH cx_salv_not_found.
ENDTRY.
TRY .
lr_column ?= lr_columns->get_column( 'TDLINE' ).
lr_column->set_medium_text( 'Search Text' ).
CATCH cx_salv_not_found.
ENDTRY.
IF GO_ALV IS BOUND.
GR_FUNCTIONS = GO_ALV->GET_FUNCTIONS( ).
GR_FUNCTIONS->SET_ALL( ABAP_TRUE ).
GR_DISPLAY = GO_ALV->GET_DISPLAY_SETTINGS( ).
GR_DISPLAY->SET_LIST_HEADER( 'Display Smartforms Text' ).
GO_ALV->DISPLAY( ).
ENDIF.
ENDFORM. " SHOW_ALV
*&---------------------------------------------------------------------*
*& Form AUTH_CHECK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM AUTH_CHECK .
IF SY-UNAME NE 'MAT8'.
MESSAGE 'You can not use this program!' TYPE 'E' DISPLAY LIKE 'I'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM. " AUTH_CHECK
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2021-10-08 ABAP推送企业微信机器人2-markdown类型
2021-10-08 ABAP推送企业微信机器人1-文本类型