首页 > 其他 > 详细

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

时间:2014-12-19 09:59:20      阅读:362      评论:0      收藏:0      [点我收藏+]
*&--------------------------------------------------------------------&*
*& 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_userexit
no  standard  page  heading
line-size  201 .

tables : sxs_attr,
 tobjt,
 tstct, "TCode texts
 trdirt, "Program texts
 sxc_exit. "BADI exits

type-pools: slis. "Globale Typen fьr generische Listbausteine

data : 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 title

constants : 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 Workbench
data : 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: BADIs
data : 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: Enhancements
data : 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 Events
data : 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-exits
types : 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 classes
types : 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 programs
types : 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 code
types : 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 statement
data : i_sstmnt type  standard  table  of  sstmnt with  header  line ."#EC NEEDED

* keywords for searching ABAP code
types : begin  of  t_keywords,
 word(30),
end  of  t_keywords.
data : keywords type  standard  table  of  t_keywords with  header  line .

* function modules within program
types : 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 definitions
data  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 gui
call  function  SAPGUI_PROGRESS_INDICATOR
 destination SAPGUI
 keeping logical unit  of  work
EXPORTING
text  = Get programs/includes  "#EC NOTEXT
EXCEPTIONS
 system_failure
 communication_failure
 . "#EC *

* get TCode name for ALV grid title
clear  w_gridtxt.
if  not  p_tcode is  initial .
select  single  * from  tstct where  tcode = p_tcode
and  sprsl = sy-langu.
concatenate  TCode:  p_tcode tstct-ttext into  w_gridtxt
separated  by  space.
endif .
* get program name for ALV grid title
if  not  p_pname is  initial .
select  single  * from  trdirt where  name = p_pname
and  sprsl = sy-langu.
concatenate  Program:  p_pname tstct-ttext into  w_gridtxt
separated  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 TCode
select  single  pgmna from  tstc into  wa_tstc-pgmna
where  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 TCode
else .
select  single  param from  tstcp into  wa_tstcp-param
where  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-pgmna
where  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 NOTEXT
stop .
endif .
else .
message  s110(/saptrx/asc) with  No program found for:   p_tcode."#EC NOTEXT
stop .
endif .

endif .
endif .

* Call customer-function aus Program coding
read  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 Skanner
message  e130(enhancement) raising  syntax_error. "#EC
endif .

* check I_STOKEN for entries
clear  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 gui
call  function  SAPGUI_PROGRESS_INDICATOR
 destination SAPGUI
 keeping logical unit  of  work
EXPORTING
text  = Get function module data  "#EC NOTEXT
EXCEPTIONS
 system_failure
 communication_failure
 . "#EC *

* Function module data
sort  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_tfdir
where  funcname = i_fmodule-name.
check  sy-subrc = 0 .

call  function  FUNCTION_INCLUDE_SPLIT
EXPORTING
program  = wa_tfdir-pname
IMPORTING
group  = 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  keywords
with  INCLUDES.
if  sy-subrc > 0 .
message  e130(enhancement) raising  syntax_error.
endif .

* check i_stoken for entries
clear  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 classes
if  p_devc = c_x.
loop  at  i_fmodule.
clear : wa_tadir, wa_enlfdir.

select  single  area from  enlfdir into  wa_enlfdir-area
where  funcname = i_fmodule-name.
check  not  wa_enlfdir-area is  initial .

select  single  devclass into  wa_tadir-devclass
from  tadir where  pgmid = R3TR
and  object = FUGR
and  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 gui
call  function  SAPGUI_PROGRESS_INDICATOR
 destination SAPGUI
 keeping logical unit  of  work
EXPORTING
text  = Get submit data  "#EC NOTEXT
EXCEPTIONS
 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  keywords
with  includes.
if  sy-subrc > 0 .
* message e130(enhancement) raising syntax_error.
continue .
endif .

* check i_stoken for entries
clear  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 processing
describe  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  stoken
using  p_level l_prog l_incl.

loop  at  p_stoken.

clear  i_userexit.

* Workflow
if  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-CHECKS
if  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-txt
and  langu = sy-langu.
 i_userexit-modname = AUTHORITY-CHECK .
 i_userexit-modtext = tobjt-ttext.
append  i_userexit.
endif .
endif .
endif .

* Text searches
if  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_funcname
separated  by  _ .
else .
concatenate  EXIT  l_prog p_stoken-str into  w_funcname
separated  by  _ .
endif .
select  single  member from  modsap into  wa_modsap-member
where  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-master
from  d010inc
where  include  = l_prog.
concatenate  EXIT  wa_d010inc-master p_stoken-str into  w_funcname
separated  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 BADI
select  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  tbe01t
where  event  = i_userexit-txt+16(8)
and  spras = sy-langu.
if  wa_tbe01t-text1 is  initial .
 i_userexit-modtext = <Not active> . "#EC NOTEXT
