¿Cómo encontrar la BADI que necesitamos?
Existen varios caminos para encontrar la BADI que requerimos en un momento dado, vamos a ver algunas de ellas:
Opción A.
Entramos a la transacción SE80, buscamos en el explorador la clase “CL_BADI_FLT_DATA_TRANS_AND_DB”, luego ubicamos el método “ACT_IMPS_PER_FLT_VAL” y entramos al código, apelamos al buscador para ubicar el comentario “read BADI attributes”, y justo debajo del SELECT que veremos, fijamos un break-point.
Luego, abrimos otro modo para ejecutar la transacción que se desea analizar, y veremos que se detendrá cada vez que pase por el break-point fijado, ahora revisamos en el debugger los campos “exit_name” e “internal” para dar con las BADI’s que toca dicha transacción.
Opción B.
Utilizamos la transacción SE93 para ver los atributos de la transacción estándar que queremos evaluar, buscamos su paquete (clase de desarrollo), luego nos dirigimos a la transacción SE18, optamos por la opción de búsqueda ampliada, indicamos el paquete previamente encontrado y realizamos la búsqueda; el sistema nos indicará todas las BADI’s relacionadas con dicho paquete indicado.
Opción C.
Esta vez partimos desde la transacción SE24 (Class Builder), ubicamos la clase CL_EXITHANDLER, método GET_INSTANCE, y en su código, colocamos un break-point en la instrucción “CALL METHOD cl_exithandler=>get_class_name_by_inerface”.
Posteriormente, en otro nodo ejecutamos la transacción que queremos verificar, se activará el debugger y la ejecución alcanzará el break-point cada vez que el estándar intente verificar la existencia de alguna BADI. El sistema verificará si una definición de BADI tiene alguna implementación activa, aunque no existiese ninguna implementación, el método al que le fijamos el break-point, detectará que existe una BADI en dicho punto.
En la variable “exit_name” se mostrarán los nombres de las BADI’s que implementa dicho estándar, y podremos comprobar si están implementadas o no, a través de la transacción SE18, luego de ingresar el nombre, buscando la opción de menú Implementaciones -> Resumen.
¿Cómo encontrar el EXIT que necesitamos?
Esta es una pregunta muy común dentro del día a día de una implementación SAP.
Lo primero que debemos acotar es que no es técnicamente correcto preguntar por un EXIT o USEREXIT simplemente, ya que éstos son solo uno de los 3 tipos de ampliaciones que permite el sistema.
Para saber con detalle cuales son los tipos de ampliaciones y en qué se diferencian, puedes leer el siguiente artículo.
Ahora bien, existen varios caminos para encontrar la ampliación que necesitamos.
Programas buscadores
Existen programas Z especializados en buscar los objetos de ampliación relacionados con una transacción en particular, en ellos basta con indicar el código de la transacción y evaluar los resultados, hasta encontrar con el objeto que nos sea útil según el requerimiento que nos pidan.
A continuación te ofrezco 3 de estos programas para que los descargues y los ejecutes tal cual en la SE38:
Subrutinas para el módulo de Ventas.
Si bien la tendencia de SAP es ir sustituyendo las USEREXITS propiamente dichas por BADi’s, en el módulo SD aún son frecuentes encontrar USEREXITS, y de una manera muy sencilla. Buscamos el programa fuente de la transacción estándar, entramos al programa por la SE80, buscamos las subrutinas asociadas al mismo, y de la lista que nos muestran, ubicamos aquellas que empiecen con el prefijo USEREXIT.
Luego nos queda determinar cuál de todas es la que nos es útil según lo que nos pidan. Estas EXITS son simples llamados a INCLUDES, a los cuales debemos solicitar su clave de modificación para añadirle código a los FORMS contenidos en ellos. Mi forma de determinar cual es el EXIT que necesito, es fijar un break-point en cada EXIT, ejecutar la transacción estándar, y ver cual EXIT es llamado al momento del evento sobre el cual debemos hacer la ampliación; por ejemplo, si se requiere una validación al momento de guardar/salvar un pedido, es muy probable que debamos hacer los cambios en el FORM SAVE_DOCUMENT_PREPARE o SAVE_DOCUMENT del Include MV45AFZZ.
Es muy común que soliciten cambios al tratamiento de documentos de ventas, para ello, el Include MV45AFZZ del programa estándar SAPMV45A es un EXIT muy utilizado.
Búsqueda de palabras clave en programa estándar.
Existe otra manera de buscar las ampliaciones disponibles, aunque en este caso debemos saber si se trata de un USEREXIT, un CUSTOMER-EXIT, o una BADI; ya que cada una tiene su propia palabra clave para identificarlos.
Si no recuerdas las diferencias entre los 3 tipos de ampliaciones, en el siguiente artículo tienes una explicación detallada de los mismos.
Aunque veamos una pequeña descripción de cada uno:
- Customer Exits: Se trata de funciones utilizadas por un programa estándar cuyo código está en un include Z.
- Business Add-Ins: Las badis son que podemos implementar en una clase Z.
- User Exits: Son subrutinas de un programa estándar que están en un include especia que SAP nos deja modificar.
Lo primero que debemos hacer es ubicar el programa fuente de la transacción estándar y entramos al código, bien sea por la SE38 o la SE80, en este caso es indiferente.
Una vez allí, pulsamos el buscador y vamos a buscar las palabras claves según el tipo de ampliación que busquemos:
CUSTOMER-EXIT.
Si se trara de un CUSTOMER-EXIT, buscamos la cadena «CUSTOMER-FUNCTION», obtenemos resultados como en la imagen siguiente:
Hacemos doble clic en los resultados, nos llevará al Include que contiene el llamado, allí podremos hacer doble clic en el número para llegar directamente al módulo de funciones donde podremos trabajar:
Aún nos queda por determinar la “ampliación” en donde se encuentra este CUSTOMER-EXIT; con el nombre de la función buscamos en la SMOD y obtendremos el nombre de la ampliación.
Ahora, con la ampliación y el módulo de función ubicados, ya podemos implementar los cambios requeridos.
BADI’S
Nuevamente en el código fuente del programa estándar, buscamos la cadena «CL_EXITHANDLER»; el resultado nos mostrará las BADI’s utilizadas en dicho programa.
El nombre exacto de las BADI’s los encontramos justo al lado de “exit_name”.
USEREXITS
En el caso de las USEREXITS, realizamos la misma búsqueda, solo que esta vez la palabra clave es USEREXIT, el resultado serán los Includes que contienen dichas EXITS que estamos buscando.
Esto salió más largo de lo que pensé en un principio, pero creo que logré abarcar un panorama bastante completo de la búsqueda de estos objetos.
Fuente:
Comentarios
Publicar un comentario