3.4. - Field Exits
3.4.1. - ¿Qué son los Field Exits?
Son validaciones de los elementos de datos asociados a campos de pantallas o dynpros de SAP. También son conocidos como ampliaciones de campos.
Son módulos de funciones que son llamados y ejecutados después de las validaciones del sistema estándar. Por ser módulos de funciones, se ejecutan en instancias de memoria propias y en el momento de su ejecución solo se dispone del valor del campo, que se importa en el parámetro INPUT y que puede ser modificado a través del parámetro OUTPUT.
Un ejemplo donde se utilizaría un Field Exit sería si se quisiese insertar un valor en un campo determinado de una dynpro, entonces se podría una validación en ese campo a nivel de Field Exit para que solo permita insertar determinados valores.
Para ver todos los Field Exit del sistema, se acceder a la transacción SE37 y se busca por “Field_Exit_*”.
Ventajas
1. Facilita la validación de campos en un programa estándar sin modificar el código original.
2. Puede utilizarse el mismo código para varias transacciones.
3. Se puede aplicar globalmente o para determinados programas y dynpros que se le asignen.
Desventajas
1. Toma de la dynpro un solo valor, que es el del campo al cual se hace referencia, por lo que no se pueden utilizar tablas internas específicas del programa estándar en el código de Field Exit.
2. El mismo código del Field Exit tiene que servir para todos los programas que se quieran utilizar, por lo que se tiene que especificar en el código qué acción tomará de acuerdo al programa en el cual se esté ejecutando.
3. No es posible hacer un debug del código del Field Exit de forma directa, a través de un breakpoint. Para esto se utilizan mensajes de error para ir viendo qué valores van tomando los diferentes objetos y por donde va pasando dentro del código del Field Exit.
4. No se pueden utilizar ninguna de las siguientes expresiones
a. Breakpoint
b. Call Screen
c. Call dialog
d. Call transaction
e. Submit
f. Submit work
g. Rollback work
h. Message ID
Para poder activar los Field Exit, se debe tener el parámetro “Abap Field Exit = yes” configurado en el servidor, que se realiza mediante la transacción RZ10.
3.4.2. - Pasos para realizar un Field Exit
El primer paso es acceder a la transacción CMOD. Dentro de la transacción, hay que ejecutar el comando “PRFB”, sin “/N”.
En la pantalla siguiente, se encuentran todos los Field Exits del sistema. Aquí se podrá ver si están activados a nivel global o tienen algún programa y dynpro asignados.
Para crear un Field Exit, se selecciona el menú Exit campo%uF0E0Crear.
En la siguiente ventana de diálogo, se introduce el nombre del elemento de datos al cual se quiere realizar el Field Exit. Este elemento de datos debe ser el mismo que tiene el campo de la dynpro al cual se quiere relacionar.
El dato se obtiene pulsando F1 sobre el campo de la dynpro y pulsando en el botón de “Información técnica” .
Se introduce el elemento de datos y se pulsa enter.
Después, el sistema propone la creacion del modulo de funciones en la transacción SE37, por lo que se pulksara el boton de crear.
El sistema pedirá la asignacion de un grupo de funciones. Es recomendable crear uno exclusivamente para el Field Exit. También, se introducirá un texto breve para el módulo de funciones.
Este modulo de funcion tiene la particularidad de tener un parametro de Import o entrada y uno de Export o salida. El parámetro de entrada es INPUT y contendrá el valor del campo al cual se ha asignado el Field Exit. El parámetro de salida OUTPUT es el valor que tomará el campo al salir del Field Exit.
En la pestaña “Cod fte” hay que introducir el codigo correspondiente a la validacion que se desea añadir. En este caso, se emite un mensaje de error en caso de que el usuario introduzca en el campo de la pantalla el texto “CORRIENTES 123”.
Dentro del modulo de función solo se puede trabajar con estos parametros, pero si se quiere obtener valores de otros campos de la dynpro, se pueden utilizar otros Field Exit en los cuales se utilizará el comando “SET PARAMETER” para poder grabar en memoria el valor del campo y utilizarlo en el Field Exit anterior tomandolo de memoria con “GET PARAMETER”.
Otra opción es utilizar la funcion “GET_DYNP_VALUE” para obtener valores de otros campos de la dynpro. Una vez terminada la codificacion, se debe asignar un programa y dynpro al Field Exit.
Mientras no se haya realizado la asignacion de la dynpro, el Field Exit afectará a todas las pantallas donde se encuentre un campo con el elemento de datos.
Para asignar el programa y dynpro se debe ir a la pantalla de administracion de Field Exit (CMOD - PRFB), seleccionar el Field Exit y pulsar el boton “Asignar prog/dynpro”.
Después, aparecerá la siguiente pantalla donde se asignará el nombre del programa y el número de dynpro correspondiente. Es posible asignar varios programas y dynpros al mismo Field Exit.
Por último, se activa el Field Exit desde el menú “Exit campo%uF0E0Activar”. Aparecerá el Field Exit activado.
Para probar el Field Exit, se accede a la transaccion SM30, ya que el elemento de datos al cual se le crea el Field Exit pertenece al campo “Direccion” de una tabla de base de datos Z. Se genera una nueva entrada en la tabla, en el campo “Direccion” se introducirá el valor “CORRIENTES 123” y se pulsa enter.
Por pantalla se verá el mensaje de error que previamente se ha codificado en el Field Exit.
A nivel de administración del sistema SAP, existe el parametro de instancia “ABAP Field exit”, el cual controla la activación o desactivación de los Field Exit en el sistema. Si el parametro que controla la activación de los Field Exit está activo, el sistema consultará dos tablas estandar, que son la TDDIR y la TDDIRS, para saber si se tiene que generar un Exit de campo para cada campo.
El usuario no notará una ralentización del sistema, ya que la generación de las dynpros es bastante rápida. Si es necesario conocer el contenido de algun otro campo de la pantalla, se puede guardar el contenido de otros campos en variables globales al grupo de función o utilizar la función “DYN_VALUES_READ” para leer valores de otros campos de la misma pantalla. Se debe considerar que si varios campos de la pantalla tienen el mismo elemento de datos, el Field Exit se aplicará a todos ellos.