else .
 i_userexit-modtext = wa_tbe01t-text1.
endif .
 i_userexit-modname+8  = /P&S . "#EC NOTEXT
when  P .
clear  wa_tps01t.
select  single  text1 into  wa_tps01t-text1 from  tps01t
where  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-XXX
check  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_XXX
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.
 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  tfdir
where  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 gui
call  function  SAPGUI_PROGRESS_INDICATOR
 destination SAPGUI
 keeping logical unit  of  work
EXPORTING
text  = Get additional data  "#EC NOTEXT
EXCEPTIONS
 system_failure
 communication_failure
 . "#EC *

loop  at  i_userexit.

* Workflow
if  i_userexit-type  eq  WorkFlow .
continue .
endif .



* Enhancement data
if  i_userexit-type  cs  Enh .
clear : wa_modsapa.
select  single  name into  wa_modsapa-name from  modsap
where  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  modsapt
where  name = wa_modsapa-name
and  sprsl = sy-langu.
 i_userexit-modtext = wa_modsapt-modtext.

* Get the CMOD project name
clear  w_mod.
select  single  modact~member modact~name modattr~status
 modattr~anam modattr~adat
into  w_mod
from  modact
 inner join  modattr
on  modattr~name = modact~name
where  modact~member = wa_modsapa-name
and  modact~typ = space.
if  sy-subrc = 0 .
 i_userexit-modattr = w_mod.
endif .
endif .


* BADI data
if  i_userexit-type  eq  BADI .
clear  wa_sxs_attr.
select  single  exit_name into  wa_sxs_attr-exit_name from  sxs_attr
where  exit_name = i_userexit-txt.
if  sy-subrc = 0 .
 i_userexit-modname = i_userexit-txt.
else .
 i_userexit-modname = Dynamic call . "#EC NOTEXT
endif .
clear  wa_sxs_attrt.
select  single  text  into  wa_sxs_attrt-text  from  sxs_attrt
where  exit_name = wa_sxs_attr-exit_name
and  sprsl = sy-langu.
 i_userexit-modtext = wa_sxs_attrt-text .
endif .

* BADI Implementation
if  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 use
clear  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 package
clear  wa_tadir.
select  single  devclass into  wa_tadir-devclass from  tadir
where  pgmid = R3TR
and  object = PROG
and  obj_name = p_pname.
if  sy-subrc = 0 .
clear : wa_modsapa, wa_modsapt.
select  name from  modsapa into  wa_modsapa-name
where  devclass = wa_tadir-devclass.
select  single  modtext from  modsapt into  wa_modsapt-modtext
where  name = wa_modsapa-name
and  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 NOTEXT
append  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 gui
call  function  SAPGUI_PROGRESS_INDICATOR
 destination SAPGUI
 keeping logical unit  of  work
EXPORTING
text  = Prepare screen for display  "#EC NOTEXT
EXCEPTIONS
 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 selected
exit .
endif .

if  p_alv =   .

* format headings
write : 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 lines
loop  at  i_userexit.
* set line colour
case  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 modules
if  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_modsapa
where  devclass = i_devclass-clas.
select  single  name modtext into  corresponding fields  of  wa_modsapt
from  modsapt
where  name = wa_modsapa-name
and  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 program
write  /.
describe  table  i_fmodule lines  w_linnum.
write : / c_fmod , at  35  w_linnum. "#EC NOTEXT
write : 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 program
write  /.
describe  table  i_submit lines  w_linnum.
write : / c_subm , at  35  w_linnum. "#EC NOTEXT
write : 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 displayed
describe  table  i_userexit lines  w_linnum.
message  s697(56) with  w_linnum.

else . " Show in alv format

* issue message with number of user-exits displayed
describe  table  i_userexit lines  w_linnum.
message  s697(56) with  w_linnum.

* Create field catalog
perform  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 .

* Layout
clear  i_layout.
 i_layout-colwidth_optimize = c_x.
 i_layout-info_fieldname = COLOUR .

* Sort
clear  i_sort.
 i_sort-fieldname = TYPE .
 i_sort-tabname = T_USEREXIT .
 i_sort-up  = c_x.
append  i_sort.

call  function  REUSE_ALV_GRID_DISPLAY
EXPORTING
 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_gridtxt
TABLES
 t_outtab = i_userexit.

endif .

* issue message with number of user-exits displayed
describe  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 possible
endcase .
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 possible
endif .
when  others .
message  s030(cj)."Navigation not possible
endcase .
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 possible
endcase .

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 possible
endif .

when  others .
message  s030(cj)."Navigation not possible

endcase .

*&--------------------------------------------------------------------&*
*& AT SELECTION-SCREEN &*
*&--------------------------------------------------------------------&*
at  selection-screen  on  radiobutton  group  rad1.

* grey-out checkboxes if ALV selected
at  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 (网上找的)

原文:http://www.cnblogs.com/charles-guo/p/4173179.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!