3.1. - Ampliaciones: User exits y customer exits
3.1.1. - ¿Qué es una ampliación?
Son diferentes herramientas que presenta SAP para realizar mejoras, modificaciones o añadidos a un programa estándar del sistema.
En algunos casos, se puede validar campos de alguna dynpro en particular, añadir campos a una pantalla con código que permita tratar esos datos nuevos, añadir una nueva opción dentro de un menú o añadir campos a tablas estándares.
Las ampliaciones se generan y codifican en módulos aparte del código estándar, con lo cual no se necesita modificarlo, manteniendo la funcionalidad original y el buen funcionamiento.
Ventajas
1. Permiten modificar ciertos programas para adaptarlos a necesidades particulares de la empresa, añadiendo nuevas características a las existentes.
2. Permiten realizar mejoras a un programa sin modificar el código original del mismo, manteniendo el buen funcionamiento y las características que tenía.
3. Los cambios toman efecto con solo transportar los nuevos objetos.
Desventajas
1. No siempre se pueden hacer todas las modificaciones de manera satisfactoria, ya que la mayoría de las ampliaciones están preparadas para una determinada tarea y momento dentro de la ejecución de un programa
2. No todos los programas estándares están preparados para añadir todos los tipos de ampliaciones.
Existen varios tipos de ampliaciones, que son utilizados de acuerdo al tipo de mejora o requerimiento que se quiera desarrollar. Las más importantes son:
1. User exits
2. Customer exists o exists de cliente
3. Keyword exits
4. Field exits o exists de campo
5. Estructuras append
6. Badis
7. Enhancements
8. Menú exits
3.1.2. - User exits
Es una subrutina definida dentro de un programa estándar que está hueca, sin código, para que el usuario ponga su propio código fuente que le permita realizar tareas específicas que no están previstas por SAP.
Son las primeras ampliaciones introducidas por SAP. Son propias del módulo SAP SD de ventas y distribución. No existen en otros módulos. Están implementados en la forma de subrutinas. Todos los user exit están nombrados como “USEREXIT_XXXXX”.
El principal problema que representan está en encontrar el user exit correcto. Una vez que se encuentra, se deberá verificar que el mismo sirva para el propósito indicado.
El código ABAP que se insertará dentro del user exit puede colocarse dentro de un include que comenzará con la letra Z o sino suelto. Para añadir o modificar código existente dentro de un user exit, no es necesaria la clave de acceso de SAP.
Por ejemplo, en el programa estándar “MV45AFZZ” se encuentra el siguiente user exit que es utilizado por la transacción VA02 cada vez que lee un documento.
Los user exits son huecos que genera SAP en el sistema estándar. Estos huecos están ubicados en lugares determinados del sistema. Es importante dejar claro que no es posible generar nuevos huecos, sino que se tiene que trabajar con los existentes.
Si no se encuentra un user exit que se ajuste a los requisitos, entonces habrá que buscar otra alternativa de solución dentro de las demás soluciones de ampliaciones posibles que ofrece SAP en su sistema.
3.1.3. - Customer exits
Es un punto dentro de un programa donde se puede llamar a un programa propio.
Se ejecutan desde un programa estándar haciendo una invocación a un módulo de función. Algunos programas estándares tiene dentro de su código, llamadas a módulos de funciones que pueden ser modificados por el programador. Los customer exit (exit de cliente) son llamados dentro de los programas a través de un número. Este número es la terminación del nombre del módulo de función que está asociado al programa. En la tabla MODSAP se encuentran todos los módulos de función que se utilizan en los exits de cliente.
Los módulos de función tienen una nomenclatura estándar.
Por ejemplo, “EXIT_SAPMV45A_003”. La llamada a un exit de un módulo de función es implementada de la siguiente forma en un programa estándar: CALL CUSTOMER-FUNCTION <3 dígitos>.
Cada uno de estos módulos es llamado por el proceso estándar en ciertos momentos y tienen por defecto algunos parámetros que son los disponibles dentro de la ampliación.
Ventajas
1. Es una buena herramienta para añadir funcionalidad nueva a un programa estándar, como puede ser una validación o la ejecución de rutinas de control sin modificar el código original.
2. Para transportar y activar los customer exit es suficiente con el include nuevo únicamente, sin tocar el programa original.
Desventajas
1. No siempre se ajusta el customer exit a las necesidades del programador ya que los objetos que importa o exporta son fijos y pueden no tener todos objetos que se requieren.
2. No existe una búsqueda de customer exit por programa con una aclaración amplia de su utilización, para buscarlos hay que realizar una búsqueda de la cadena “CALL CUSTOMER-FUNCTION”, dentro del programa de control estándar y su funcionamiento se prueba sin saber exactamente si es el correcto para lo que se quiere hacer.
Para trabajar con Customer exits, se utilizarán dos transacciones fundamentalmente:
1. SMOD
a. Administra ampliaciones
b.
2. CMOD
a. Gestión de proyectos de ampliación.
b.
3.1.4. - Pasos para realizar un customer exit
Acceder a la transacción SMOD y completar el nombre de la ampliación que contiene el módulo de función a utilizar por el costumer exit. Si no se conoce el nombre aún, hay que ir a la transacción SE16, con la tabla MODSAP, en el campo MEMBER completar con el nombre del módulo de función a buscar y el campo NAME dirá la ampliación que la contiene.
Si no se conoce el módulo de función especifico, se debe buscar en el código del programa estándar, las llamadas a funciones de usuario, que estarán indicadas por “CALL CUSTOMER-FUNCTION ‘001’”, donde el número del final puede ir cambiando si presenta más de una llamada, es decir, varios customer exit.
3.1.5. - ¿Cómo probar un customer exit?
Lo más efectivo será crear un proyecto de ampliación, asignar la ampliación, activarla y luego colocar un breakpoint en el módulo de funciones, para determinar los datos con los que se dispone en ese momento y el punto exacto del proceso en donde se encuentra.