Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Finding user exit component

Former Member
0 Kudos
1,099

Hi,

I would like to know if u r given a program name and asked to find a user exit what is the step for that? Is it the transaction SMOD ? But how do u find in that?

Who creates these user exit components? Is it already there in SAP?

Thanx

Kelly

1 ACCEPTED SOLUTION

RichHeilman
Developer Advocate
Developer Advocate
0 Kudos
216

User exits are built into the Standard SAP code. You just activate them and insert your code into the include programs.

Here is a program that will list the user exits per transaction code. Not perfect, but it may help.



report z_find_user_exit no standard page heading.

tables: tstc, tadir, modsapt, modact,
        trdir, tfdir, enlfdir, tstct.

data : jtab like tadir occurs 0 with header line.
data : hotspot(30).

parameters : p_tcode like tstc-tcode obligatory.

at line-selection.
  get cursor field hotspot.
  check hotspot(4) eq 'JTAB'.
  set parameter id 'MON' field sy-lisel+1(10).
  call transaction 'SMOD' and skip first screen.

start-of-selection.

  perform get_data.
  perform write_list.


*---------------------------------------------------------------------*
*       FORM get_data                                                 *
*---------------------------------------------------------------------*
form get_data.

  select single * from tstc
              where tcode eq p_tcode.
  check sy-subrc eq 0.

  select single * from tadir
            where pgmid = 'R3TR'
              and object = 'PROG'
              and obj_name = tstc-pgmna.


  if sy-subrc ne 0.

    select single * from trdir
             where name = tstc-pgmna.
    if trdir-subc eq 'F'.
      select single * from tfdir
                     where pname = tstc-pgmna.
      select single * from enlfdir
                     where funcname = tfdir-funcname.
      select single * from tadir
                     where pgmid = 'R3TR'
                       and object = 'FUGR'
                       and obj_name eq enlfdir-area.
    endif.

  endif.

  select * from tadir into table jtab
             where pgmid = 'R3TR'
               and object = 'SMOD'
               and devclass = tadir-devclass.

  select single * from tstct
          where sprsl eq sy-langu
            and tcode eq p_tcode.

endform.

*---------------------------------------------------------------------*
*       FORM write_list                                               *
*---------------------------------------------------------------------*
form write_list.

  format color col_positive intensified off.
  write:/(19) 'Transaction Code - ',
  20(20) p_tcode,
  45(50) tstct-ttext.
  skip.
  if not jtab[] is initial.
    write:/(95) sy-uline.
    format color col_heading intensified on.
    write:/1 sy-vline,
    2 'Exit Name',
    21 sy-vline ,
    22 'Description',
    95 sy-vline.
    write:/(95) sy-uline.
    loop at jtab.
      select single * from modsapt
      where sprsl = sy-langu and
      name = jtab-obj_name.
      format color col_normal intensified off.
      write:/1 sy-vline,
      2 jtab-obj_name hotspot on,
      21 sy-vline ,
      22 modsapt-modtext,
      95 sy-vline.
    endloop.
    write:/(95) sy-uline.
    describe table jtab.
    skip.
    format color col_total intensified on.
    write:/ 'No of Exits:' , sy-tfill.
  else.
    format color col_negative intensified on.
    write:/(95) 'No User Exit exists'.
  endif.

endform.

Regards,

Rich Heilman

2 REPLIES 2

RichHeilman
Developer Advocate
Developer Advocate
0 Kudos
217

User exits are built into the Standard SAP code. You just activate them and insert your code into the include programs.

Here is a program that will list the user exits per transaction code. Not perfect, but it may help.



report z_find_user_exit no standard page heading.

tables: tstc, tadir, modsapt, modact,
        trdir, tfdir, enlfdir, tstct.

data : jtab like tadir occurs 0 with header line.
data : hotspot(30).

parameters : p_tcode like tstc-tcode obligatory.

at line-selection.
  get cursor field hotspot.
  check hotspot(4) eq 'JTAB'.
  set parameter id 'MON' field sy-lisel+1(10).
  call transaction 'SMOD' and skip first screen.

start-of-selection.

  perform get_data.
  perform write_list.


*---------------------------------------------------------------------*
*       FORM get_data                                                 *
*---------------------------------------------------------------------*
form get_data.

  select single * from tstc
              where tcode eq p_tcode.
  check sy-subrc eq 0.

  select single * from tadir
            where pgmid = 'R3TR'
              and object = 'PROG'
              and obj_name = tstc-pgmna.


  if sy-subrc ne 0.

    select single * from trdir
             where name = tstc-pgmna.
    if trdir-subc eq 'F'.
      select single * from tfdir
                     where pname = tstc-pgmna.
      select single * from enlfdir
                     where funcname = tfdir-funcname.
      select single * from tadir
                     where pgmid = 'R3TR'
                       and object = 'FUGR'
                       and obj_name eq enlfdir-area.
    endif.

  endif.

  select * from tadir into table jtab
             where pgmid = 'R3TR'
               and object = 'SMOD'
               and devclass = tadir-devclass.

  select single * from tstct
          where sprsl eq sy-langu
            and tcode eq p_tcode.

endform.

*---------------------------------------------------------------------*
*       FORM write_list                                               *
*---------------------------------------------------------------------*
form write_list.

  format color col_positive intensified off.
  write:/(19) 'Transaction Code - ',
  20(20) p_tcode,
  45(50) tstct-ttext.
  skip.
  if not jtab[] is initial.
    write:/(95) sy-uline.
    format color col_heading intensified on.
    write:/1 sy-vline,
    2 'Exit Name',
    21 sy-vline ,
    22 'Description',
    95 sy-vline.
    write:/(95) sy-uline.
    loop at jtab.
      select single * from modsapt
      where sprsl = sy-langu and
      name = jtab-obj_name.
      format color col_normal intensified off.
      write:/1 sy-vline,
      2 jtab-obj_name hotspot on,
      21 sy-vline ,
      22 modsapt-modtext,
      95 sy-vline.
    endloop.
    write:/(95) sy-uline.
    describe table jtab.
    skip.
    format color col_total intensified on.
    write:/ 'No of Exits:' , sy-tfill.
  else.
    format color col_negative intensified on.
    write:/(95) 'No User Exit exists'.
  endif.

endform.

Regards,

Rich Heilman

Former Member
0 Kudos
216

Hi Kelly,

SMOD, is where you can find the system modifications provided by SAP. CMOD is where you will implement them. If you are looking for all the enhancements provided, then go to CMOD, follow the menu, 'Utilities-->SAP Enhancements'. This will take you to a screen where if you just execute it, you will get all the enhancements provided by SAP.

It is always difficult to find a user exit if all you have is a program name or a transaction code, unless you do a program like Rich suggested. But even there, you will not be able to find user exits that are implemented as sub-routines(also called forms not sapscript forms). Most of the user exits are documented under the corresponding task under IMG structure. So use transaction code SPRO, go to the IMG structure, choose the application area that your program or transaction might be and then you should find a task that talks about enhancements. If you execute that task most often it will take you to CMOD and sometimes to SE38. But all you want to know is there in the documentation attached to the task. Then you can go to CMOD and see which components are there.

Srinivas