Manual User Exit
January 31, 2023 | Author: Anonymous | Category: N/A
Short Description
Download Manual User Exit...
Description
User Exit 1. Búsqueda de User Exit 1.1. Método Método 1: Módulo de función
Entrar a la transacción SE93 y escribir la transacción de la que se desean buscar los user exit y dar click en el botón Display. FD01: mantenimiento de datos maestros de clientes.
Copiar en el portapapeles el nombre del programa:
Entrar a la transacción SE37 y buscar (F4) los módulos de función EXIT_SAPMF02D_*, donde SAPMF02D es el nombre del programa progr ama encontrado en el paso anterior.
1
El resultado muestra los user exit disponibles para la transacción, de esta lista hay que elegir el correspondiente para lo que deseemos realizar.
Una vez seleccionado el user exit le damos click en el botón Display para ver el código de este módulo de función.
En la pestaña Source code muestra el Include disponible para escribir el código personalizado.
2
1.2. Método Método 2: Código
Para buscar los user exit también se pude crear un programa que los busque con el siguiente código: REPORT
ZBUSCAR_USER_EXIT. ZBUSCAR_USER_EXIT .
* Finding the user-exits of a SAP transaction code * * Enter the transaction code in which you are looking for the user-exit * and it will list you the list of user-exits in the transaction code. * Also a drill down is possible which will help you to branch to SMOD. * * Written by : SAP Basis, ABAP Programming and Other IMG Stuff * http://www.sap-img.com
TABLES : tstc tstc, , tadir tadir, , modsapt modsapt, , modact modact, , trdir trdir, , tfdir tfdir, , enlfdir enlfdir. . tstct. . TABLES : tstct LINE. DATA : jtab LIKE tadir OCCURS 0 WITH HEADER LINE. DATA : field1 field1( (30 30) ). DATA : v_devclass LIKE tadir tadir-devclass devclass. . tstc-tcode OBLIGATORY. OBLIGATORY. PARAMETERS : p_tcode LIKE tstc SELECT SINGLE * FROM tstc WHERE tcode EQ p_tcode p_tcode. . IF sy sy-subrc EQ 0. SELECT SINGLE * FROM tadir WHERE pgmid = 'R3TR' 'R3TR' AND object = 'PROG' 'PROG' AND obj_name = tstc tstc-pgmna pgmna. . MOVE : tadir tadir-devclass TO v_devclass v_devclass. . IF sy sy-subrc NE 0. SELECT SINGLE * FROM trdir WHERE name = tstc tstc-pgmna pgmna. . trdir-subc EQ 'F' 'F'. . IF trdir SELECT SINGLE * FROM tfdir WHERE pname = tstc tstc-pgmna pgmna. . SELECT SINGLE * FROM enlfdir WHERE funcname = tfdirtfdir -funcname funcname. . SELECT SINGLE * FROM tadir WHERE pgmid = 'R3TR' 'R3TR' AND object = 'FUGR' 'FUGR' AND obj_name EQ enlfdir enlfdir-area area. . tadir-devclass TO v_devclass v_devclass. . MOVE : tadir ENDIF ENDIF. . ENDIF. . ENDIF SELECT * FROM tadir INTO TABLE jtab WHERE pgmid = 'R3TR' 'R3TR' AND object = 'SMOD' 'SMOD' AND devclass = v_devclass v_devclass. . SELECT SINGLE * FROM tstct WHERE sprsl EQ sy sy-langu AND AND tcode EQ p_tcode p_tcode. . FORMAT COLOR COL_POSITIVE INTENSIFIED OFF OFF. . WRITE WRITE: :/(19 19) ) 'Transaction Code - ', ', 20 20( (20 20) ) p_tcode p_tcode, , 45(50 45( 50) ) tstct tstct-ttext ttext. . SKIP. SKIP. IF NOT jtab[] IS INITIAL. INITIAL. WRITE: WRITE :/(95 95) ) sy sy-uline uline. .
3
FORMAT COLOR COL_HEADING INTENSIFIED ON. ON. WRITE WRITE: :/1 sysy-vline vline, , Name', 2 'Exit Name', 21 sy sy-vline , 'Description', , 22 'Description' 95 sy sy-vline vline. . WRITE: :/(95 95) ) sy sy-uline uline. . WRITE jtab. . LOOP AT jtab SELECT SINGLE * FROM modsapt WHERE sprsl = sy sy-langu AND AND name = jtab jtab-obj_name obj_name. . OFF. . FORMAT COLOR COL_NORMAL INTENSIFIED OFF WRITE WRITE: :/1 sysy-vline vline, , jtab-obj_name HOTSPOT ON, ON, 2 jtab 21 sysy-vline , 22 modsapt modsapt-modtext modtext, , 95 sysy-vline vline. . ENDLOOP. ENDLOOP. WRITE: :/(95 95) ) sy sy-uline uline. . WRITE DESCRIBE TABLE jtab jtab. . SKIP SKIP. . ON. . FORMAT COLOR COL_TOTAL INTENSIFIED ON WRITE: :/ 'No of Exits:' , sysy-tfill tfill. . WRITE ELSE ELSE. . ON. . FORMAT COLOR COL_NEGATIVE INTENSIFIED ON WRITE WRITE: :/(95 95) ) 'No User Exit exists'. exists'. ENDIF ENDIF. . ELSE. ELSE. ON. FORMAT COLOR COL_NEGATIVE INTENSIFIED ON. WRITE:/(95 WRITE: 95) ) 'Transaction Code Does Not Exist'. Exist' . ENDIF. ENDIF. AT LINESELECTION. . LINE-SELECTION GET CURSOR FIELD field1 field1. . CHECK field1 field1( (4) EQ 'JTAB' 'JTAB'. . SET PARAMETER ID 'MON' FIELD sysy-lisel+1 lisel+1( (10 10) ). CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN. SCREEN. *---End of Program
Al ejecutar este código debemos de bemos de escribir la transacción de la cual se desean buscar los user exit:
En el resultado podemos ver que en la primera columna aparece el nombre del exit que corresponde al nombre del programa encontrado en el método m étodo 1:
4
Dando click en el nombre del exit, accedemos a la transacción SMOD desde donde podemos ver los atributos y componentes de este exit:
Seleccionando la opción de Componentes y dando click en el botón Display se muestran los módulos de función disponibles para los user exit:
Dando doble click al módulo de función llegamos al código donde se encuentra el include para el código personalizado:
5
2. Ejemplo de User Exit
Queremos añadir una validación adicional en la transacción FD01 para evitar que se duplique el RFC (Tax Number 1) con diferente cliente. Primero se necesita crear un proyecto para incluir la ampliación. En la transacción CMOD especificar el nombre y click en el botón Create.
Especificar la descripción y click en la opción Enhancement assignments:
En la columna Enhancement colocar el nombre del programa donde se localiza el user exit y click en Enter para mostrar la descripción.
Al hacer clic en la opción o pción Components muestra el módulo de función del user exit:
6
Haciendo doble click en el módulo de función nos muestra el código donde personalizaremos el include.
En el include ZXF04U01 colocamos el siguiente código: *&---------------------------------------------------------------------* *& Include ZXF04U01 *&---------------------------------------------------------------------* * Definición de variables
TABLES: : kna1 kna1. . TABLES DATA DATA: : lv_kunnr LIKE kna1 kna1-kunnr kunnr. .
" Número de cliente
* Si el pais es México validar que el RFC sea obligatorio i_kna1-land1 = 'MX' " Si País = México IF i_kna1 AND i_kna1 i_kna1-stcd1 IS INITIAL INITIAL. . " y RFC vacío
MESSAGE 'Falta escribir el RFC.' type 'E' 'E'. . i_kna1-land1 = 'MX' " Si País = México ELSEIF i_kna1 AND i_kna1 i_kna1-stcd1 IS NOT INITIAL INITIAL. . " y RFC no es vacío CLEAR lv_kunnr lv_kunnr. . " Limpiar número de cliente SELECT SINGLE kunnr INTO lv_kunnr " Selecciona un cliente FROM kna1
7
" diferente al cliente actual " con el mismo RFC
WHERE kunnr i_kna1i_kna1-kunnr stcd1 = i_kna1 i_kna1-stcd1 stcd1. . AND
IF sysy-subrc = 0. " Si se encontró un cliente con el mismo RFC MESSAGE 'Ya existe un cliente con ese RFC, favor de modificarlo' typ e 'E' 'E'. . ENDIF. . ENDIF ENDIF ENDIF. .
Activamos el include y nos regresamos a la pantalla de los componentes del proyecto de ampliación, ahí el proyecto:
Al mostrar los indicadores en verde, la ampliación del user exit ha sido activada:
Para comprobar la aplicación hay que reiniciar la transacción t ransacción FD01 y probar los mensajes.
Enlaces de interes: Blog de SAP: http://saptricks.wordpress.com/ http://saptricks.wordpress.com/
Enlaces de User exit: http://saptricks.wordpress.com/2011/01/30/user-exits-como-localizarlas/ http://saptricks.wordpress.com/2011/01/30/user-exits-como-localizarlas/ http://saptricks.wordpress.com/2011/04/21/truco-7-uso-de-user-exits-para-
verificaciones-en-datos-maestros/ verificaciones-en-datos-maestros/
http://saptricks.wordpress.com/2011/11/27/user-exits-ampliaciones-badis-comolocalizarlas-ii/ localizarlas-ii/
8
9
View more...
Comments