This program find the global variable usage in programs. For example SAPMV45A is a major consumer of global variables because of extensive use of statics and constants in its user exits.
The output can be sorted to find the highest usages.
REPORT zgb_gv_usage.
TYPES: BEGIN OF lty_progs,
repid TYPE syrepid,
size TYPE i,
msize TYPE i,
perct TYPE i,
END OF lty_progs.
DATA :ls_prog_name TYPE lty_progs.
DATA: lt_prog_name TYPE STANDARD TABLE OF lty_progs.
DATA: lt_global_sizes TYPE bcablim_global_tab.
SELECT obj_name
FROM tadir
INTO TABLE @DATA(lt_all_prog)
WHERE obj_name LIKE 'Z%'
AND object = 'PROG' OR object = 'REPS'.
IF sy-subrc EQ 0.
WRITE:/ lines( lt_all_prog ).
ENDIF.
LOOP AT lt_all_prog ASSIGNING FIELD-SYMBOL(<lfs_prog>).
CLEAR ls_prog_name.
TRY.
ls_prog_name-repid = cl_sedi_shared=>get_main_program( i_include = <lfs_prog>-obj_name i_dialog = abap_false ).
APPEND ls_prog_name TO lt_prog_name.
CATCH cx_sedi_error.
ENDTRY.
ENDLOOP.
SORT lt_prog_name.
DELETE ADJACENT DUPLICATES FROM lt_prog_name.
WRITE:/ lines( lt_prog_name ).
SORT lt_prog_name.
DELETE ADJACENT DUPLICATES FROM lt_prog_name.
DELETE lt_prog_name WHERE repid CP 'Z*' OR repid CP 'Y*'.
WRITE:/ lines( lt_prog_name ).
LOOP AT lt_prog_name ASSIGNING FIELD-SYMBOL(<lfs_prog_name>).
TRY.
CALL METHOD cl_abap_gen_limits=>get_values
EXPORTING
prog_name = <lfs_prog_name>-repid
* jump_limit = 16000
* local_limit = 50
IMPORTING
* load_total =
global_sizes = lt_global_sizes.
* local_sizes =
* jump_sizes =
<lfs_prog_name>-size = lt_global_sizes[ limit_key = 'DATA' ]-used.
<lfs_prog_name>-msize = lt_global_sizes[ limit_key = 'DATA' ]-max_val.
<lfs_prog_name>-perct = 100 * <lfs_prog_name>-size / <lfs_prog_name>-msize.
CATCH cx_abap_load_error.
ENDTRY.
ENDLOOP.
*==============Display ALV==================*
DATA: gr_table TYPE REF TO cl_salv_table.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = lt_prog_name. " Provide the table name
CATCH cx_salv_msg.
ENDTRY.
*... Display Table
gr_table->display( ).
No comments:
Post a Comment