User-exits: como localizarlas.


Como ya sabeís, las user-exits son la puerta de atras que nos deja abierta Sap en muchas transacciones para poder personalizar el comportamiento del sistema (con limitaciones) en ciertos aspectos y poder cambiar la forma de actuar de las aplicaciones.

Normalmente, para poder localizar una exit, tiramos de la transacción SMOD, donde podemos consultar las que Sap ha definido, los componentes que tienen y algo de documentación (tambien suele haber información en las notas de OSS o en el SDN). La documentación solo esta disponible en Ingles, asi que es necesario logarse en ese idioma para poder consultarla.

Una vez localizada la user-exit, desarrollamos el correspondiente proyecto de ampliación con la transacción CMOD. Aquí incluimos nuestro código en la puerta que ha dejado Sap y lo personalizamos a nuestra conveniencia. De esta forma podemos añadir validaciones, incluir actualizaciones en tablas de cliente o añadir campos en las pantallas estandar.

Se echa de menos tener una herramienta más rápida para poder buscar, a partir de una transacción, las user-exits disponibles y así hacer más fácil la labor de encontrar si hay alguna que nos vale, y personalizarla a continuación.

Para esto, os dejo un programa Abap que he encontrado en el blog de Daniel Panaro y que nos facilita esta tarea.

*&———————————————————————*
*& Report ZUSER_EXIT
*&
*&———————————————————————*
*&
*&
*&———————————————————————*

REPORT  ZUSER_EXIT.
tables : tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir.
tables : tstct.
data : jtab like tadir occurs 0 with header line.
data : field1(30).
data : v_devclass like tadir-devclass.
parameters : p_tcode like tstc-tcode obligatory.

select single * from tstc where tcode eq p_tcode.
if sy-subrc eq 0.
 select single * from tadir where pgmid = 'R3TR'
 and object = 'PROG'
 and obj_name = tstc-pgmna.
 move : tadir-devclass to v_devclass.
 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.

 move : tadir-devclass to v_devclass.
 endif.
 endif.
 select * from tadir into table jtab
 where pgmid = 'R3TR'
 and object = 'SMOD'
 and devclass = v_devclass.
 select single * from tstct where sprsl eq sy-langu and
 tcode eq p_tcode.
 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 input on,
 95 sy-vline.
 hide: jtab-obj_name.
 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.
else.
 format color col_negative intensified on.
 write:/(95) 'Transaction Code Does Not Exist'.
endif.

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

 set parameter id 'MON' field jtab-obj_name.
 call transaction 'SMOD' and skip first   screen.

PD: Sap sigue desarrollando la forma de personalizar el estandar, a través de las Badis o de los Enhacements, más relacionados con la programación orientada a objetos, y que en algunas ocasiones superan las limitaciones de las user-exits (como no poder tener varias implementaciones de la misma exit, pues al fin y al cabo son un simple modulo de funcion, que en ocasiones se llama desde varios sitios y en donde tenemos que meter mucho codigo para controlar situaciones muy variadas).

Esta entrada fue publicada en Abap, Sap Basis. Guarda el enlace permanente.

5 respuestas a User-exits: como localizarlas.

  1. Pingback: Truco 7. Uso de User-exits para verificaciones en datos maestros. « Notas y trucos SAP (Bitacora)

  2. Pingback: User-exits, ampliaciones, badis,…: como localizarlas (II). « Notas y trucos SAP (Bitacora)

  3. Pingback: User-exits, ampliaciones, badis,…: como localizarlas (II). « Blog en pruebas

  4. Sandra dijo:

    Dani !!!
    Perfecto tu aporte!!!
    Saludos
    Sandra

  5. Pingback: Cómo buscar user exits – The lazy Abaper

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.