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.  (please google it if you do not know the full form)  of OLE Excel Gu
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 Transaction code and ope

VOFM

Creating VOFM custom routine, functionality same as SAP standard routine 103 with Additional Functionality 1.    Introduction 1.1   Document Purpose 1.2    This is the document helps you to create custom routine for sales order for below specific requirement: Functional description: In case of sale order with the SD document category ‘K’ or ‘L’ or ‘H’ related to an invoice, we need to fill the fixed value date (VBKD_VALDT) with the billing reference date (VBRK_FKDAT). For example: Invoice 90001111, the billing date is 22.07.2013 If we create a sale order related to this invoice, we want the fixed value date equal to the billing reference date. As per the requirement: Sap standard routine ‘103’ triggers whenever sales order is being created with reference. Sap standard routine is configured in VOFM transaction as: Sap standard routine ‘103’ has the functionality of copying the billing document header data and billing document line item data into the