code for finding usr exits & badis

Upload: mohansoft

Post on 29-May-2018

236 views

Category:

Documents


1 download

TRANSCRIPT

  • 8/8/2019 Code for Finding Usr Exits & Badis

    1/21

    *& 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 textstrdirt, "Program texts

    sxc_exit. "BADI exits

    type-pools: slis. "Globale Typen fr 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 fieldw_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 fu

    nction 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',

  • 8/8/2019 Code for Finding Usr Exits & Badis

    2/21

    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: 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.

  • 8/8/2019 Code for Finding Usr Exits & Badis

    3/21

    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 lgt!)

    line(200), "#EC * (SLIN lgt!)end of t_sourcetab. "#EC * (SLIN lgt!)

    data: sourcetab type standard table of t_sourcetab with header line.data c_overflow(30000) type c.

    *Description of an ABAP/4 source analysis tokendata: i_stoken type standard table of stokex 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.

  • 8/8/2019 Code for Finding Usr Exits & Badis

    4/21

    *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-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.

    if p_pname is initial and p_tcode is initial.message i000(g01) with text-m01.stop.

    endif.

    if p_badi is initial andp_exit is initial andp_bte is initial andp_wflow is initial andp_auth is initial andp_prog is initial.

    message i000(g01) with text-m02.stop.

    endif.

  • 8/8/2019 Code for Finding Usr Exits & Badis

    5/21

    *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.

    *data selection message to sap guicall function 'SAPGUI_PROGRESS_INDICATOR'destination 'SAPGUI'keeping logical unit of work

    EXPORTINGtext = 'Get programs/includes' "#EC NOTEXTEXCEPTIONSsystem_failurecommunication_failure

    . "#EC *

    *get TCode name for ALV grid titleclear 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 titleif 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 wordskeywords-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-pgmna

    where tcode eq p_tcode.

  • 8/8/2019 Code for Finding Usr Exits & Badis

    6/21

    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-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

    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_stokenstatements into i_sstmntkeywords from keywordsoverflow into c_overflowwith includes. "#EC

    if sy-subrc > 0. "keine/syntakt. falsche Ablauflog./Fehler im Skannermessage e130(enhancement) raising syntax_error. "#EC

    endif.

    *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

  • 8/8/2019 Code for Finding Usr Exits & Badis

    7/21

    form get_fm_data.

    *data selection message to sap guicall function 'SAPGUI_PROGRESS_INDICATOR'destination 'SAPGUI'keeping logical unit of workEXPORTING

    text = 'Get function module data' "#EC NOTEXTEXCEPTIONSsystem_failurecommunication_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_tfdir

    where funcname = i_fmodule-name.check sy-subrc = 0.

    call function 'FUNCTION_INCLUDE_SPLIT'EXPORTINGprogram = wa_tfdir-pname

    IMPORTINGgroup = 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_stokenstatements into i_sstmntkeywords 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.

  • 8/8/2019 Code for Finding Usr Exits & Badis

    8/21

    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 = '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.

    *data selection message to sap gui

    call function 'SAPGUI_PROGRESS_INDICATOR'destination 'SAPGUI'keeping logical unit of workEXPORTINGtext = 'Get submit data' "#EC NOTEXT

    EXCEPTIONSsystem_failurecommunication_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_stokenstatements into i_sstmntkeywords from keywords

    with includes.if sy-subrc > 0.

    *message e130(enhancement) raising syntax_error.

  • 8/8/2019 Code for Finding Usr Exits & Badis

    9/21

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

  • 8/8/2019 Code for Finding Usr Exits & Badis

    10/21

    *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 p

    ass)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 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 pas

    s)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 ''' '.

  • 8/8/2019 Code for Finding Usr Exits & Badis

    11/21

    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 enhancementi_userexit-type = 'Enhancement'.i_userexit-txt = w_funcname.append i_userexit.

    else.clear wa_d010inc.select single master into wa_d010inc-master

    from 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 tbe01t

    where event = i_userexit-txt+16(8)and spras = sy-langu.

    if wa_tbe01t-text1 is initial.

    i_userexit-modtext = ''. "#EC NOTEXTelse.i_userexit-modtext = wa_tbe01t-text1.

  • 8/8/2019 Code for Finding Usr Exits & Badis

    12/21

    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 pas

    s)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 pas

    s)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.

  • 8/8/2019 Code for Finding Usr Exits & Badis

    13/21

    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.

    *data selection message to sap guicall function 'SAPGUI_PROGRESS_INDICATOR'

  • 8/8/2019 Code for Finding Usr Exits & Badis

    14/21

    destination 'SAPGUI'keeping logical unit of workEXPORTINGtext = 'Get additional data' "#EC NOTEXT

    EXCEPTIONSsystem_failurecommunication_failure

    . "#EC *

    loop at i_userexit.

    *Workflowif 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-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 modactinner join modattron modattr~name = modact~name

    where 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_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

  • 8/8/2019 Code for Finding Usr Exits & Badis

    15/21

    where 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 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-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 NOTEXTi_userexit-modname = wa_modsapa-name.i_userexit-txt = 'Determined from program DevClass'."#EC NOTEXTi_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'.

  • 8/8/2019 Code for Finding Usr Exits & Badis

    16/21

    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.

    *data selection message to sap guicall function 'SAPGUI_PROGRESS_INDICATOR'destination 'SAPGUI'keeping logical unit of work

    EXPORTINGtext = 'Prepare screen for display' "#EC NOTEXTEXCEPTIONSsystem_failurecommunication_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 Typesy-vline,

    (40) c_col2, "Enhancementsy-vline,

    (30) c_col3, "Program/Includesy-vline,

    (20) c_col4, "Enhancement namesy-vline,

    (40) c_col5, "Enhancement descriptionsy-vline,

    (8) c_col6, "Projectsy-vline,

    (1) c_col7, "Ssy-vline,

    (12) c_col8, "ChangeName

  • 8/8/2019 Code for Finding Usr Exits & Badis

    17/21

    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 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_modsapt

  • 8/8/2019 Code for Finding Usr Exits & Badis

    18/21

    from 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 program

    write /.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.

  • 8/8/2019 Code for Finding Usr Exits & Badis

    19/21

    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' ' ' 'Typ

    e'.perform create_field_catalog using 'PNAME' 'T_USEREXIT' ' ' 'Pro

    g?am name'.perform create_field_catalog using 'TXT' 'T_USEREXIT' ' ' 'Enh

    ancement'.perform create_field_catalog using 'LEVEL' 'T_USEREXIT' c_x 'Lev

    el'.perform create_field_catalog using 'MODNAME' 'T_USEREXIT' ' ' 'Enh

    ancement name'.perform create_field_catalog using 'MODTEXT' 'T_USEREXIT' ' ' 'Enh

    ancement 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'.

    *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_DISPLAY'EXPORTINGi_callback_program = sy-cprogi_callback_user_command = 'USER_COMMAND'is_layout = i_layoutit_fieldcat = i_fieldcat[]it_sort = i_sort[]i_default = c_xi_save = 'A'i_grid_title = w_gridtxt

    TABLESt_outtab = i_userexit.

    endif.

    *issue message with number of user-exits displayeddescribe table i_userexit lines w_linnum.

  • 8/8/2019 Code for Finding Usr Exits & Badis

    20/21

    message s697(56) with w_linnum.

    endform. "DATA_DISPLAY

    form create_field_catalog using p_fieldnamep_tabnamep_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 user_command using r_ucomm like sy-ucommrs_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.

    get cursor field w_fsel.

    case w_fsel.

  • 8/8/2019 Code for Finding Usr Exits & Badis

    21/21

    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 possibleendif.

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

    endcase.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....