Las BAdIs (Business Add-Ins) son una herramienta de programación ABAP orientada a objetos que se utilizan en SAP para implementar validaciones y ampliaciones en el código standard de SAP en versiones a partir de la 4.6c.
A la pregunta «¿Qué son las BAdIs de SAP?«, diríamos que son la manera que da SAP de acomodar los requerimientos específicos de un cliente a sus transacciones estándar, que de no ser por las ampliaciones (las BAdIs son las más actuales, pero previamente se utilizaron las user exits y los field exits), habría que modificar el propio código de SAP. Esto último no es conveniente en prácticamente ningún caso, porque se pierde el soporte que SAP ofrece a sus productos.
Imaginemos, por ejemplo, que cada vez que damos de alta a un empleado por la transacción PA40 necesitamos guardar algunos de los datos del mismo en una tabla transparente ZEMPLE que hemos creado nosotros. Para casos como éste existen las ampliaciones, que, al fin y al cabo, no son más que fragmentos de código que SAP nos deja introducir dentro de su código estándar para realizar ciertas operaciones a medida; en este caso, introducir la información que se necesita en una tabla cuando se da de alta al empleado.
BAdIs y USER EXIT
Como hemos dicho previamente, las BAdIs no son la única forma de ampliación que tenemos en SAP, pero sí la más recomendable utilizar por varios motivos:
- Las BAdIs son las nuevas ampliaciones de SAP, las que recomienda utilizar, y al estar basadas en la programación orientada a objetos dan más opciones que las user exits (o Customer Exits).
- Las BAdIs se pueden implementar tantas veces como se quieran, mientras que las user exit son únicas, así, diferentes programadores pueden trabajar en diferentes proyectos e implementar la misma BAdI de una forma independiente.
- Las BAdIs están basadas en una infraestructura multinivel (SAP, versión de país, socio, cliente, …) mientras que en las user exit solo tiene dos niveles (SAP, cliente). Gracias a esto podemos crear BAdIs a cualquier nivel de esa infraestructura.
Buscar la BAdI adecuada
Una de los mayores problemas al trabajar con Business Add-Ins, es saber cuál tenemos que utilizar en cada caso, y para ello proponemos a continuación dos técnicas distintas.
TRANSACCIÓN ST05 – Performance Analysis
Una de las más comunes es utilizar la transacción ST05 que nos permite crear trazas en tramos de ejecución. Utilizando esta transacción, y teniendo en cuenta que SAP siempre utiliza las vistas V_EXT_IMP y V_EXT_ACT cuando accede a las BAdIs, podremos saber cuáles se llaman en nuestro proceso. Los pasos a seguir son los siguientes:
- Accedemos a la transacción ST05
- Nos aseguramos de que la opción “Table Buffer Trace” (“Buffer Trace” dependiendo de la versión de Netweaver) está marcada y Activamos la traza
- Ejecutamos el proceso que queremos adaptar
- Desactivamos la traza y mostramos los resultados
- Filtramos los resultados para mostrar únicamente los relacionados con las vistas V_EXT_IMP y V_EXT_ACT
*Es importante que no ejecutemos ninguna otra transacción mientras la traza esté activa si queremos que los resultados sean más fáciles de analizar.
Si uno de los resultados empieza por “IF_EX_”, el nombre de la BAdI será lo que esté a continuación, ya que esta primera parte común hace referencia a la Interface.
Una vez hecho esto, tendremos un listado de BAdIs que pueden servirnos, aunque tendremos que analizarlas una a una para encontrar la adecuada. Para analizarlas, accederemos a la transacción SE18 – Definición de BAdIs que explicaremos a continuación.
Transacción SE18 – Definición de BAdIs
Otra opción es hacer uso de la ayuda de búsqueda de la propia transacción SE18. Para ello, basta con acceder a la transacción, abrir el matchcode y seleccionar la opción “Aplicaciones SAP” que nos mostrará un árbol donde podremos buscar la BAdI navegando por los componentes del sistema.
Implementar una BAdI
El proceso de implementación de una BAdI tiene dos pasos. El primero es mirar la definición de la misma, para saber los métodos de los que disponemos y qué parámetros tiene cada uno de ellos.
Este paso lo haremos en la transacción SE18, donde, introduciendo el nombre de la BAdI, tendremos acceso a toda su información. Lo que nos interesa es la última pestaña, y más concretamente, la parte de “Interface”. Aquí veremos los métodos y podremos navegar por los diferentes objetos dentro del generador de clases (SE24).
Cuando ya tenemos clara la BAdI que queremos implementar, accedemos a la transacción SE19 para el siguiente paso: la implementación.
Como se puede ver en la imagen, tenemos dos partes bien diferenciadas. La parte de abajo será la primera que utilicemos, puesto que lo primero es crear la ampliación. Indicando la BAdI que queremos implementar se nos pedirán los nombres de la implementación y la clase a crear. Normalmente se suele añadir un prefijo (que empiece por Z) al nombre original, para que sea fácil relacionar la implementación con la propia definición.
Cuando todo se haya creado, ya podremos programar cada uno de los métodos que necesitamos para nuestro desarrollo. A partir de ahora, cada vez que queramos modificar la implementación, podremos volver a la pantalla inicial de la transacción SE19 y utilizar el bloque superior.
Para finalizar, es muy importante acordarse de activar la implementación para que se ejecute. No solo activar el objeto en SAP, como con todos los que creamos, sino marcar el check de “Implementación está activa” en la SE19 para que la tenga en cuenta en tiempo de ejecución.
Ahora que ya sabes qué son las BAdIs de SAP y cómo implementarlas, sólo tienes que aplicarlas en tus procesos.
Buenas, y si lo que quiero es crear una Badi desde 0 (no partir de una existente), que se debe hacer?
¡Hola José! Lo sentimos pero la creación de BADIs, no es el tema tratado en este post. Pero tendremos en cuenta tu duda para futuras entradas en el blog. ¡Muchas gracias por tu aportación!
esto es algo que solo debe ejecutar una ABAP o esto tambien no esta por demás que lo haga un Funcional sap hcm
Hola Gabriela.
Las BADIs son una técnica de programación ABAP por lo que lo habitual es que quién las implemente sea un perfil con capacidades de programación. Pero no está de más que un consultor funcional conozca su funcionamiento ya que son ellos los que más conocimiento tienen de los procesos que se podrían extender con las BADIs e incluso de las BADIs disponibles.
Muchas gracias por tu comentario.
Un saludo,
buenas. Las BADIS se pueden implementar en cualquier modulo de SAP y para cualquier proceso.
Mas exactamente en HCM
Buenas
He conseguido imlementar mi BADI pero ya existia una implementacion estandar previa de dicha BADI. En este caso ¿como se trabaja? ¿Pueden convivir las 2 BADIs o tengo que ‘anular’ (no sé como) la estandar previa copia de los metodos a la Z?
Gracais de antemano
Eso depende. Es importante tener en cuenta que la BAdI tenga seleccionada la casilla de implementación múltiple y que no tenga marcada la de Uso interno de SAP.
Bien explicado claro y sencillo, me ha resultado de mucha utilidad, muchas gracias
Muchas gracias Milagro. Nos alegra que te haya resultado de ayuda. Te animamos a seguir explorando el contenido del blog.
Un saludo
De gran utilidad
Muchas gracias, Oscar. Nos alegra que te haya sido de utilidad.
Un saludo
Muchas gracias claro y conciso.