Advertisement
Guest User

Scan for Userexits / BADI

a guest
Mar 3rd, 2016
429
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 39.46 KB | None | 0 0
  1. <source>
  2. *&---------------------------------------------------------------------*
  3. *& Report  ZTEST_USEREXIT_SCAN
  4. *&
  5. *&---------------------------------------------------------------------*
  6. *&
  7. *&
  8. *&---------------------------------------------------------------------*
  9.  
  10. REPORT  ZTEST_USEREXIT_SCAN NO STANDARD PAGE HEADING LINE-SIZE 201.
  11.  
  12. *& Selection Texts:
  13. *& P_ALV   ALV format
  14. *& P_AUTH   Include authority-check search
  15. *& P_BADI   Display BADIs
  16. *& P_CUSB   Customer BADIs only
  17. *& P_BTE   Display business trans events
  18. *& P_DEVC   Show development class exits
  19. *& P_EXIT   Display user exits
  20. *& P_FUNC   Show function modules
  21. *& P_LIMIT   Limit no. of submits to search
  22. *& P_LST   Standard list format
  23. *& P_PNAME   Program name
  24. *& P_PROG   Display program exits
  25. *& P_SUBM   Show submits
  26. *& P_TCODE   Transaction code
  27. *& P_TEXT   Search for text
  28. *& P_WFLOW   Display workflow links
  29. *&--------------------------------------------------------------------&*
  30. *& Text symbols:
  31. *& M01   Enter TCode or program
  32. *& M02   Enter at least one scope criteria
  33. *& S01   Selection data (TCode takes precedence over program name)
  34. *& S02   Scope criteria
  35. *& S03   Display criteria
  36. *&--------------------------------------------------------------------&*
  37.  
  38.  
  39. TABLES: sxs_attr,
  40.         tobjt,
  41.         tstct, "TCode texts
  42.         trdirt, "Program texts
  43.         sxc_exit. "BADI exits
  44.  
  45. TYPE-POOLS: slis. "Globale Typen für generische Listbausteine
  46.  
  47. DATA: tabix         LIKE sy-tabix,
  48.       w_linnum      TYPE i,
  49.       w_off         TYPE i,
  50.       w_index       LIKE sy-tabix,
  51.       w_include     LIKE trdir-name,
  52.       w_prog        LIKE trdir-name,
  53.       w_incl        LIKE trdir-name,
  54.       w_area        LIKE rs38l-area,
  55.       w_level,
  56.       w_str(50)     TYPE c,
  57.       w_cnt(2)      TYPE c,
  58.       w_funcname    LIKE tfdir-funcname,
  59.       w_fsel        LIKE sy-ucomm, " Determination of screen field
  60.       w_gridtxt(70) TYPE c. "ALV grid title
  61.  
  62. CONSTANTS: c_fmod(40) TYPE c VALUE 'Function modules searched: ',
  63.            c_subm(40) TYPE c VALUE 'Submit programs searched: ',
  64.            c_devc(60) TYPE c VALUE 'User-exits from development class',
  65.            c_col1(12) TYPE c VALUE 'Enhanmt Type',
  66.            c_col2(40) TYPE c VALUE 'Enhancement',
  67.            c_col3(30) TYPE c VALUE 'Program/Include',
  68.            c_col4(20) TYPE c VALUE 'Enhancement Name',
  69.            c_col5(40) TYPE c VALUE 'Enhancement Description',
  70.            c_col6(8)  TYPE c VALUE 'Project',
  71.            c_col7(1)  TYPE c VALUE 'S',
  72.            c_col8(12) TYPE c VALUE 'ChangeName',
  73.            c_col9(10) TYPE c VALUE 'ChangeDate',
  74.            c_x        TYPE c VALUE 'X'.
  75.  
  76. * Work Areas: ABAP Workbench
  77.  
  78. DATA: BEGIN OF wa_d010inc.
  79. DATA: master TYPE d010inc-master.
  80. DATA: END OF wa_d010inc.
  81.  
  82. DATA: BEGIN OF wa_tfdir.
  83. DATA: funcname TYPE tfdir-funcname,
  84.       pname    TYPE tfdir-pname,
  85.       include  TYPE tfdir-include.
  86. DATA: END OF wa_tfdir.
  87.  
  88. DATA: BEGIN OF wa_tadir.
  89. DATA: devclass TYPE tadir-devclass.
  90. DATA: END OF wa_tadir.
  91.  
  92. DATA: BEGIN OF wa_tstc.
  93. DATA: pgmna TYPE tstc-pgmna.
  94. DATA: END OF wa_tstc.
  95.  
  96. DATA: BEGIN OF wa_tstcp.
  97. DATA: param TYPE tstcp-param.
  98. DATA: END OF wa_tstcp.
  99.  
  100. DATA: BEGIN OF wa_enlfdir.
  101. DATA: area TYPE enlfdir-area.
  102. DATA: END OF wa_enlfdir.
  103.  
  104. * Work Areas: BADIs
  105.  
  106. DATA: BEGIN OF wa_sxs_attr.
  107. DATA: exit_name TYPE sxs_attr-exit_name.
  108. DATA: END OF wa_sxs_attr.
  109. DATA: BEGIN OF wa_sxs_attrt.
  110. DATA: text TYPE sxs_attrt-text.
  111. DATA: END OF wa_sxs_attrt.
  112.  
  113. * Work Areas: Enhancements
  114.  
  115. DATA: BEGIN OF wa_modsap.
  116. DATA: member TYPE modsap-member.
  117. DATA: END OF wa_modsap.
  118.  
  119. DATA: BEGIN OF wa_modsapa.
  120. DATA: name TYPE modsapa-name.
  121. DATA: END OF wa_modsapa.
  122.  
  123. DATA: BEGIN OF wa_modsapt.
  124. DATA: modtext TYPE modsapt-modtext.
  125. DATA: END OF wa_modsapt.
  126.  
  127. * Work Areas: Business Transaction Events
  128.  
  129. DATA: BEGIN OF wa_tbe01t.
  130. DATA: text1 TYPE tbe01t-text1.
  131. DATA: END OF wa_tbe01t.
  132.  
  133. DATA: BEGIN OF wa_tps01t.
  134. DATA: text1 TYPE tps01t-text1.
  135. DATA: END OF wa_tps01t.
  136.  
  137. * user-exits
  138.  
  139. TYPES: BEGIN OF ty_mod,
  140.          member LIKE modact-member,
  141.          name   LIKE modact-name,
  142.          status LIKE modattr-status,
  143.          anam   LIKE modattr-anam,
  144.          adat   LIKE modattr-adat,
  145.        END OF ty_mod.
  146.  
  147. DATA: w_mod TYPE ty_mod.
  148.  
  149. TYPES: BEGIN OF t_userexit,
  150.          type(12)    TYPE c,
  151.          pname       LIKE trdir-name,
  152.          txt(300),
  153.          level       TYPE c,
  154.          modname(30) TYPE c,
  155.          modtext(60) TYPE c,
  156.          modattr     TYPE ty_mod,
  157.          colour(4)   TYPE c,
  158.        END OF t_userexit.
  159.  
  160. DATA: i_userexit TYPE STANDARD TABLE OF t_userexit WITH HEADER LINE.
  161.  
  162. * Function module developmnet classes
  163.  
  164. TYPES: BEGIN OF t_devclass,
  165.          clas LIKE trdir-clas,
  166.        END OF t_devclass.
  167.  
  168. DATA: i_devclass TYPE STANDARD TABLE OF t_devclass WITH HEADER LINE.
  169.  
  170. * Submit programs
  171.  
  172. TYPES: BEGIN OF t_submit,
  173.          pname LIKE trdir-name,
  174.          level,
  175.          done,
  176.        END OF t_submit.
  177.  
  178. DATA: i_submit TYPE STANDARD TABLE OF t_submit WITH HEADER LINE.
  179.  
  180. * Source code
  181.  
  182. TYPES: BEGIN OF t_sourcetab,                       "#EC *
  183.          line(200),                                "#EC *
  184.        END OF t_sourcetab.                         "#EC *
  185.  
  186. DATA: sourcetab TYPE STANDARD TABLE OF t_sourcetab WITH HEADER LINE.
  187.  
  188. DATA c_overflow(30000) TYPE c.
  189.  
  190. * Description of an ABAP/4 source analysis token
  191.  
  192. DATA: i_stoken TYPE STANDARD TABLE OF stokex WITH HEADER LINE.
  193. DATA wa_stoken LIKE i_stoken.
  194.  
  195. * Description of an ABAP/4 source analysis statement
  196.  
  197. DATA: i_sstmnt TYPE STANDARD TABLE OF sstmnt WITH HEADER LINE.
  198.                                                             "#EC NEEDED
  199.  
  200. * keywords for searching ABAP code
  201.  
  202. TYPES: BEGIN OF t_keywords,
  203.          word(30),
  204.        END OF t_keywords.
  205.  
  206. DATA: keywords TYPE STANDARD TABLE OF t_keywords WITH HEADER LINE.
  207.  
  208. * function modules within program
  209.  
  210. TYPES: BEGIN OF t_fmodule,
  211.          name   LIKE rs38l-name,
  212.          pname  LIKE trdir-name,
  213.          pname2 LIKE trdir-name,
  214.          level,
  215.          bapi,
  216.          done,
  217.        END OF t_fmodule.
  218.  
  219. DATA: i_fmodule TYPE STANDARD TABLE OF t_fmodule WITH HEADER LINE.
  220.  
  221. * ALV definitions
  222.  
  223. DATA i_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
  224. DATA i_layout TYPE slis_layout_alv.
  225. DATA i_sort TYPE slis_t_sortinfo_alv WITH HEADER LINE.
  226.  
  227. *&--------------------------------------------------------------------&*
  228.  
  229. *& Selection Options &*
  230.  
  231. *&--------------------------------------------------------------------&*
  232.  
  233. SELECTION-SCREEN BEGIN OF BLOCK selscr1 WITH FRAME TITLE text-s01.
  234.  
  235. PARAMETER: p_pname LIKE trdir-name,
  236. p_tcode LIKE syst-tcode,
  237. p_limit(4) TYPE n DEFAULT 500.
  238. SELECTION-SCREEN SKIP.
  239.  
  240. SELECTION-SCREEN END OF BLOCK selscr1.
  241.  
  242. SELECTION-SCREEN BEGIN OF BLOCK selscr2 WITH FRAME TITLE text-s02.
  243.  
  244. PARAMETER: p_badi AS CHECKBOX DEFAULT c_x,
  245.            p_cusb AS CHECKBOX DEFAULT c_x,
  246.            p_bte AS CHECKBOX DEFAULT c_x,
  247.            p_exit AS CHECKBOX DEFAULT c_x,
  248.            p_prog AS CHECKBOX DEFAULT c_x,
  249.            p_wflow AS CHECKBOX,
  250.            p_auth AS CHECKBOX.
  251.  
  252. SELECTION-SCREEN SKIP.
  253.  
  254. PARAMETER: p_text(40) TYPE c.
  255.  
  256. SELECTION-SCREEN END OF BLOCK selscr2.
  257.  
  258. SELECTION-SCREEN BEGIN OF BLOCK selscr3 WITH FRAME TITLE text-s03.
  259.  
  260. PARAMETER: p_alv RADIOBUTTON GROUP rad1 DEFAULT 'X',
  261.  
  262. p_lst RADIOBUTTON GROUP rad1.
  263.  
  264. SELECTION-SCREEN SKIP.
  265.  
  266. PARAMETER: p_devc LIKE rihea-dy_ofn DEFAULT ' ' MODIF ID a01,
  267.  
  268. p_func LIKE rihea-dy_ofn DEFAULT ' ' MODIF ID a01,
  269.  
  270. p_subm LIKE rihea-dy_ofn DEFAULT ' ' MODIF ID a01.
  271.  
  272. SELECTION-SCREEN END OF BLOCK selscr3.
  273.  
  274. *&--------------------------------------------------------------------&*
  275.  
  276. *& START-OF-SELECTION &*
  277.  
  278. *&--------------------------------------------------------------------&*
  279.  
  280. START-OF-SELECTION.
  281.  
  282.   IF p_pname IS INITIAL AND p_tcode IS INITIAL.
  283.     MESSAGE i000(g01) WITH text-m01.
  284.     STOP.
  285.   ENDIF.
  286.  
  287.   IF p_badi IS INITIAL AND
  288.   p_exit IS INITIAL AND
  289.   p_bte IS INITIAL AND
  290.   p_wflow IS INITIAL AND
  291.   p_auth IS INITIAL AND
  292.   p_prog IS INITIAL.
  293.     MESSAGE i000(g01) WITH text-m02.
  294.     STOP.
  295.   ENDIF.
  296.  
  297. * ensure P_LIMIT is not zero.
  298.  
  299.   IF p_limit = 0.
  300.     p_limit = 1.
  301.   ENDIF.
  302.   PERFORM data_select.
  303.   PERFORM get_submit_data.
  304.   PERFORM get_fm_data.
  305.   PERFORM get_additional_data.
  306.   PERFORM data_display.
  307. *&--------------------------------------------------------------------&*
  308. *& Form DATA_SELECT &*
  309. *&--------------------------------------------------------------------&*
  310. *& &*
  311. *&--------------------------------------------------------------------&*
  312.  
  313. FORM data_select.
  314.  
  315. * data selection message to sap gui
  316.  
  317.   CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
  318.     DESTINATION 'SAPGUI'
  319.     KEEPING LOGICAL UNIT OF WORK
  320.     EXPORTING
  321.       text = 'Get programs/includes' "#EC NOTEXT
  322.              EXCEPTIONS
  323.              system_failure
  324.              communication_failure
  325.     . "#EC *
  326.  
  327. * get TCode name for ALV grid title
  328.  
  329.   CLEAR w_gridtxt.
  330.   IF NOT p_tcode IS INITIAL.
  331.     SELECT SINGLE * FROM tstct WHERE tcode = p_tcode
  332.     AND sprsl = sy-langu.
  333.     CONCATENATE 'TCode:' p_tcode tstct-ttext INTO w_gridtxt
  334.     SEPARATED BY space.
  335.   ENDIF.
  336. * get program name for ALV grid title
  337.   IF NOT p_pname IS INITIAL.
  338.     SELECT SINGLE * FROM trdirt WHERE name = p_pname
  339.     AND sprsl = sy-langu.
  340.     CONCATENATE 'Program:' p_pname tstct-ttext INTO w_gridtxt
  341.     SEPARATED BY space.
  342.   ENDIF.
  343. * determine search words
  344.   keywords-word = 'CALL'.
  345.   APPEND keywords.
  346.   keywords-word = 'FORM'.
  347.   APPEND keywords.
  348.   keywords-word = 'PERFORM'.
  349.   APPEND keywords.
  350.   keywords-word = 'SUBMIT'.
  351.   APPEND keywords.
  352.   keywords-word = 'INCLUDE'.
  353.   APPEND keywords.
  354.   keywords-word = 'AUTHORITY-CHECK'.
  355.   APPEND keywords.
  356.   IF NOT p_tcode IS INITIAL.
  357. * get program name from TCode
  358.     SELECT SINGLE pgmna FROM tstc INTO wa_tstc-pgmna
  359.     WHERE tcode EQ p_tcode.
  360.     IF NOT wa_tstc-pgmna IS INITIAL.
  361.       p_pname = wa_tstc-pgmna.
  362. * TCode does not include program name, but does have reference TCode
  363.     ELSE.
  364.       SELECT SINGLE param FROM tstcp INTO wa_tstcp-param
  365.       WHERE tcode EQ p_tcode.
  366.       IF sy-subrc = 0.
  367.         CHECK wa_tstcp-param(1) = '/'.
  368.         CHECK wa_tstcp-param+1(1) = '*'.
  369.         IF wa_tstcp-param CA ' '.
  370.         ENDIF.
  371.         w_off = sy-fdpos + 1.
  372.         SUBTRACT 2 FROM sy-fdpos.
  373.         IF sy-fdpos GT 0.
  374.           p_tcode = wa_tstcp-param+2(sy-fdpos).
  375.         ENDIF.
  376.         SELECT SINGLE pgmna FROM tstc INTO wa_tstc-pgmna
  377.         WHERE tcode EQ p_tcode.
  378.         p_pname = wa_tstc-pgmna.
  379.         IF sy-subrc <> 0.
  380.           MESSAGE s110(/saptrx/asc) WITH 'No program found for: '
  381.           p_tcode.                                          "#EC NOTEXT
  382.           STOP.
  383.         ENDIF.
  384.       ELSE.
  385.         MESSAGE s110(/saptrx/asc) WITH 'No program found for: '
  386.         p_tcode.                                            "#EC NOTEXT
  387.         STOP.
  388.       ENDIF.
  389.     ENDIF.
  390.   ENDIF.
  391. * Call customer-function aus Program coding
  392.   READ REPORT p_pname INTO sourcetab.
  393.   IF sy-subrc > 0.
  394.     MESSAGE e017(enhancement) WITH p_pname RAISING no_program. "#EC *
  395.   ENDIF.
  396.   SCAN ABAP-SOURCE sourcetab TOKENS INTO i_stoken
  397.   STATEMENTS INTO i_sstmnt
  398.   KEYWORDS FROM keywords
  399.   OVERFLOW INTO c_overflow
  400.   WITH INCLUDES WITH ANALYSIS. "#EC
  401.   IF sy-subrc > 0. "keine/syntakt. falsche Ablauflog./Fehler im Skanner
  402.     MESSAGE e130(enhancement) RAISING syntax_error. "#EC
  403.   ENDIF.
  404. * check I_STOKEN for entries
  405.   CLEAR w_linnum.
  406.   DESCRIBE TABLE i_stoken LINES w_linnum.
  407.   IF w_linnum GT 0.
  408.     w_level = '0'.
  409.     w_prog = ''.
  410.     w_incl = ''.
  411.     PERFORM data_search TABLES i_stoken USING w_level w_prog w_incl.
  412.   ENDIF.
  413. ENDFORM. "DATA_SELECT
  414. *&--------------------------------------------------------------------&*
  415. *& Form GET_FM_DATA ௥ &*
  416. *&--------------------------------------------------------------------&*
  417. *& &*
  418. *&--------------------------------------------------------------------&*
  419.  
  420. FORM get_fm_data.
  421.  
  422. * data selection message to sap gui
  423.  
  424.   CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
  425.     DESTINATION 'SAPGUI'
  426.     KEEPING LOGICAL UNIT OF WORK
  427.     EXPORTING
  428.       text = 'Get function module data' "#EC NOTEXT
  429.              EXCEPTIONS
  430.              system_failure
  431.              communication_failure
  432.     . "#EC *
  433.  
  434. * Function module data
  435.  
  436.   SORT i_fmodule BY name.
  437.   DELETE ADJACENT DUPLICATES FROM i_fmodule COMPARING name.
  438.   LOOP AT i_fmodule WHERE done NE c_x.
  439.     CLEAR: i_stoken, i_sstmnt, sourcetab, wa_tfdir, w_include .
  440.     REFRESH: i_stoken, i_sstmnt, sourcetab.
  441.     CLEAR wa_tfdir.
  442.     SELECT SINGLE funcname pname include FROM tfdir INTO wa_tfdir
  443.     WHERE funcname = i_fmodule-name.
  444.     CHECK sy-subrc = 0.
  445.     CALL FUNCTION 'FUNCTION_INCLUDE_SPLIT'
  446.       EXPORTING
  447.         program = wa_tfdir-pname
  448.       IMPORTING
  449.         group   = w_area.
  450.  
  451.     CONCATENATE 'L' w_area 'U' wa_tfdir-include INTO w_include.
  452.     i_fmodule-pname = w_include.
  453.     i_fmodule-pname2 = wa_tfdir-pname.
  454.     MODIFY i_fmodule.
  455.     READ REPORT i_fmodule-pname INTO sourcetab.
  456.     IF sy-subrc = 0.
  457.       SCAN ABAP-SOURCE sourcetab TOKENS INTO i_stoken
  458.       STATEMENTS INTO i_sstmnt
  459.       KEYWORDS FROM keywords
  460.       WITH INCLUDES
  461.       WITH ANALYSIS.
  462.       IF sy-subrc > 0.
  463.         MESSAGE e130(enhancement) RAISING syntax_error.
  464.       ENDIF.
  465. * check i_stoken for entries
  466.       CLEAR w_linnum.
  467.       DESCRIBE TABLE i_stoken LINES w_linnum.
  468.       IF w_linnum GT 0.
  469.         w_level = '1'.
  470.         w_prog = i_fmodule-pname2.
  471.         w_incl = i_fmodule-pname.
  472.         PERFORM data_search TABLES i_stoken USING w_level w_prog w_incl.
  473.       ENDIF.
  474.     ENDIF.
  475.   ENDLOOP.
  476. * store development classes
  477.   IF p_devc = c_x.
  478.     LOOP AT i_fmodule.
  479.       CLEAR: wa_tadir, wa_enlfdir.
  480.       SELECT SINGLE area FROM enlfdir INTO wa_enlfdir-area
  481.       WHERE funcname = i_fmodule-name.
  482.       CHECK NOT wa_enlfdir-area IS INITIAL.
  483.       SELECT SINGLE devclass INTO wa_tadir-devclass
  484.       FROM tadir WHERE pgmid = 'R3TR'
  485.       AND object = 'FUGR'
  486.       AND obj_name = wa_enlfdir-area.
  487.       CHECK NOT wa_tadir-devclass IS INITIAL.
  488.       MOVE wa_tadir-devclass TO i_devclass-clas.
  489.       APPEND i_devclass.
  490.       i_fmodule-done = c_x.
  491.       MODIFY i_fmodule.
  492.     ENDLOOP.
  493.     SORT i_devclass.
  494.     DELETE ADJACENT DUPLICATES FROM i_devclass.
  495.   ENDIF.
  496. ENDFORM. "GET_FM_DATA
  497. *&--------------------------------------------------------------------&*
  498. *& Form GET_SUBMIT_DATA &*
  499. *&--------------------------------------------------------------------&*
  500. *& &*
  501. *&--------------------------------------------------------------------&*
  502. FORM get_submit_data.
  503. * data selection message to sap gui
  504.   CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
  505.    DESTINATION 'SAPGUI'
  506.    KEEPING LOGICAL UNIT OF WORK
  507.    EXPORTING
  508.      text = 'Get submit data' "#EC NOTEXT
  509.              EXCEPTIONS
  510.              system_failure
  511.              communication_failure
  512.     . "#EC *
  513.  
  514.   SORT i_submit.
  515.   DELETE ADJACENT DUPLICATES FROM i_submit COMPARING pname.
  516.   w_level = '0'.
  517.   LOOP AT i_submit WHERE done NE c_x.
  518.     CLEAR: i_stoken, i_sstmnt, sourcetab.
  519.     REFRESH: i_stoken, i_sstmnt, sourcetab.
  520.     READ REPORT i_submit-pname INTO sourcetab.
  521.     IF sy-subrc = 0.
  522.       SCAN ABAP-SOURCE sourcetab TOKENS INTO i_stoken
  523.       STATEMENTS INTO i_sstmnt
  524.       KEYWORDS FROM keywords
  525.       WITH INCLUDES
  526.       WITH ANALYSIS.
  527.       IF sy-subrc > 0.
  528. * message e130(enhancement) raising syntax_error.
  529.         CONTINUE.
  530.       ENDIF.
  531. * check i_stoken for entries
  532.       CLEAR w_linnum.
  533.       DESCRIBE TABLE i_stoken LINES w_linnum.
  534.       IF w_linnum GT 0.
  535.         w_prog = i_submit-pname.
  536.         w_incl = ''.
  537.         PERFORM data_search TABLES i_stoken USING w_level w_prog w_incl.
  538.       ENDIF.
  539.     ENDIF.
  540. * restrict number of submit program selected for processing
  541.     DESCRIBE TABLE i_submit LINES w_linnum.
  542.     IF w_linnum GE p_limit.
  543.       w_level = '1'.
  544.     ENDIF.
  545.     i_submit-done = c_x.
  546.     MODIFY i_submit.
  547.   ENDLOOP.
  548. ENDFORM. "GET_SUBMIT_DATA
  549. *&--------------------------------------------------------------------&*
  550. *& Form DATA_SEARCH &*
  551. *&--------------------------------------------------------------------&*
  552. *& &*
  553. *&--------------------------------------------------------------------&*
  554. FORM data_search TABLES p_stoken STRUCTURE stoken
  555. USING p_level l_prog l_incl.
  556.  
  557.   LOOP AT p_stoken.
  558.     CLEAR i_userexit.
  559.  
  560. * Workflow
  561.  
  562.     IF p_wflow = c_x.
  563.       IF p_level EQ '1'." do not perform for function modules (2nd pass)
  564.         IF p_stoken-str+1(16) CS 'SWE_EVENT_CREATE'.
  565.           REPLACE ALL OCCURRENCES OF '''' IN p_stoken-str WITH ''.
  566.           i_userexit-type = 'WorkFlow'.
  567.           i_userexit-txt = p_stoken-str.
  568.           CONCATENATE l_prog '/' l_incl INTO i_userexit-pname.
  569.           APPEND i_userexit.
  570.         ENDIF.
  571.       ENDIF.
  572.     ENDIF.
  573.     tabix = sy-tabix + 1.
  574.     i_userexit-level = p_level.
  575.     IF i_userexit-level = '0'.
  576.       IF l_incl IS INITIAL.
  577.         i_userexit-pname = p_pname.
  578.       ELSE.
  579.         CONCATENATE p_pname '-' l_incl INTO i_userexit-pname.
  580.       ENDIF.
  581.     ELSE.
  582.       IF l_incl IS INITIAL.
  583.         i_userexit-pname = l_prog.
  584.       ELSE.
  585.         CONCATENATE l_prog '-' l_incl INTO i_userexit-pname.
  586.       ENDIF.
  587.     ENDIF.
  588. * AUTHORITY-CHECKS
  589.     IF p_auth = c_x.
  590.       IF p_stoken-str EQ 'AUTHORITY-CHECK'.
  591.         CHECK p_level EQ '0'." do not perform for function modules
  592.         w_index = sy-tabix + 2.
  593.         READ TABLE p_stoken INDEX w_index INTO wa_stoken.
  594.         CHECK NOT wa_stoken-str CS 'STRUCTURE'.
  595.         CHECK NOT wa_stoken-str CS 'SYMBOL'.
  596.         READ TABLE i_submit WITH KEY pname = wa_stoken-str.
  597.         IF sy-subrc <> 0.
  598.           i_userexit-pname = i_submit-pname.
  599.           i_userexit-type = 'AuthCheck'.
  600.           i_userexit-txt = wa_stoken-str.
  601.           REPLACE ALL OCCURRENCES OF '''' IN i_userexit-txt WITH space.
  602.           CLEAR tobjt.
  603.           SELECT SINGLE * FROM tobjt WHERE object = i_userexit-txt
  604.           AND langu = sy-langu.
  605.           i_userexit-modname = 'AUTHORITY-CHECK'.
  606.           i_userexit-modtext = tobjt-ttext.
  607.           APPEND i_userexit.
  608.         ENDIF.
  609.       ENDIF.
  610.     ENDIF.
  611. * Text searches
  612.     IF NOT p_text IS INITIAL.
  613.       IF p_stoken-str CS p_text.
  614.         i_userexit-pname = i_submit-pname.
  615.         i_userexit-type = 'TextSearch'.
  616.         i_userexit-txt = wa_stoken-str.
  617.         i_userexit-modname = 'Text Search'.
  618.         i_userexit-modtext = p_stoken-str.
  619.         APPEND i_userexit.
  620.       ENDIF.
  621.     ENDIF.
  622. * Include (SE38)
  623.     IF p_stoken-str EQ 'INCLUDE'.
  624.       CHECK p_level EQ '0'. " do not perform for function modules
  625.       w_index = sy-tabix + 1.
  626.       READ TABLE p_stoken INDEX w_index INTO wa_stoken.
  627.       CHECK NOT wa_stoken-str CS 'STRUCTURE'.
  628.       CHECK NOT wa_stoken-str CS 'SYMBOL'.
  629.       READ TABLE i_submit WITH KEY pname = wa_stoken-str.
  630.       IF sy-subrc <> 0.
  631.         i_submit-pname = wa_stoken-str.
  632.         i_submit-level = p_level.
  633.         APPEND i_submit.
  634.       ENDIF.
  635.     ENDIF.
  636. * Enhancements (SMOD)
  637.     IF p_exit = c_x.
  638.       IF p_stoken-str EQ 'CUSTOMER-FUNCTION'.
  639.         CLEAR w_funcname.
  640.         READ TABLE p_stoken INDEX tabix.
  641.         TRANSLATE p_stoken-str USING ''' '.
  642.         CONDENSE p_stoken-str.
  643.         IF l_prog IS INITIAL.
  644.           CONCATENATE 'EXIT' p_pname p_stoken-str INTO w_funcname
  645.           SEPARATED BY '_'.
  646.         ELSE.
  647.           CONCATENATE 'EXIT' l_prog p_stoken-str INTO w_funcname
  648.           SEPARATED BY '_'.
  649.         ENDIF.
  650.         SELECT SINGLE member FROM modsap INTO wa_modsap-member
  651.         WHERE member = w_funcname.
  652.         IF sy-subrc = 0. " check for valid enhancement
  653.           i_userexit-type = 'Enhancement'.
  654.           i_userexit-txt = w_funcname.
  655.           APPEND i_userexit.
  656.         ELSE.
  657.           CLEAR wa_d010inc.
  658.           SELECT SINGLE master INTO wa_d010inc-master
  659.           FROM d010inc
  660.           WHERE include = l_prog.
  661.           CONCATENATE 'EXIT' wa_d010inc-master p_stoken-str INTO
  662.           w_funcname
  663.           SEPARATED BY '_'.
  664.           i_userexit-type = 'Enhancement'.
  665.           i_userexit-txt = w_funcname.
  666.         ENDIF.
  667.       ENDIF.
  668.     ENDIF.
  669. * BADIs (SE18)
  670.     IF p_badi = c_x.
  671.       IF p_stoken-str CS 'cl_exithandler='.
  672.         w_index = sy-tabix + 4.
  673.         READ TABLE p_stoken INDEX w_index INTO wa_stoken.
  674.         i_userexit-txt = wa_stoken-str.
  675.         REPLACE ALL OCCURRENCES OF '''' IN i_userexit-txt WITH space.
  676.         i_userexit-type = 'BADI'.
  677.         CLEAR sxs_attr. " ensure a real BADI
  678.         IF p_cusb = c_x. "customer BADIs only
  679.           SELECT SINGLE * FROM sxs_attr WHERE exit_name = i_userexit-txt
  680.           AND internal <> c_x.
  681.         ELSE.
  682.           SELECT SINGLE * FROM sxs_attr
  683.           WHERE exit_name = i_userexit-txt.
  684.         ENDIF.
  685.         IF sy-subrc = 0.
  686.           APPEND i_userexit.
  687.         ENDIF.
  688.       ENDIF.
  689.     ENDIF.
  690. * Business transaction events (FIBF)
  691.     IF p_bte = c_x.
  692.       IF p_stoken-str CS 'OPEN_FI_PERFORM'.
  693.         i_userexit-type = 'BusTrEvent'.
  694.         i_userexit-txt = p_stoken-str.
  695.         REPLACE ALL OCCURRENCES OF '''' IN i_userexit-txt WITH space.
  696.         i_userexit-modname = i_userexit-txt+16(8).
  697.         CASE i_userexit-txt+25(1).
  698.           WHEN 'E'.
  699.             CLEAR wa_tbe01t.
  700.             SELECT SINGLE text1 INTO wa_tbe01t-text1 FROM tbe01t
  701.             WHERE event = i_userexit-txt+16(8)
  702.             AND spras = sy-langu.
  703.             IF wa_tbe01t-text1 IS INITIAL.
  704.               i_userexit-modtext = '<Not active>'.          "#EC NOTEXT
  705.             ELSE.
  706.               i_userexit-modtext = wa_tbe01t-text1.
  707.             ENDIF.
  708.             i_userexit-modname+8 = '/P&S'.                  "#EC NOTEXT
  709.           WHEN 'P'.
  710.             CLEAR wa_tps01t.
  711.             SELECT SINGLE text1 INTO wa_tps01t-text1 FROM tps01t
  712.             WHERE procs = i_userexit-txt+16(8)
  713.             AND spras = sy-langu.
  714.             i_userexit-modtext = wa_tps01t-text1.
  715.             i_userexit-modname+8 = '/Process'.
  716.         ENDCASE.
  717.         APPEND i_userexit.
  718.       ENDIF.
  719.     ENDIF.
  720. * Program exits (SE38)
  721.     IF p_prog = c_x.
  722.       IF p_stoken-str CS 'USEREXIT_'.
  723.         CHECK NOT p_stoken-str CS '-'. " ensure not USEREXIT_XX-XXX
  724.         CHECK NOT p_stoken-str CS '('. " ensure not SUBMIT_XX(X)
  725.         i_userexit-type = 'Program Exit'.
  726.         i_userexit-txt = p_stoken-str.
  727.         REPLACE ALL OCCURRENCES OF '''' IN i_userexit-txt WITH space.
  728.         APPEND i_userexit.
  729.       ENDIF.
  730.     ENDIF.
  731. * Submit programs (SE38)
  732.     IF p_stoken-str CS 'SUBMIT'.
  733.       CHECK p_level EQ '0'.
  734.       " do not perform for function modules (2nd pass)
  735.       CHECK NOT p_stoken-str CS '_'. " ensure not SUBMIT_XXX
  736.       w_index = sy-tabix + 1.
  737.       READ TABLE p_stoken INDEX w_index INTO wa_stoken.
  738.       CHECK NOT wa_stoken-str CS '_'. " ensure not SUBMIT_XXX
  739.       REPLACE ALL OCCURRENCES OF '''' IN wa_stoken-str WITH space.
  740.       READ TABLE i_submit WITH KEY pname = wa_stoken-str.
  741.       IF sy-subrc <> 0.
  742.         i_submit-pname = wa_stoken-str.
  743.         i_submit-level = p_level.
  744.         APPEND i_submit.
  745.       ENDIF.
  746.     ENDIF.
  747. * Perform routines (which reference external programs)
  748.     IF p_stoken-str CS 'PERFORM'.
  749.       CHECK p_level EQ '0'.
  750.       " do not perform for function modules (2nd pass)
  751.       w_index = sy-tabix + 1.
  752.       READ TABLE p_stoken INDEX w_index INTO wa_stoken.
  753.       IF NOT wa_stoken-ovfl IS INITIAL.
  754.         w_off = wa_stoken-off1 + 10.
  755.         w_str = c_overflow+w_off(30).
  756.         FIND ')' IN w_str MATCH OFFSET w_off.
  757.         IF sy-subrc = 0.
  758.           w_off = w_off + 1.
  759.           wa_stoken-str = w_str(w_off).
  760.         ENDIF.
  761.       ENDIF.
  762.       CHECK wa_stoken-str CS '('.
  763.       w_off = 0.
  764.       WHILE sy-subrc = 0.
  765.         IF wa_stoken-str+w_off(1) EQ '('.
  766.           REPLACE SECTION OFFSET w_off LENGTH 1 OF wa_stoken-str WITH
  767.           ''.
  768.           REPLACE ALL OCCURRENCES OF ')' IN wa_stoken-str WITH space.
  769.           READ TABLE i_submit WITH KEY pname = wa_stoken-str.
  770.           IF sy-subrc <> 0.
  771.             i_submit-pname = wa_stoken-str.
  772.             APPEND i_submit.
  773.           ENDIF.
  774.           EXIT.
  775.         ELSE.
  776.           REPLACE SECTION OFFSET w_off LENGTH 1 OF wa_stoken-str WITH
  777.           ''.
  778.           SHIFT wa_stoken-str LEFT DELETING LEADING space.
  779.         ENDIF.
  780.       ENDWHILE.
  781.     ENDIF.
  782. * Function modules (SE37)
  783.     IF p_stoken-str CS 'FUNCTION'.
  784.       CLEAR i_fmodule.
  785.       IF p_level EQ '0'.
  786.         " do not perform for function modules (2nd pass)
  787.         w_index = sy-tabix + 1.
  788.         READ TABLE p_stoken INDEX w_index INTO wa_stoken.
  789.         IF wa_stoken-str CS 'BAPI'.
  790.           i_fmodule-bapi = c_x.
  791.         ENDIF.
  792.         REPLACE FIRST OCCURRENCE OF '''' IN wa_stoken-str WITH space.
  793.         REPLACE FIRST OCCURRENCE OF '''' IN wa_stoken-str WITH space.
  794.         IF sy-subrc = 4. " didn't find 2nd quote (ie name truncated)
  795.           CLEAR wa_tfdir.
  796.           CONCATENATE wa_stoken-str '%' INTO wa_stoken-str.
  797.           SELECT SINGLE funcname INTO wa_tfdir-funcname FROM tfdir
  798.           WHERE funcname LIKE wa_stoken-str.
  799.           IF sy-subrc = 0.
  800.             i_fmodule-name = wa_tfdir-funcname.
  801.           ELSE.
  802.             CONTINUE.
  803.           ENDIF.
  804.         ELSE.
  805.           i_fmodule-name = wa_stoken-str.
  806.         ENDIF.
  807.         i_fmodule-level = p_level.
  808.         APPEND i_fmodule.
  809.       ENDIF.
  810.     ENDIF.
  811.   ENDLOOP.
  812. ENDFORM. "DATA_SEARCH
  813. *&--------------------------------------------------------------------&*
  814. *& Form GET_ADDITIONAL_DATA &*
  815. *&--------------------------------------------------------------------&*
  816. *& &*
  817. *&--------------------------------------------------------------------&*
  818. FORM get_additional_data.
  819. * data selection message to sap gui
  820.   CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
  821.    DESTINATION 'SAPGUI'
  822.    KEEPING LOGICAL UNIT OF WORK
  823.    EXPORTING
  824.      text = 'Get additional data' "#EC NOTEXT
  825.              EXCEPTIONS
  826.              system_failure
  827.              communication_failure
  828.     . "#EC *
  829.  
  830.   LOOP AT i_userexit.
  831.  
  832. * Workflow
  833.     IF i_userexit-type EQ 'WorkFlow'.
  834.       CONTINUE.
  835.     ENDIF.
  836. * Enhancement data
  837.     IF i_userexit-type CS 'Enh'.
  838.       CLEAR: wa_modsapa.
  839.       SELECT SINGLE name INTO wa_modsapa-name FROM modsap
  840.       WHERE member = i_userexit-txt.
  841.       CHECK sy-subrc = 0.
  842.       i_userexit-modname = wa_modsapa-name.
  843.       CLEAR wa_modsapt.
  844.       SELECT SINGLE modtext INTO wa_modsapt-modtext FROM modsapt
  845.       WHERE name = wa_modsapa-name
  846.       AND sprsl = sy-langu.
  847.       i_userexit-modtext = wa_modsapt-modtext.
  848. * Get the CMOD project name
  849.       CLEAR w_mod.
  850.       SELECT SINGLE modact~member modact~name modattr~status
  851.       modattr~anam modattr~adat
  852.       INTO w_mod
  853.       FROM modact
  854.       INNER JOIN modattr
  855.       ON modattr~name = modact~name
  856.       WHERE modact~member = wa_modsapa-name
  857.       AND modact~typ = space.
  858.       IF sy-subrc = 0.
  859.         i_userexit-modattr = w_mod.
  860.       ENDIF.
  861.     ENDIF.
  862. * BADI data
  863.     IF i_userexit-type EQ 'BADI'.
  864.       CLEAR wa_sxs_attr.
  865.       SELECT SINGLE exit_name INTO wa_sxs_attr-exit_name FROM sxs_attr
  866.       WHERE exit_name = i_userexit-txt.
  867.       IF sy-subrc = 0.
  868.         i_userexit-modname = i_userexit-txt.
  869.       ELSE.
  870.         i_userexit-modname = 'Dynamic call'.                "#EC NOTEXT
  871.       ENDIF.
  872.       CLEAR wa_sxs_attrt.
  873.       SELECT SINGLE text INTO wa_sxs_attrt-text FROM sxs_attrt
  874.       WHERE exit_name = wa_sxs_attr-exit_name
  875.       AND sprsl = sy-langu.
  876.       i_userexit-modtext = wa_sxs_attrt-text.
  877.     ENDIF.
  878. * BADI Implementation
  879.     IF i_userexit-type EQ 'BADI'.
  880.       CLEAR sxc_exit.
  881.       SELECT COUNT( * ) FROM sxc_exit WHERE exit_name = i_userexit-txt.
  882.       w_cnt = sy-dbcnt.
  883. * determine id BADI is for interal or external use
  884.  
  885.       CLEAR sxs_attr.
  886.       SELECT SINGLE * FROM sxs_attr WHERE exit_name = i_userexit-txt.
  887.       IF sxs_attr-internal = 'X'.
  888.         wa_sxs_attrt-text = 'SAP '.
  889.       ELSE.
  890.         wa_sxs_attrt-text = 'CUST'.
  891.       ENDIF.
  892. * concatenate wa_sxs_attrt-text w_cnt into i_userexit-modattr-* name
  893. * separated by space.
  894.       WRITE wa_sxs_attrt-text TO i_userexit-modattr-name.
  895.       WRITE w_cnt TO i_userexit-modattr-name+5.
  896.     ENDIF.
  897.     MODIFY i_userexit.
  898.   ENDLOOP.
  899. * get enhancements via program package
  900.   CLEAR wa_tadir.
  901.   SELECT SINGLE devclass INTO wa_tadir-devclass FROM tadir
  902.   WHERE pgmid = 'R3TR'
  903.   AND object = 'PROG'
  904.   AND obj_name = p_pname.
  905.   IF sy-subrc = 0.
  906.     CLEAR: wa_modsapa, wa_modsapt.
  907.     SELECT name FROM modsapa INTO wa_modsapa-name
  908.     WHERE devclass = wa_tadir-devclass.
  909.       SELECT SINGLE modtext FROM modsapt INTO wa_modsapt-modtext
  910.       WHERE name = wa_modsapa-name
  911.       AND sprsl = sy-langu.
  912.       CLEAR i_userexit.
  913.       READ TABLE i_userexit WITH KEY modname = wa_modsapa-name.
  914.       IF sy-subrc <> 0.
  915.         i_userexit-modtext = wa_modsapt-modtext.
  916.         i_userexit-type = 'Enhancement'.                    "#EC NOTEXT
  917.         i_userexit-modname = wa_modsapa-name.
  918.         i_userexit-txt = 'Determined from program DevClass'. "#EC NOTEXT
  919.         i_userexit-pname = 'Unknown'.                       "#EC NOTEXT
  920.         APPEND i_userexit.
  921.       ENDIF.
  922.     ENDSELECT.
  923.   ENDIF.
  924. * set row colour.
  925.   LOOP AT i_userexit.
  926.     CASE i_userexit-type.
  927.       WHEN 'BADI'.
  928.         i_userexit-colour = 'C601'.
  929.       WHEN 'Enhancement'.
  930.         i_userexit-colour = 'C501'.
  931.       WHEN 'Program Exit'.
  932.         i_userexit-colour = 'C401'.
  933.       WHEN 'WorkFlow'.
  934.         i_userexit-colour = 'C301'.
  935.       WHEN 'BusTrEvent'.
  936.         i_userexit-colour = 'C201'.
  937.     ENDCASE.
  938.     MODIFY i_userexit.
  939.   ENDLOOP.
  940. ENDFORM. "GET_ADDITIONAL_DATA
  941. *&--------------------------------------------------------------------&*
  942. *& Form DATA_DISPLAY &*
  943. *&--------------------------------------------------------------------&*
  944. *& &*
  945. *&--------------------------------------------------------------------&*
  946. FORM data_display.
  947. * data selection message to sap gui
  948.   CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
  949.    DESTINATION 'SAPGUI'
  950.    KEEPING LOGICAL UNIT OF WORK
  951.    EXPORTING
  952.      text = 'Prepare screen for display' "#EC NOTEXT
  953.             EXCEPTIONS
  954.             system_failure
  955.             communication_failure
  956.    . "#EC *
  957.   SORT i_userexit BY type txt modname.
  958.   DELETE ADJACENT DUPLICATES FROM i_userexit COMPARING txt pname
  959.   modname.
  960. * ensure records selected.
  961.   DESCRIBE TABLE i_userexit LINES w_linnum.
  962.   IF w_linnum = 0.
  963.     MESSAGE s003(g00). "No data records were selected
  964.     EXIT.
  965.   ENDIF.
  966.   IF p_alv = ' '.
  967. * format headings
  968.     WRITE: 'Enhancements from main program: ', p_pname.
  969.     WRITE: 'Enhancements from TCode: ', p_tcode.
  970.     WRITE: 201''.
  971.     ULINE.
  972.     FORMAT COLOR COL_HEADING.
  973.     WRITE: / sy-vline,
  974.     (12) c_col1, "Enhanmt Type
  975.     sy-vline,
  976.     (40) c_col2, "Enhancement
  977.     sy-vline,
  978.     (30) c_col3, "Program/Include
  979.     sy-vline,
  980.     (20) c_col4, "Enhancement name
  981.     sy-vline,
  982.     (40) c_col5, "Enhancement description
  983.     sy-vline,
  984.     (8) c_col6, "Project
  985.     sy-vline,
  986.     (1) c_col7, "S
  987.     sy-vline,
  988.     (12) c_col8, "ChangeName
  989.     sy-vline,
  990.     (10) c_col9, "ChangeDate
  991.     sy-vline.
  992.     FORMAT RESET.
  993.     ULINE.
  994. * format lines
  995.     LOOP AT i_userexit.
  996. * set line colour
  997.       CASE i_userexit-type.
  998.         WHEN 'Enhancement'.
  999.           FORMAT COLOR 3 INTENSIFIED OFF.
  1000.         WHEN 'BADI'.
  1001.           FORMAT COLOR 4 INTENSIFIED OFF.
  1002.         WHEN 'BusTrEvent'.
  1003.           FORMAT COLOR 5 INTENSIFIED OFF.
  1004.         WHEN 'Program Exit'.
  1005.           FORMAT COLOR 6 INTENSIFIED OFF.
  1006.         WHEN OTHERS.
  1007.           FORMAT RESET.
  1008.       ENDCASE.
  1009.       WRITE: / sy-vline,
  1010.       i_userexit-type,
  1011.       sy-vline,
  1012.       i_userexit-txt(40),
  1013.       sy-vline,
  1014.       i_userexit-pname(30),
  1015.       sy-vline,
  1016.       i_userexit-modname(20),
  1017.       sy-vline,
  1018.       i_userexit-modtext(40),
  1019.       sy-vline.
  1020.       WRITE: i_userexit-modattr-name,
  1021.       sy-vline,
  1022.       i_userexit-modattr-status,
  1023.       sy-vline,
  1024.       i_userexit-modattr-anam,
  1025.       sy-vline,
  1026.       i_userexit-modattr-adat NO-ZERO,
  1027.       sy-vline.
  1028.       HIDE: i_userexit-modname,
  1029.       i_userexit-type,
  1030.       i_userexit-modattr-name.
  1031.     ENDLOOP.
  1032.     FORMAT RESET.
  1033.     ULINE.
  1034. * user-exits from development class of function modules
  1035.     IF p_devc = c_x.
  1036.       WRITE: /.
  1037.       WRITE: / c_devc.
  1038.       WRITE: 201''.
  1039.       ULINE (90).
  1040.       WRITE: 201''.
  1041.       LOOP AT i_devclass.
  1042.         CLEAR wa_modsapa.
  1043.         SELECT name FROM modsapa INTO wa_modsapa
  1044.         WHERE devclass = i_devclass-clas.
  1045.           SELECT SINGLE name modtext INTO CORRESPONDING FIELDS OF
  1046.           wa_modsapt
  1047.           FROM modsapt
  1048.           WHERE name = wa_modsapa-name
  1049.           AND sprsl = sy-langu.
  1050.           FORMAT COLOR 3 INTENSIFIED OFF.
  1051.           WRITE: / sy-vline,
  1052.           (12) 'Enhancement',
  1053.           sy-vline,
  1054.           wa_modsapa-name,
  1055.           sy-vline,
  1056.           wa_modsapt-modtext,
  1057.           sy-vline.
  1058.         ENDSELECT.
  1059.       ENDLOOP.
  1060.       WRITE: 201''.
  1061.       ULINE (90).
  1062.       FORMAT RESET.
  1063.     ENDIF.
  1064. * display fuction modules used in program
  1065.     WRITE /.
  1066.     DESCRIBE TABLE i_fmodule LINES w_linnum.
  1067.     WRITE: / c_fmod , AT 35 w_linnum.                       "#EC NOTEXT
  1068.     WRITE: 201''.
  1069.     IF p_func = c_x.
  1070.       ULINE (38).
  1071.       WRITE: 201''.
  1072.       LOOP AT i_fmodule.
  1073.         WRITE: sy-vline,
  1074.         i_fmodule-name,
  1075.         sy-vline,
  1076.         i_fmodule-bapi,
  1077.         sy-vline.
  1078.         WRITE: 201''.
  1079.       ENDLOOP.
  1080.       WRITE: 201''.
  1081.       ULINE (38).
  1082.     ENDIF.
  1083. * display submit programs used in programwrite /.
  1084.     DESCRIBE TABLE i_submit LINES w_linnum.
  1085.     WRITE: / c_subm , AT 35 w_linnum.                       "#EC NOTEXT
  1086.     WRITE: 201''.
  1087.  
  1088.     IF p_subm = c_x.
  1089.       ULINE (44).
  1090.       WRITE: 201''.
  1091.       LOOP AT i_submit.
  1092.         WRITE: sy-vline,
  1093.         i_submit-pname,
  1094.         sy-vline.
  1095.         WRITE: 201''.
  1096.       ENDLOOP.
  1097.       WRITE: 201''.
  1098.       ULINE (44).
  1099.     ENDIF.
  1100. *issue message with number of user-exits displayeddescribe table i_userexit lines w_linnum.
  1101.     MESSAGE s697(56) WITH w_linnum.
  1102.  
  1103.  ELSE. " Show in alv format* issue message with number of user-exits displayed
  1104.     DESCRIBE TABLE i_userexit LINES w_linnum.
  1105.     MESSAGE s697(56) WITH w_linnum.
  1106. *create field catalog
  1107.     PERFORM create_field_catalog USING 'TYPE' 'T_USEREXIT' ' ' 'Type'.
  1108.     PERFORM create_field_catalog USING 'PNAME' 'T_USEREXIT' ' ' 'Program name'.
  1109.     PERFORM create_field_catalog USING 'TXT' 'T_USEREXIT' ' '   'Enhancement'.
  1110.     PERFORM create_field_catalog USING 'LEVEL' 'T_USEREXIT'  c_x 'Level'.
  1111.     PERFORM create_field_catalog USING 'MODNAME' 'T_USEREXIT' ' '  'Enhancement name'.
  1112.     PERFORM create_field_catalog USING 'MODTEXT' 'T_USEREXIT' ' '  'Enhancement text'.
  1113.     PERFORM create_field_catalog USING 'MODATTR-MEMBER' 'T_USEREXIT' c_x 'Member'.
  1114.     PERFORM create_field_catalog USING 'MODATTR-NAME' 'T_USEREXIT' ' ' 'Project'.
  1115.     PERFORM create_field_catalog USING 'MODATTR-STATUS' 'T_USEREXIT' ' ' 'Status'.
  1116.     PERFORM create_field_catalog USING 'MODATTR-ANAM' 'T_USEREXIT' ' ' 'Changed by'.
  1117.     PERFORM create_field_catalog USING 'MODATTR-ADAT' 'T_USEREXIT' ' ' 'Change date'.
  1118.  
  1119. * Layout
  1120.  
  1121.     CLEAR i_layout.
  1122.     i_layout-colwidth_optimize = c_x.
  1123.     i_layout-info_fieldname = 'COLOUR'.
  1124.  
  1125. * Sort
  1126.  
  1127.     CLEAR i_sort.
  1128.     i_sort-fieldname = 'TYPE'.
  1129.     i_sort-tabname = 'T_USEREXIT'.
  1130.     i_sort-up = c_x.
  1131.  
  1132.     APPEND i_sort.
  1133.  
  1134.     CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  1135.       EXPORTING
  1136.         i_callback_program      = sy-cprog
  1137.         i_callback_user_command = 'USER_COMMAND'
  1138.         is_layout               = i_layout
  1139.         it_fieldcat             = i_fieldcat[]
  1140.         it_sort                 = i_sort[]
  1141.         i_default               = c_x
  1142.         i_save                  = 'A'
  1143.         i_grid_title            = w_gridtxt
  1144.       TABLES
  1145.         t_outtab                = i_userexit.
  1146.  
  1147.   ENDIF.
  1148.  
  1149. * issue message with number of user-exits displayed
  1150.  
  1151.   DESCRIBE TABLE i_userexit LINES w_linnum.
  1152.  
  1153.   MESSAGE s697(56) WITH w_linnum.
  1154.  
  1155. ENDFORM. "DATA_DISPLAY
  1156.  
  1157. *&---------------------------------------------------------------------
  1158.  
  1159. *&*
  1160.  
  1161. *& Form CREATE_FIELD_CATALOG
  1162.  
  1163. *&*
  1164.  
  1165. *&---------------------------------------------------------------------
  1166.  
  1167. FORM create_field_catalog USING p_fieldname
  1168.                                 p_tabname
  1169.                                 p_hide
  1170.                                 p_text.
  1171.  
  1172.   i_fieldcat-fieldname = p_fieldname.
  1173.   i_fieldcat-tabname = p_tabname.
  1174.   i_fieldcat-no_out = p_hide.
  1175.   i_fieldcat-seltext_l = p_text.
  1176.   APPEND i_fieldcat.
  1177.  
  1178. ENDFORM. " CREATE_FIELD_CATALOG
  1179.  
  1180. *&---------------------------------------------------------------------
  1181. *&*
  1182. *& Form CREATE_FIELD_CATALOG
  1183. *&*
  1184. *&---------------------------------------------------------------------
  1185.  
  1186. FORM user_command USING r_ucomm LIKE sy-ucomm
  1187.                         rs_selfield TYPE slis_selfield.
  1188.  
  1189.   READ TABLE i_userexit INDEX rs_selfield-tabindex.
  1190.   CHECK sy-subrc = 0.
  1191.   CASE r_ucomm.
  1192.     WHEN '&IC1'.
  1193.       CASE rs_selfield-sel_tab_field.
  1194.         WHEN 'T_USEREXIT-MODNAME'.
  1195.           READ TABLE i_userexit INDEX rs_selfield-tabindex.
  1196.           CASE i_userexit-type.
  1197.             WHEN 'Enhancement'.
  1198.               SET PARAMETER ID 'MON' FIELD i_userexit-modname.
  1199.               CALL TRANSACTION 'SMOD'.
  1200.             WHEN 'BADI'.
  1201.               SET PARAMETER ID 'EXN' FIELD i_userexit-modname.
  1202.               CALL TRANSACTION 'SE18' AND SKIP FIRST SCREEN.
  1203.             WHEN 'BusTrEvent'.
  1204.               SUBMIT rfopfi00 WITH event = i_userexit-modname(8) AND
  1205.               RETURN.
  1206.             WHEN OTHERS.
  1207.               MESSAGE s030(cj). "Navigation not possible
  1208.           ENDCASE.
  1209.         WHEN 'T_USEREXIT-MODATTR-NAME'.
  1210.           IF NOT i_userexit-modattr-name IS INITIAL.
  1211.             SET PARAMETER ID 'MON_KUN' FIELD i_userexit-modattr-name.
  1212.             CALL TRANSACTION 'CMOD'.
  1213.           ELSE.
  1214.             MESSAGE s030(cj)."Navigation not possible
  1215.           ENDIF.
  1216.         WHEN OTHERS.
  1217.           MESSAGE s030(cj)."Navigation not possible
  1218.       ENDCASE.
  1219.   ENDCASE.
  1220. ENDFORM. "user_command
  1221.  
  1222. *&--------------------------------------------------------------------&*
  1223. *& AT LINE-SELECTION ௥*
  1224. *&--------------------------------------------------------------------&*
  1225.  
  1226. AT LINE-SELECTION.
  1227.  
  1228.   GET CURSOR FIELD w_fsel.
  1229.   CASE w_fsel.
  1230.     WHEN 'I_USEREXIT-MODNAME'.
  1231.       CASE i_userexit-type.
  1232.         WHEN 'Enhancement'.
  1233.           SET PARAMETER ID 'MON' FIELD i_userexit-modname.
  1234.           CALL TRANSACTION 'SMOD'.
  1235.         WHEN 'BADI'.
  1236.           SET PARAMETER ID 'EXN' FIELD i_userexit-modname.
  1237.           CALL TRANSACTION 'SE18' AND SKIP FIRST SCREEN.
  1238.         WHEN 'BusTrEvent'.
  1239.           SUBMIT rfopfi00 WITH event = i_userexit-modname(8) AND RETURN.
  1240.         WHEN OTHERS.
  1241.           MESSAGE s030(cj)."Navigation not possible
  1242.       ENDCASE.
  1243.     WHEN 'I_USEREXIT-MODATTR-NAME'.
  1244.       IF NOT i_userexit-modattr-name IS INITIAL.
  1245.         SET PARAMETER ID 'MON_KUN' FIELD i_userexit-modattr-name.
  1246.         CALL TRANSACTION 'CMOD'.
  1247.       ELSE.
  1248.         MESSAGE s030(cj)."Navigation not possible
  1249.       ENDIF.
  1250.     WHEN OTHERS.
  1251.       MESSAGE s030(cj)."Navigation not possible
  1252.   ENDCASE.
  1253. *&--------------------------------------------------------------------&*
  1254.  
  1255. *& AT SELECTION-SCREEN &*
  1256.  
  1257. *&--------------------------------------------------------------------&*
  1258.  
  1259. AT SELECTION-SCREEN ON RADIOBUTTON GROUP rad1.
  1260.   "grey-out checkboxes if alv selectedat selection-screen output.
  1261.  
  1262.   LOOP AT SCREEN.
  1263.     IF p_alv = c_x.
  1264.       IF screen-group1 = 'A01'.
  1265.         screen-input = '0'.
  1266.         MODIFY SCREEN.
  1267.       ENDIF.
  1268.     ELSE.
  1269.       IF screen-group1 = 'A01'.
  1270.         screen-input = '1'.
  1271.         MODIFY SCREEN.
  1272.       ENDIF.
  1273.     ENDIF.
  1274.   ENDLOOP.
  1275. *---------------------------------------------------------------------*
  1276. </source>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement