Ir al contenido principal

CÓMO ENCONTRAR LA BADI Enhacements Exits

¿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?

Ampliaciones SAP - Include de un Customer Exit

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:
ZUSEREXIT.
Busca user-exits en una transacción.  Descarga AQUI
Z_BUSCA_AMPLIACIONES.
Busca ampliaciones en una transacción. Descarga AQUI
Z_VERIFICA_USER_EXIT.
Revisa si una transacción o programa contiene una ampliación. Descarga AQUI
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:
Ampliaciones SAP - Customer Exit
Ampliaciones SAP – Customer Exit
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:
Ampliaciones SAP - Include de un Customer Exit
Ampliaciones SAP – Include de un Customer Exit
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.
Ampliaciones SAP - Como encontrar una BADI
Ampliaciones SAP – Como encontrar una BADI
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

Entradas más populares de este blog

A to Z of OLE Excel in ABAP 7.4

  SAP users, both business and end users always need to download the output of a report to spreadsheet and do their analytics.   The standard excel output from a report is very simple process but it is old fashioned and the spreadsheet looks quite boring.  There is no default formatting and the users have to do all the hard work of changing the fonts, coloring the texts, marking the borders etc. Updated 16th Aug 2019  –  If you are working in non-ABAP 7.4 (below), there is complete reference program for you too. Go to the end of this article.  Thank you  Legxis  ( LeonievonK ) for the share. I acknowledge, whatever I mentioned above can be achieved in many ways programmatically. We can do it in the old traditional ABAP way but  providing multiple tabs in the spreadsheet and formatting is quite tricky with non  OLE  method. OLE = Object Linking and Embedding The high level agenda of this article is to be the  G.O.A.T.  (ple...
How to add custom field in Additional B Tab for SAP Sales Order In this article we want to explain step by step how to add custom field in SAP Sales Order transaction VA01/VA02/VA03. This time Mr ABAPGurus will give the tutorial of enhancement to add custom field in SAP Sales order. In this sample we will add new custom field for comments and customer satisfaction, this data will save into separate table from SAP Standard table ( VBAK / VBAP ). SAP provided us with ADDITIONAL TAB in the sales order transaction ( VA01/VA02/VA03 ) which allow customer to add custom fields.  T he different between ADDITIONAL A and ADDITIONAL B is the ADDITIONAL A for field which already predefine in Sales Order Header ( VBAK ) fields and ADDITIONAL B is for field that freely define. This sample we will use ADDITIONAL B because we will store data from customer satisfaction into Z database table. 1. Create one Z table using SE11 SAP Transaction code. 2.Using SE38 Transactio...

VA03 VA02 Obtener Textos Cabecera, Funct. ‘READ_TEXT’

Hoy me tocó obtener textos de pedidos, me pareció un tema interesante para compartir. Si bien no escribí yo el documento, me sirvió por eso lo comparto, y abajo cito la fuente. Obtener textos de las cabeceras en este caso mas especifico el texto de los pedidos como por ejemplo obtener el texto de un pedido. La forma de obtener textos es a través de la función ‘READ_TEXT’, pero tiene cierto chiste usarla y pasarle los parámetros correctos entonces vamos a proceder con el tutorial. Lo primero será en este caso ingresar a nuestro pedido, ya sea VA02 o VA03. Una vez que ingresamos el pedido daremos enter, y nos visualizará todo el pedido, procederemos a dar clic en el menú ‘Pasar a’ - ‘Cabecera’ - ‘Textos’ Esto nos llevará al texto que buscamos Una vez que vemos el texto, daremos doble para que nos abra una nueva ventana, dentro de la nueva ventana daremos clic en menú ‘Pasar a’ - ‘Cabecera’ y nos mostrará lo siguiente. Lo más importante de esta pantalla es: Nom...