首页 > 代码库 > ABAP 程序查找增强 2 (网上找的)

ABAP 程序查找增强 2 (网上找的)

*&--------------------------------------------------------------------&**& Report: Z_USEREXIT (V9) &**& PJA Consultancy Services (www.pjas.com) &**&--------------------------------------------------------------------&**& This report attmpts to find Enhancements, Program-Exits, BADIs &**& and Business Transaction Events in a particular program/tcode. &**& Last updated: 09 May 2007 &**&--------------------------------------------------------------------&**& Selection Texts:*& P_ALV ALV format*& P_AUTH Include authority-check search*& P_BADI Display BADIs*& P_BTE Display business trans events*& P_DEVC Show development class exits*& P_EXIT Display user exits*& P_FUNC Show function modules*& P_LIMIT Limit no. of submits to search*& P_LST Standard list format*& P_PNAME Program name*& P_PROG Display program exits*& P_SUBM Show submits*& P_TCODE Transaction code*& P_TEXT Search for text*& P_WFLOW Display workflow links*&--------------------------------------------------------------------&**& Text symbols:*& M01 Enter TCode or program*& M02 Enter at least one scope criteria*& S01 Selection data (TCode takes precedence over program name)*& S02 Scope criteria*& S03 Display criteria*&--------------------------------------------------------------------&*report  z_userexitno  standard  page  headingline-size  201 .tables : sxs_attr, tobjt, tstct, "TCode texts trdirt, "Program texts sxc_exit. "BADI exitstype-pools: slis. "Globale Typen fьr generische Listbausteinedata : tabix like  sy-tabix, w_linnum type  i , w_off type  i , w_index like  sy-tabix, w_include like  trdir-name, w_prog like  trdir-name, w_incl like  trdir-name, w_area like  rs38l-area, w_level, w_str(50) type  c , w_cnt(2) type  c , w_funcname like  tfdir-funcname, w_fsel like  sy-ucomm, " Determination of screen field w_gridtxt(70) type  c . "ALV grid titleconstants : c_fmod(40) type  c  value  Function modules searched:  , c_subm(40) type  c  value  Submit programs searched:  , c_devc(60) type  c  value  User-exits from development classes in function modules , c_col1(12) type  c  value  Enhanmt Type , c_col2(40) type  c  value  Enhancement , c_col3(30) type  c  value  Program/Include , c_col4(20) type  c  value  Enhancement Name , c_col5(40) type  c  value  Enhancement Description , c_col6(8) type  c  value  Project , c_col7(1) type  c  value  S , c_col8(12) type  c  value  ChangeName , c_col9(10) type  c  value  ChangeDate , c_x type  c  value  X .* Work Areas: ABAP Workbenchdata : begin  of  wa_d010inc.data : master type  d010inc-master.data : end  of  wa_d010inc.data : begin  of  wa_tfdir.data : funcname type  tfdir-funcname, pname type  tfdir-pname,include  type  tfdir-include .data : end  of  wa_tfdir.data : begin  of  wa_tadir.data : devclass type  tadir-devclass.data : end  of  wa_tadir.data : begin  of  wa_tstc.data : pgmna type  tstc-pgmna.data : end  of  wa_tstc.data : begin  of  wa_tstcp.data : param type  tstcp-param.data : end  of  wa_tstcp.data : begin  of  wa_enlfdir.data : area type  enlfdir-area.data : end  of  wa_enlfdir.* Work Areas: BADIsdata : begin  of  wa_sxs_attr.data : exit_name type  sxs_attr-exit_name.data : end  of  wa_sxs_attr.data : begin  of  wa_sxs_attrt.data : text  type  sxs_attrt-text .data : end  of  wa_sxs_attrt.* Work Areas: Enhancementsdata : begin  of  wa_modsap.data : member type  modsap-member.data : end  of  wa_modsap.data : begin  of  wa_modsapa.data : name type  modsapa-name.data : end  of  wa_modsapa.data : begin  of  wa_modsapt.data : modtext type  modsapt-modtext.data : end  of  wa_modsapt.* Work Areas: Business Transaction Eventsdata : begin  of  wa_tbe01t.data : text1 type  tbe01t-text1.data : end  of  wa_tbe01t.data : begin  of  wa_tps01t.data : text1 type  tps01t-text1.data : end  of  wa_tps01t.* user-exitstypes : begin  of  ty_mod, member like  modact-member, name like  modact-name, status like  modattr-status, anam like  modattr-anam, adat like  modattr-adat,end  of  ty_mod.data : w_mod type  ty_mod.types : begin  of  t_userexit,type(12) type c, pname like  trdir-name, txt(300), level type  c , modname(30) type  c , modtext(60) type  c , modattr type  ty_mod, colour(4) type  c ,end  of  t_userexit.data : i_userexit type  standard  table  of  t_userexit with  header  line .* Function module developmnet classestypes : begin  of  t_devclass, clas like  trdir-clas,end  of  t_devclass.data : i_devclass type  standard  table  of  t_devclass with  header  line .* Submit programstypes : begin  of  t_submit, pname like  trdir-name, level, done,end  of  t_submit.data : i_submit type  standard  table  of  t_submit with  header  line .* Source codetypes : begin  of  t_sourcetab, "#EC * (SLIN lьgt!)line(200), "#EC * (SLIN lьgt!)end  of  t_sourcetab. "#EC * (SLIN lьgt!)data : sourcetab type  standard  table  of  t_sourcetab with  header  line .data  c_overflow(30000) type  c .* Description of an ABAP/4 source analysis token*data: i_stoken type standard table of stokex with header line.data : i_stoken type  standard  table  of  stoken with  header  line .data  wa_stoken like  i_stoken.* Description of an ABAP/4 source analysis statementdata : i_sstmnt type  standard  table  of  sstmnt with  header  line ."#EC NEEDED* keywords for searching ABAP codetypes : begin  of  t_keywords, word(30),end  of  t_keywords.data : keywords type  standard  table  of  t_keywords with  header  line .* function modules within programtypes : begin  of  t_fmodule, name like  rs38l-name, pname like  trdir-name, pname2 like  trdir-name, level, bapi, done,end  of  t_fmodule.data : i_fmodule type  standard  table  of  t_fmodule with  header  line .* ALV definitionsdata  i_fieldcat type  slis_t_fieldcat_alv with  header  line .data  i_layout type  slis_layout_alv.data  i_sort type  slis_t_sortinfo_alv with  header  line .*&--------------------------------------------------------------------&**& Selection Options &**&--------------------------------------------------------------------&*selection-screen  begin  of  block  selscr1 with  frame  title  text-s01.parameter : p_pname like  trdir-name, p_tcode like  syst-tcode, p_limit(4) type  n default  500 . selection-screen  skip . selection-screen  end  of  block  selscr1. selection-screen  begin  of  block  selscr2 with  frame  title  text-s02.parameter : p_badi as  checkbox  default  c_x, p_bte as  checkbox  default  c_x, p_exit as  checkbox  default  c_x, p_prog as  checkbox  default  c_x, p_wflow as  checkbox , p_auth as  checkbox . selection-screen  skip .parameter : p_text(40) type  c . selection-screen  end  of  block  selscr2. selection-screen  begin  of  block  selscr3 with  frame  title  text-s03.parameter : p_alv radiobutton  group  rad1 default  X , p_lst radiobutton  group  rad1. selection-screen  skip .parameter : p_devc like  rihea-dy_ofn default     modif id  a01, p_func like  rihea-dy_ofn default     modif id  a01, p_subm like  rihea-dy_ofn default     modif id  a01. selection-screen  end  of  block  selscr3.*&--------------------------------------------------------------------&**& START-OF-SELECTION &**&--------------------------------------------------------------------&*start-of-selection.if  p_pname is  initial  and  p_tcode is  initial .message  i000(g01) with  text-m01.stop .endif .if  p_badi is  initial  and p_exit is  initial  and p_bte is  initial  and p_wflow is  initial  and p_auth is  initial  and p_prog is  initial .message  i000(g01) with  text-m02.stop .endif .* ensure P_LIMIT is not zero.if  p_limit = 0 . p_limit = 1 .endif .perform  data_select.perform  get_submit_data.perform  get_fm_data.perform  get_additional_data.perform  data_display.*&--------------------------------------------------------------------&**& Form DATA_SELECT &**&--------------------------------------------------------------------&**& &**&--------------------------------------------------------------------&*form  data_select.* data selection message to sap guicall  function  SAPGUI_PROGRESS_INDICATOR destination SAPGUI keeping logical unit  of  workEXPORTINGtext  = Get programs/includes  "#EC NOTEXTEXCEPTIONS system_failure communication_failure . "#EC ** get TCode name for ALV grid titleclear  w_gridtxt.if  not  p_tcode is  initial .select  single  * from  tstct where  tcode = p_tcodeand  sprsl = sy-langu.concatenate  TCode:  p_tcode tstct-ttext into  w_gridtxtseparated  by  space.endif .* get program name for ALV grid titleif  not  p_pname is  initial .select  single  * from  trdirt where  name = p_pnameand  sprsl = sy-langu.concatenate  Program:  p_pname tstct-ttext into  w_gridtxtseparated  by  space.endif .* determine search words keywords-word = CALL .append  keywords. keywords-word = FORM .append  keywords. keywords-word = PERFORM .append  keywords. keywords-word = SUBMIT .append  keywords. keywords-word = INCLUDE .append  keywords. keywords-word = AUTHORITY-CHECK .append  keywords.if  not  p_tcode is  initial .* get program name from TCodeselect  single  pgmna from  tstc into  wa_tstc-pgmnawhere  tcode eq  p_tcode.if  not  wa_tstc-pgmna is  initial . p_pname = wa_tstc-pgmna.* TCode does not include program name, but does have reference TCodeelse .select  single  param from  tstcp into  wa_tstcp-paramwhere  tcode eq  p_tcode.if  sy-subrc = 0 .check  wa_tstcp-param(1) = / .check  wa_tstcp-param+1(1) = * .if  wa_tstcp-param ca    .endif . w_off = sy-fdpos + 1 .subtract  2  from  sy-fdpos.if  sy-fdpos gt  0 . p_tcode = wa_tstcp-param+2(sy-fdpos).endif .select  single  pgmna from  tstc into  wa_tstc-pgmnawhere  tcode eq  p_tcode. p_pname = wa_tstc-pgmna.if  sy-subrc <> 0 .message  s110(/saptrx/asc) with  No program found for:   p_tcode."#EC NOTEXTstop .endif .else .message  s110(/saptrx/asc) with  No program found for:   p_tcode."#EC NOTEXTstop .endif .endif .endif .* Call customer-function aus Program codingread  report  p_pname into  sourcetab.if  sy-subrc > 0 .message  e017(enhancement) with  p_pname raising  no_program."#EC *endif .*scan abap-source sourcetab tokens into i_stoken*statements into i_sstmnt*keywords from keywords*overflow into c_overflow*with ANALYSIS. "#EC**********************************   scan  abap-source sourcetab tokens     into  i_stoken                              statements into  i_sstmnt                              keywords   from  keywords                              overflow into  c_overflow                              with  includes.                 "#EC**********************************if  sy-subrc > 0 . "keine/syntakt. falsche Ablauflog./Fehler im Skannermessage  e130(enhancement) raising  syntax_error. "#ECendif .* check I_STOKEN for entriesclear  w_linnum.describe  table  i_stoken lines  w_linnum.if  w_linnum gt  0 . w_level = 0 . w_prog = ‘‘ . w_incl = ‘‘ .perform  data_search tables  i_stoken using  w_level w_prog w_incl.endif .endform . "DATA_SELECT*&--------------------------------------------------------------------&**& Form GET_FM_DATA # &**&--------------------------------------------------------------------&**& &**&--------------------------------------------------------------------&*form  get_fm_data.* data selection message to sap guicall  function  SAPGUI_PROGRESS_INDICATOR destination SAPGUI keeping logical unit  of  workEXPORTINGtext  = Get function module data  "#EC NOTEXTEXCEPTIONS system_failure communication_failure . "#EC ** Function module datasort  i_fmodule by  name.delete  adjacent  duplicates  from  i_fmodule comparing  name.loop  at  i_fmodule where  done ne  c_x.clear : i_stoken, i_sstmnt, sourcetab, wa_tfdir, w_include .refresh : i_stoken, i_sstmnt, sourcetab.clear  wa_tfdir.select  single  funcname pname include  from  tfdir into  wa_tfdirwhere  funcname = i_fmodule-name.check  sy-subrc = 0 .call  function  FUNCTION_INCLUDE_SPLITEXPORTINGprogram  = wa_tfdir-pnameIMPORTINGgroup  = w_area.concatenate  L  w_area U  wa_tfdir-include  into  w_include. i_fmodule-pname = w_include. i_fmodule-pname2 = wa_tfdir-pname.modify  i_fmodule.read  report  i_fmodule-pname into  sourcetab.if  sy-subrc = 0 .scan  abap-source sourcetab tokens into  i_stoken statements into  i_sstmnt keywords from  keywordswith  INCLUDES.if  sy-subrc > 0 .message  e130(enhancement) raising  syntax_error.endif .* check i_stoken for entriesclear  w_linnum.describe  table  i_stoken lines  w_linnum.if  w_linnum gt  0 . w_level = 1 . w_prog = i_fmodule-pname2. w_incl = i_fmodule-pname.perform  data_search tables  i_stoken using  w_level w_prog w_incl.endif .endif .endloop .* store development classesif  p_devc = c_x.loop  at  i_fmodule.clear : wa_tadir, wa_enlfdir.select  single  area from  enlfdir into  wa_enlfdir-areawhere  funcname = i_fmodule-name.check  not  wa_enlfdir-area is  initial .select  single  devclass into  wa_tadir-devclassfrom  tadir where  pgmid = R3TRand  object = FUGRand  obj_name = wa_enlfdir-area.check  not  wa_tadir-devclass is  initial .move  wa_tadir-devclass to  i_devclass-clas.append  i_devclass. i_fmodule-done = c_x.modify  i_fmodule.endloop .sort  i_devclass.delete  adjacent  duplicates  from  i_devclass.endif .endform . "GET_FM_DATA*&--------------------------------------------------------------------&**& Form GET_SUBMIT_DATA &**&--------------------------------------------------------------------&**& &**&--------------------------------------------------------------------&*form  get_submit_data.* data selection message to sap guicall  function  SAPGUI_PROGRESS_INDICATOR destination SAPGUI keeping logical unit  of  workEXPORTINGtext  = Get submit data  "#EC NOTEXTEXCEPTIONS system_failure communication_failure . "#EC *sort  i_submit.delete  adjacent  duplicates  from  i_submit comparing  pname. w_level = 0 .loop  at  i_submit where  done ne  c_x.clear : i_stoken, i_sstmnt, sourcetab.refresh : i_stoken, i_sstmnt, sourcetab.read  report  i_submit-pname into  sourcetab.if  sy-subrc = 0 .scan  abap-source sourcetab tokens into  i_stoken statements into  i_sstmnt keywords from  keywordswith  includes.if  sy-subrc > 0 .* message e130(enhancement) raising syntax_error.continue .endif .* check i_stoken for entriesclear  w_linnum.describe  table  i_stoken lines  w_linnum.if  w_linnum gt  0 . w_prog = i_submit-pname. w_incl = ‘‘ .perform  data_search tables  i_stoken using  w_level w_prog w_incl.endif .endif .* restrict number of submit program selected for processingdescribe  table  i_submit lines  w_linnum.if  w_linnum ge  p_limit. w_level = 1 .endif . i_submit-done = c_x.modify  i_submit.endloop .endform . "GET_SUBMIT_DATA*&--------------------------------------------------------------------&**& Form DATA_SEARCH &**&--------------------------------------------------------------------&**& &**&--------------------------------------------------------------------&*form  data_search tables  p_stoken structure  stokenusing  p_level l_prog l_incl.loop  at  p_stoken.clear  i_userexit.* Workflowif  p_wflow = c_x.if  p_level eq  1 . " do not perform for function modules (2nd pass)if  p_stoken-str+1(16) cs  SWE_EVENT_CREATE .replace  all  occurrences  of  ‘‘‘‘  in  p_stoken-str with  ‘‘ . i_userexit-type  = WorkFlow . i_userexit-txt = p_stoken-str.concatenate  l_prog /  l_incl into  i_userexit-pname.append  i_userexit.endif .endif .endif . tabix = sy-tabix + 1 . i_userexit-level = p_level.if  i_userexit-level = 0 .if  l_incl is  initial . i_userexit-pname = p_pname.else .concatenate  p_pname -  l_incl into  i_userexit-pname.endif .else .if  l_incl is  initial . i_userexit-pname = l_prog.else .concatenate  l_prog -  l_incl into  i_userexit-pname.endif .endif .* AUTHORITY-CHECKSif  p_auth = c_x.if  p_stoken-str eq  AUTHORITY-CHECK .check  p_level eq  0 . " do not perform for function modules (2nd pass) w_index = sy-tabix + 2 .read  table  p_stoken index  w_index into  wa_stoken.check  not  wa_stoken-str cs  STRUCTURE .check  not  wa_stoken-str cs  SYMBOL .read  table  i_submit with  key  pname = wa_stoken-str.if  sy-subrc <> 0 . i_userexit-pname = i_submit-pname. i_userexit-type  = AuthCheck . i_userexit-txt = wa_stoken-str.replace  all  occurrences  of  ‘‘‘‘  in  i_userexit-txt with  space.clear  tobjt.select  single  * from  tobjt where  object = i_userexit-txtand  langu = sy-langu. i_userexit-modname = AUTHORITY-CHECK . i_userexit-modtext = tobjt-ttext.append  i_userexit.endif .endif .endif .* Text searchesif  not  p_text is  initial .if  p_stoken-str cs  p_text. i_userexit-pname = i_submit-pname. i_userexit-type  = TextSearch . i_userexit-txt = wa_stoken-str. i_userexit-modname = Text Search . i_userexit-modtext = p_stoken-str.append  i_userexit.endif .endif .* Include (SE38)if  p_stoken-str eq  INCLUDE .check  p_level eq  0 . " do not perform for function modules (2nd pass) w_index = sy-tabix + 1 .read  table  p_stoken index  w_index into  wa_stoken.check  not  wa_stoken-str cs  STRUCTURE .check  not  wa_stoken-str cs  SYMBOL .read  table  i_submit with  key  pname = wa_stoken-str.if  sy-subrc <> 0 . i_submit-pname = wa_stoken-str. i_submit-level = p_level.append  i_submit.endif .endif .* Enhancements (SMOD)if  p_exit = c_x.if  p_stoken-str eq  CUSTOMER-FUNCTION .clear  w_funcname.read  table  p_stoken index  tabix.translate  p_stoken-str using  ‘‘‘  .condense  p_stoken-str.if  l_prog is  initial .concatenate  EXIT  p_pname p_stoken-str into  w_funcnameseparated  by  _ .else .concatenate  EXIT  l_prog p_stoken-str into  w_funcnameseparated  by  _ .endif .select  single  member from  modsap into  wa_modsap-memberwhere  member = w_funcname.if  sy-subrc = 0 . " check for valid enhancement i_userexit-type  = Enhancement . i_userexit-txt = w_funcname.append  i_userexit.else .clear  wa_d010inc.select  single  master into  wa_d010inc-masterfrom  d010incwhere  include  = l_prog.concatenate  EXIT  wa_d010inc-master p_stoken-str into  w_funcnameseparated  by  _ . i_userexit-type  = Enhancement . i_userexit-txt = w_funcname.endif .endif .endif .* BADIs (SE18)if  p_badi = c_x.if  p_stoken-str cs  cl_exithandler= . w_index = sy-tabix + 4 .read  table  p_stoken index  w_index into  wa_stoken. i_userexit-txt = wa_stoken-str.replace  all  occurrences  of  ‘‘‘‘  in  i_userexit-txt with  space. i_userexit-type  = BADI .clear  sxs_attr. " ensure a real BADIselect  single  * from  sxs_attr where  exit_name = i_userexit-txt.if  sy-subrc = 0 .append  i_userexit.endif .endif .endif .* Business transaction events (FIBF)if  p_bte = c_x.if  p_stoken-str cs  OPEN_FI_PERFORM . i_userexit-type  = BusTrEvent . i_userexit-txt = p_stoken-str.replace  all  occurrences  of  ‘‘‘‘  in  i_userexit-txt with  space. i_userexit-modname = i_userexit-txt+16(8).case  i_userexit-txt+25(1).when  E .clear  wa_tbe01t.select  single  text1 into  wa_tbe01t-text1 from  tbe01twhere  event  = i_userexit-txt+16(8)and  spras = sy-langu.if  wa_tbe01t-text1 is  initial . i_userexit-modtext = <Not active> . "#EC NOTEXTelse . i_userexit-modtext = wa_tbe01t-text1.endif . i_userexit-modname+8  = /P&S . "#EC NOTEXTwhen  P .clear  wa_tps01t.select  single  text1 into  wa_tps01t-text1 from  tps01twhere  procs = i_userexit-txt+16(8)and  spras = sy-langu. i_userexit-modtext = wa_tps01t-text1. i_userexit-modname+8  = /Process .endcase .append  i_userexit.endif .endif .* Program exits (SE38)if  p_prog = c_x.if  p_stoken-str cs  USEREXIT_ .check  not  p_stoken-str cs  - . " ensure not USEREXIT_XX-XXXcheck  not  p_stoken-str cs  ( . " ensure not SUBMIT_XX(X) i_userexit-type  = Program Exit . i_userexit-txt = p_stoken-str.replace  all  occurrences  of  ‘‘‘‘  in  i_userexit-txt with  space.append  i_userexit.endif .endif .* Submit programs (SE38)if  p_stoken-str cs  SUBMIT .check  p_level eq  0 . " do not perform for function modules (2nd pass)check  not  p_stoken-str cs  _ . " ensure not SUBMIT_XXX w_index = sy-tabix + 1 .read  table  p_stoken index  w_index into  wa_stoken.check  not  wa_stoken-str cs  _ . " ensure not SUBMIT_XXXreplace  all  occurrences  of  ‘‘‘‘  in  wa_stoken-str with  space.read  table  i_submit with  key  pname = wa_stoken-str.if  sy-subrc <> 0 . i_submit-pname = wa_stoken-str. i_submit-level = p_level.append  i_submit.endif .endif .* Perform routines (which reference external programs)if  p_stoken-str cs  PERFORM .check  p_level eq  0 . " do not perform for function modules (2nd pass) w_index = sy-tabix + 1 .read  table  p_stoken index  w_index into  wa_stoken.if  not  wa_stoken-ovfl is  initial . w_off = wa_stoken-off1 + 10 . w_str = c_overflow+w_off(30).find  )  in  w_str match offset w_off.if  sy-subrc = 0 . w_off = w_off + 1 . wa_stoken-str = w_str(w_off).endif .endif .check  wa_stoken-str cs  ( . w_off = 0 .while  sy-subrc = 0 .if  wa_stoken-str+w_off(1) eq  ( .replace  section  offset w_off length 1  of  wa_stoken-str with  ‘‘ .replace  all  occurrences  of  )  in  wa_stoken-str with  space.read  table  i_submit with  key  pname = wa_stoken-str.if  sy-subrc <> 0 . i_submit-pname = wa_stoken-str.append  i_submit.endif .exit .else .replace  section  offset w_off length 1  of  wa_stoken-str with  ‘‘ .shift  wa_stoken-str left  deleting leading  space.endif .endwhile .endif .* Function modules (SE37)if  p_stoken-str cs  FUNCTION .clear  i_fmodule.if  p_level eq  0 . " do not perform for function modules (2nd pass) w_index = sy-tabix + 1 .read  table  p_stoken index  w_index into  wa_stoken.if  wa_stoken-str cs  BAPI . i_fmodule-bapi = c_x.endif .replace  first  occurrence of  ‘‘‘‘  in  wa_stoken-str with  space.replace  first  occurrence of  ‘‘‘‘  in  wa_stoken-str with  space.if  sy-subrc = 4 . " didn‘t find 2nd quote (ie name truncated)clear  wa_tfdir.concatenate  wa_stoken-str %  into  wa_stoken-str.select  single  funcname into  wa_tfdir-funcname from  tfdirwhere  funcname like  wa_stoken-str.if  sy-subrc = 0 . i_fmodule-name = wa_tfdir-funcname.else .continue .endif .else . i_fmodule-name = wa_stoken-str.endif . i_fmodule-level = p_level.append  i_fmodule.endif .endif .endloop .endform . "DATA_SEARCH*&--------------------------------------------------------------------&**& Form GET_ADDITIONAL_DATA &**&--------------------------------------------------------------------&**& &**&--------------------------------------------------------------------&*form  get_additional_data.* data selection message to sap guicall  function  SAPGUI_PROGRESS_INDICATOR destination SAPGUI keeping logical unit  of  workEXPORTINGtext  = Get additional data  "#EC NOTEXTEXCEPTIONS system_failure communication_failure . "#EC *loop  at  i_userexit.* Workflowif  i_userexit-type  eq  WorkFlow .continue .endif .* Enhancement dataif  i_userexit-type  cs  Enh .clear : wa_modsapa.select  single  name into  wa_modsapa-name from  modsapwhere  member = i_userexit-txt.check  sy-subrc = 0 . i_userexit-modname = wa_modsapa-name.clear  wa_modsapt.select  single  modtext into  wa_modsapt-modtext from  modsaptwhere  name = wa_modsapa-nameand  sprsl = sy-langu. i_userexit-modtext = wa_modsapt-modtext.* Get the CMOD project nameclear  w_mod.select  single  modact~member modact~name modattr~status modattr~anam modattr~adatinto  w_modfrom  modact inner join  modattron  modattr~name = modact~namewhere  modact~member = wa_modsapa-nameand  modact~typ = space.if  sy-subrc = 0 . i_userexit-modattr = w_mod.endif .endif .* BADI dataif  i_userexit-type  eq  BADI .clear  wa_sxs_attr.select  single  exit_name into  wa_sxs_attr-exit_name from  sxs_attrwhere  exit_name = i_userexit-txt.if  sy-subrc = 0 . i_userexit-modname = i_userexit-txt.else . i_userexit-modname = Dynamic call . "#EC NOTEXTendif .clear  wa_sxs_attrt.select  single  text  into  wa_sxs_attrt-text  from  sxs_attrtwhere  exit_name = wa_sxs_attr-exit_nameand  sprsl = sy-langu. i_userexit-modtext = wa_sxs_attrt-text .endif .* BADI Implementationif  i_userexit-type  eq  BADI .clear  sxc_exit.select  COUNT( * ) from  sxc_exit where  exit_name = i_userexit-txt. w_cnt = sy-dbcnt.* determine id BADI is for interal or external useclear  sxs_attr.select  single  * from  sxs_attr where  exit_name = i_userexit-txt.if  sxs_attr-internal = X . wa_sxs_attrt-text  = SAP  .else . wa_sxs_attrt-text  = CUST .endif .* concatenate wa_sxs_attrt-text w_cnt into i_userexit-modattr-name* separated by space.write  wa_sxs_attrt-text  to  i_userexit-modattr-name.write  w_cnt to  i_userexit-modattr-name+5 .endif .modify  i_userexit.endloop .* get enhancements via program packageclear  wa_tadir.select  single  devclass into  wa_tadir-devclass from  tadirwhere  pgmid = R3TRand  object = PROGand  obj_name = p_pname.if  sy-subrc = 0 .clear : wa_modsapa, wa_modsapt.select  name from  modsapa into  wa_modsapa-namewhere  devclass = wa_tadir-devclass.select  single  modtext from  modsapt into  wa_modsapt-modtextwhere  name = wa_modsapa-nameand  sprsl = sy-langu.clear  i_userexit.read  table  i_userexit with  key  modname = wa_modsapa-name.if  sy-subrc <> 0 . i_userexit-modtext = wa_modsapt-modtext. i_userexit-type  = Enhancement . "#EC NOTEXT i_userexit-modname = wa_modsapa-name. i_userexit-txt = Determined from program DevClass ."#EC NOTEXT i_userexit-pname = Unknown . "#EC NOTEXTappend  i_userexit.endif .endselect .endif .* set row colour.loop  at  i_userexit.case  i_userexit-type .when  BADI . i_userexit-colour = C601 .when  Enhancement . i_userexit-colour = C501 .when  Program Exit . i_userexit-colour = C401 .when  WorkFlow . i_userexit-colour = C301 .when  BusTrEvent . i_userexit-colour = C201 .endcase .modify  i_userexit.endloop .endform . "GET_ADDITIONAL_DATA*&--------------------------------------------------------------------&**& Form DATA_DISPLAY &**&--------------------------------------------------------------------&**& &**&--------------------------------------------------------------------&*form  data_display.* data selection message to sap guicall  function  SAPGUI_PROGRESS_INDICATOR destination SAPGUI keeping logical unit  of  workEXPORTINGtext  = Prepare screen for display  "#EC NOTEXTEXCEPTIONS system_failure communication_failure . "#EC *sort  i_userexit by  type  txt modname.delete  adjacent  duplicates  from  i_userexit comparing  txt pname modname.* ensure records selected.describe  table  i_userexit lines  w_linnum.if  w_linnum = 0 .message  s003(g00). "No data records were selectedexit .endif .if  p_alv =   .* format headingswrite : Enhancements from main program:  , p_pname.write : Enhancements from TCode:  , p_tcode.write : 201‘‘ .uline .format  color  col_heading.write : / sy-vline, (12) c_col1, "Enhanmt Type sy-vline, (40) c_col2, "Enhancement sy-vline, (30) c_col3, "Program/Include sy-vline, (20) c_col4, "Enhancement name sy-vline, (40) c_col5, "Enhancement description sy-vline, (8) c_col6, "Project sy-vline, (1) c_col7, "S sy-vline, (12) c_col8, "ChangeName sy-vline, (10) c_col9, "ChangeDate sy-vline.format  reset .uline .* format linesloop  at  i_userexit.* set line colourcase  i_userexit-type .when  Enhancement .format  color  3  intensified  off.when  BADI .format  color  4  intensified  off.when  BusTrEvent .format  color  5  intensified  off.when  Program Exit .format  color  6  intensified  off.when  others .format  reset .endcase .write : / sy-vline, i_userexit-type , sy-vline, i_userexit-txt(40), sy-vline, i_userexit-pname(30), sy-vline, i_userexit-modname(20), sy-vline, i_userexit-modtext(40), sy-vline.write : i_userexit-modattr-name, sy-vline, i_userexit-modattr-status, sy-vline, i_userexit-modattr-anam, sy-vline, i_userexit-modattr-adat no-zero, sy-vline.hide : i_userexit-modname, i_userexit-type , i_userexit-modattr-name.endloop .format  reset .uline .* user-exits from development class of function modulesif  p_devc = c_x.write : /.write : / c_devc.write : 201‘‘ .uline  (90).write : 201‘‘ .loop  at  i_devclass.clear  wa_modsapa.select  name from  modsapa into  wa_modsapawhere  devclass = i_devclass-clas.select  single  name modtext into  corresponding fields  of  wa_modsaptfrom  modsaptwhere  name = wa_modsapa-nameand  sprsl = sy-langu.format  color  3  intensified  off.write : / sy-vline, (12) Enhancement , sy-vline, wa_modsapa-name, sy-vline, wa_modsapt-modtext, sy-vline.endselect .endloop .write : 201‘‘ .uline  (90).format  reset .endif .* display fuction modules used in programwrite  /.describe  table  i_fmodule lines  w_linnum.write : / c_fmod , at  35  w_linnum. "#EC NOTEXTwrite : 201‘‘ .if  p_func = c_x.uline  (38).write : 201‘‘ .loop  at  i_fmodule.write : sy-vline, i_fmodule-name, sy-vline, i_fmodule-bapi, sy-vline.write : 201‘‘ .endloop .write : 201‘‘ .uline  (38).endif .* display submit programs used in programwrite  /.describe  table  i_submit lines  w_linnum.write : / c_subm , at  35  w_linnum. "#EC NOTEXTwrite : 201‘‘ .if  p_subm = c_x.uline  (44).write : 201‘‘ .loop  at  i_submit.write : sy-vline, i_submit-pname, sy-vline.write : 201‘‘ .endloop .write : 201‘‘ .uline  (44).endif .* issue message with number of user-exits displayeddescribe  table  i_userexit lines  w_linnum.message  s697(56) with  w_linnum.else . " Show in alv format* issue message with number of user-exits displayeddescribe  table  i_userexit lines  w_linnum.message  s697(56) with  w_linnum.* Create field catalogperform  create_field_catalog using  TYPE  T_USEREXIT     Type .perform  create_field_catalog using  PNAME  T_USEREXIT     Prog#am name .perform  create_field_catalog using  TXT  T_USEREXIT     Enhancement .perform  create_field_catalog using  LEVEL  T_USEREXIT  c_x Level .perform  create_field_catalog using  MODNAME  T_USEREXIT     Enhancement name .perform  create_field_catalog using  MODTEXT  T_USEREXIT     Enhancement text .perform  create_field_catalog using  MODATTR-MEMBER  T_USEREXIT  c_x Member .perform  create_field_catalog using  MODATTR-NAME  T_USEREXIT     Project .perform  create_field_catalog using  MODATTR-STATUS  T_USEREXIT     Status .perform  create_field_catalog using  MODATTR-ANAM  T_USEREXIT     Changed by .perform  create_field_catalog using  MODATTR-ADAT  T_USEREXIT     Change date .* Layoutclear  i_layout. i_layout-colwidth_optimize = c_x. i_layout-info_fieldname = COLOUR .* Sortclear  i_sort. i_sort-fieldname = TYPE . i_sort-tabname = T_USEREXIT . i_sort-up  = c_x.append  i_sort.call  function  REUSE_ALV_GRID_DISPLAYEXPORTING i_callback_program = sy-cprog i_callback_user_command = USER_COMMAND is_layout = i_layout it_fieldcat = i_fieldcat[] it_sort = i_sort[] i_default = c_x i_save = A i_grid_title = w_gridtxtTABLES t_outtab = i_userexit.endif .* issue message with number of user-exits displayeddescribe  table  i_userexit lines  w_linnum.message  s697(56) with  w_linnum.endform . "DATA_DISPLAY*&---------------------------------------------------------------------&**& Form CREATE_FIELD_CATALOG &**&---------------------------------------------------------------------&*form  create_field_catalog using  p_fieldname p_tabname p_hide p_text. i_fieldcat-fieldname = p_fieldname. i_fieldcat-tabname = p_tabname. i_fieldcat-no_out = p_hide. i_fieldcat-seltext_l = p_text.append  i_fieldcat.endform . " CREATE_FIELD_CATALOG*&---------------------------------------------------------------------&**& Form CREATE_FIELD_CATALOG &**&---------------------------------------------------------------------&*form  user_command using  r_ucomm like  sy-ucomm rs_selfield type  slis_selfield.read  table  i_userexit index  rs_selfield-tabindex.check  sy-subrc = 0 .case  r_ucomm.when  &IC1 .case  rs_selfield-sel_tab_field.when  T_USEREXIT-MODNAME .read  table  i_userexit index  rs_selfield-tabindex.case  i_userexit-type .when  Enhancement .set  parameter  id  MON  field  i_userexit-modname.call  transaction  SMOD .when  BADI .set  parameter  id  EXN  field  i_userexit-modname.call  transaction  SE18  and  skip  first  screen .when  BusTrEvent .submit  rfopfi00 with  event  = i_userexit-modname(8) and  return .when  others .message  s030(cj). "Navigation not possibleendcase .when  T_USEREXIT-MODATTR-NAME .if  not  i_userexit-modattr-name is  initial .set  parameter  id  MON_KUN  field  i_userexit-modattr-name.call  transaction  CMOD .else .message  s030(cj)."Navigation not possibleendif .when  others .message  s030(cj)."Navigation not possibleendcase .endcase .endform . "user_command*&--------------------------------------------------------------------&**& AT LINE-SELECTION #**&--------------------------------------------------------------------&*at  line-selection.get  cursor  field  w_fsel.case  w_fsel.when  I_USEREXIT-MODNAME .case  i_userexit-type .when  Enhancement .set  parameter  id  MON  field  i_userexit-modname.call  transaction  SMOD .when  BADI .set  parameter  id  EXN  field  i_userexit-modname.call  transaction  SE18  and  skip  first  screen .when  BusTrEvent .submit  rfopfi00 with  event  = i_userexit-modname(8) and  return .when  others .message  s030(cj)."Navigation not possibleendcase .when  I_USEREXIT-MODATTR-NAME .if  not  i_userexit-modattr-name is  initial .set  parameter  id  MON_KUN  field  i_userexit-modattr-name.call  transaction  CMOD .else .message  s030(cj)."Navigation not possibleendif .when  others .message  s030(cj)."Navigation not possibleendcase .*&--------------------------------------------------------------------&**& AT SELECTION-SCREEN &**&--------------------------------------------------------------------&*at  selection-screen  on  radiobutton  group  rad1.* grey-out checkboxes if ALV selectedat  selection-screen  output .loop  at  screen .if  p_alv = c_x.if  screen-group1 = A01 .screen-input  = 0 .modify  screen .endif .else .if  screen-group1 = A01 .screen-input  = 1 .modify  screen .endif .endif .endloop .

 

ABAP 程序查找增强 2 (网上找的)