El field exit es similar a la user exit, pero se hace a nivel del elemento de datos. Sirve para realizar validaciones basicas, y tiene muchas restricciones.
La funcion de field exit tiene solo dos campos, uno de entrada (INPUT) y uno de salida (OUTPUT) y es lo unico que podes leer a priori, aunque podes sacar info de otros campos guardandolos en variables globales de la funcion (esto implica la creacion de mas field exits) o utilizar la funcion DYNP_VALUES_READ.
En los field exits no podes utilizar:
BREAK-POINT
CALL SCREEN
CALL DIALOG
CALL TRANSACTION
SUBMIT
COMMIT WORK
ROLLBACK WORK
MESSAGE I
Ahora, para crear un field exit:
Lo primero que tenemos que chequear es que en la RZ10 este activado el parametro: abap/fieldexit = YES en el servidor (esto chequealo con un Basis).
Despues, tenemos que crear una funcion para el campo, todas las funciones de field exit comienzan con FIELD_EXIT_* (en tu caso le pondria FIELD_AXIT_ALLOC_NMBR). Esto te va a crear una funcion con los parametros INPUT y OUTPUT.
Luego le colocas el codigo que quieras para realizar tu validacion.
Por ultimo ejecutas en la SE38 el reporte RSMODPRF, alli te van a aparecer todos los field exits activos. Para crear el tuyo y asignarle la funcion le das "Exits de Campo->Crear" e ingresas el elemento de datos sobre el cual queres activar tu field exit, finalmente seleccionas tu field exit y le das click en "asignar prog/dynpro" y le completas los datos correspondiente al nombre del programa y la dynpro. Una vez hecho esto, lo activas y listo.
Consejo, para validar si tu field exit funciona, te recomiendo que primero lo ejecutes mostrando un Mensaje del tipo E o S... Luego una vez verificado esto, si procede con la codificacion necesaria para tu validacion.
Igualmente, te repito, nunca lo utilice en un ALV, ignoro si funcionará o no.
Suerte, y comenta como te fue!.
|