ABAP 搜索程序中定义的文本
REPORT zGetTextElements NO STANDARD PAGE HEADING LINE-SIZE 255.
*---搜索自定义程序中,定义的类似 'text-001' 中的文本内容.
*---支持SE38/FM/CLASS 的搜索和全量显示.
*---Search Text Elements - Text Symbols from customer program.
*--Author: lijq21@qq.com 20200911
TABLES : tadir, trdir.
TYPES: ttexttable LIKE textpool.
TYPES: BEGIN OF tprogram,
progname LIKE trdir-name,
subc LIKE trdir-subc,
END OF tprogram.
TYPES: BEGIN OF tfunction,
functionname LIKE tfdir-funcname,
functiongroup LIKE enlfdir-area,
END OF tfunction.
TYPES: BEGIN OF tclass,
clsname LIKE vseoclass-clsname,
textelementkey TYPE string,
END OF tclass.
DATA: iprograms TYPE STANDARD TABLE OF tprogram WITH HEADER LINE,
ifunctions TYPE STANDARD TABLE OF tfunction WITH HEADER LINE,
iclasses TYPE STANDARD TABLE OF tclass WITH HEADER LINE,
itexttable TYPE STANDARD TABLE OF ttexttable WITH HEADER LINE,
lv_progname LIKE trdir-name,
lv_functionname LIKE tfdir-funcname,
lv_clsname LIKE vseoclass-clsname.
DATA:BEGIN OF ls_output,
type LIKE tadir-object,
progname LIKE trdir-name,
key TYPE textpoolky,
entry TYPE char80, "textpooltx,
END OF ls_output,
lt_output LIKE TABLE OF ls_output.
*----------------------------------------------------------------------*
* Selection-screen:
*----------------------------------------------------------------------*
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text1.
SELECTION-SCREEN: BEGIN OF BLOCK b2 WITH FRAME TITLE text2.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:p_prog RADIOBUTTON GROUP g1 USER-COMMAND a DEFAULT 'X'.
SELECTION-SCREEN COMMENT 5(23) t_prog.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:p_fugr RADIOBUTTON GROUP g1.
SELECTION-SCREEN COMMENT 5(23) t_fugr.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:p_clas RADIOBUTTON GROUP g1.
SELECTION-SCREEN COMMENT 5(23) t_clas.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:p_all RADIOBUTTON GROUP g1.
SELECTION-SCREEN COMMENT 5(23) t_all.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN: END OF BLOCK b2.
SELECTION-SCREEN: BEGIN OF BLOCK b3 WITH FRAME TITLE text3.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(11) t_txt.
PARAMETERS: p_txt TYPE string LOWER CASE.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(15) t_empty.
PARAMETERS: p_alltxt AS CHECKBOX USER-COMMAND a.
SELECTION-SCREEN COMMENT 19(45) t_alltxt.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN: END OF BLOCK b3.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 7(11) t_lang.
PARAMETERS: p_lang LIKE sy-langu DEFAULT sy-langu.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN: END OF BLOCK b1.
*---------------------------------------------------------------------------------------
* initialisation
*---------------------------------------------------------------------------------------
INITIALIZATION.
t_prog = 'Program'.
t_fugr = 'Function'.
t_clas = 'Class'.
t_all = 'All Program'.
t_txt = 'Search text'.
t_alltxt = 'Display all Text Elements '.
t_lang = 'Language '.
AT SELECTION-SCREEN OUTPUT.
IF p_alltxt EQ 'X'.
CLEAR:p_txt.
LOOP AT SCREEN.
IF screen-name CP '*P_TXT*'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ELSE.
LOOP AT SCREEN.
IF screen-name CP '*P_TXT*'.
screen-input = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
*----------------------------------------------------------------------*
* START-OF-SELECTION.:
*----------------------------------------------------------------------*
START-OF-SELECTION.
IF p_alltxt IS INITIAL.
CHECK p_txt IS NOT INITIAL.
ENDIF.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = 100
text = 'Processing ...'.
CLEAR:lv_functionname,lv_clsname.
*---search Text Elements - Text Symbols
IF p_prog = 'X' OR p_all = 'X'.
SELECT progname
subc
APPENDING CORRESPONDING FIELDS OF TABLE iprograms
FROM reposrc AS a
INNER JOIN tadir AS b ON a~progname = b~obj_name
WHERE
( a~progname LIKE 'Z%'
OR a~progname LIKE 'Y%'
OR a~progname LIKE 'SAPMZ%'
OR a~progname LIKE 'SAPMY%')
AND ( a~subc = '1' OR a~subc = 'M' OR a~subc = 'S' )
AND b~pgmid = 'R3TR'
AND b~object = 'PROG'.
LOOP AT iprograms.
PERFORM gettextelements USING iprograms-progname lv_functionname lv_clsname.
ENDLOOP.
ENDIF.
IF p_fugr = 'X' OR p_all = 'X'.
CLEAR:lv_progname,lv_clsname.
SELECT a~funcname AS functionname
a~area AS functiongroup
INTO CORRESPONDING FIELDS OF TABLE ifunctions
FROM v_fdir AS a
INNER JOIN tlibv AS b ON a~area = b~area
INNER JOIN tadir AS c ON a~area = c~obj_name
WHERE
( a~funcname LIKE 'Z%'
OR a~funcname LIKE 'Y%' )
AND pgmid = 'R3TR'
AND object = 'FUGR'.
LOOP AT ifunctions.
SELECT SINGLE pname FROM tfdir
INTO lv_progname
WHERE funcname = ifunctions-functionname.
IF sy-subrc = 0.
PERFORM gettextelements USING lv_progname ifunctions-functionname lv_clsname.
ENDIF.
ENDLOOP.
ENDIF.
IF p_clas = 'X' OR p_all = 'X'.
CLEAR:lv_progname,lv_functionname.
SELECT obj_name AS clsname FROM tadir
INTO CORRESPONDING FIELDS OF TABLE iclasses
WHERE pgmid = 'R3TR'
AND object = 'CLAS'
AND ( obj_name LIKE 'Z%'
OR obj_name LIKE 'Y%' ).
LOOP AT iclasses.
PERFORM buildclasskeys USING iclasses.
lv_progname = iclasses-textelementkey.
PERFORM gettextelements USING lv_progname lv_functionname iclasses-clsname.
ENDLOOP.
ENDIF.
SORT lt_output BY type progname key.
* LOOP AT lt_output INTO ls_output.
* WRITE: / ls_output-type, 8 ls_output-progname, 50 ls_output-key , 60 ls_output-entry.
* ENDLOOP.
*--alv display search result.
PERFORM alv_cl_salv_table.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form GETTEXTELEMENTS
*&---------------------------------------------------------------------*
FORM gettextelements USING p_progname p_functionname p_clsname.
DATA: castprogramname(35).
CLEAR:castprogramname,ls_output.
REFRESH itexttable.
MOVE p_progname TO castprogramname.
READ TEXTPOOL castprogramname INTO itexttable LANGUAGE p_lang.
DELETE itexttable WHERE key = 'R'.
DELETE itexttable WHERE key = 'S'."Selection texts
* Text elements.
IF p_functionname IS INITIAL AND p_clsname IS INITIAL.
ls_output-type = 'PROG'.
ls_output-progname = p_progname.
ELSEIF p_functionname IS NOT INITIAL.
ls_output-type = 'FUGR'.
ls_output-progname = p_functionname.
ELSEIF p_clsname IS NOT INITIAL.
ls_output-type = 'CLAS'.
ls_output-progname = p_clsname.
ENDIF.
LOOP AT itexttable WHERE id = 'I'.
IF p_alltxt = 'X'.
MOVE itexttable-key TO ls_output-key.
MOVE itexttable-entry TO ls_output-entry.
APPEND ls_output TO lt_output.
ELSE.
IF itexttable-entry CS p_txt.
MOVE itexttable-key TO ls_output-key.
MOVE itexttable-entry TO ls_output-entry.
APPEND ls_output TO lt_output.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.
*------------------------------------------------------------------------
* buildClassKeys... Finds the title text of a class.
*------------------------------------------------------------------------
FORM buildclasskeys USING waclass TYPE tclass.
DATA:classnamelength TYPE i,
loops TYPE i.
classnamelength = strlen( waclass-clsname ).
* Text element key - length of text element key has to be 32 characters.
loops = 30 - classnamelength.
waclass-textelementkey = waclass-clsname.
DO loops TIMES.
CONCATENATE waclass-textelementkey '=' INTO waclass-textelementkey.
ENDDO.
CONCATENATE waclass-textelementkey 'CP' INTO waclass-textelementkey.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ALV_CL_SALV_TABLE
FORM alv_cl_salv_table .
DATA: salv_table TYPE REF TO cl_salv_table,
lr_columns TYPE REF TO cl_salv_columns,
lr_column TYPE REF TO cl_salv_column,
lv_column_text_s TYPE scrtext_s,
lv_column_text_m TYPE scrtext_m,
lv_column_text_l TYPE scrtext_l,
gr_display TYPE REF TO cl_salv_display_settings,
gr_functions TYPE REF TO cl_salv_functions.
TRY.
CALL METHOD cl_salv_table=>factory
EXPORTING
list_display = if_salv_c_bool_sap=>false
IMPORTING
r_salv_table = salv_table
CHANGING
t_table = lt_output.
CATCH cx_salv_msg.
ENDTRY.
gr_functions = salv_table->get_functions( ).
gr_functions->set_all( abap_true ).
gr_display = salv_table->get_display_settings( ).
gr_display->set_list_header('Text Elements : Search Result').
gr_display->set_striped_pattern('X').
salv_table->display( ).
ENDFORM.
文章来自于网络,如果侵犯了您的权益,请联系站长删除!