Sei sulla pagina 1di 7

Para localizar una BADI:

1.- Ir a tx SE24 e introducir la clase CL_EXITHANDLER, pulsar F7


2.- Hacer doble click en el metodo GET_INSTANCE y poner una break-point despues de
la llamada CALL METHOD cl_exithandler=>get_class_name_by_interface

En el parametro CLASSNAME vendra el nombre de la clase y en el parametro


EXITNAME tendremos el nombre de la BADI

3.- En la transaccion SE19 marcamos el radiobutton badi clasico del bloque Crear
Implementacion, introducimos el valor del campo EXITNAME y le damos al boton
Implement. (crear implementacion)

4.- Tenemos que asignar un nombre Z a la implementacion de la clase, despues


colocamos una descripcion y en la pestaña de interface nos vendran todos los metodos
que tenemos disponibles, donde haciendo doble click podamos introducir el codigo
deseado

ENHANCEMENTS

Las user-exits y badis se estan sustituyendo por enhancements que son fragmentos de
codigo estandar en los que podemos introducir nuestro codigo

Si te fijas en el código de la mayoría de transacciones standar veras que pone

ENHANCEMENT-POINT (nombre del enhancement) SPOTS (punto de ampliacion)

para poder implementar una enhancement haremos lo siguiente:

1.- Nos posicionaremos en el include donde este el codigo que deseamos ampliar y
pulsaremos el boton de activar ampliaciones (es un botoncito que aparece como una
especie de espiral o bien pulsar SHIFT + F4)

2.- Una vez pulsado el boton de ampliar veremos que la pantalla de codigo se pone
blanca y con las letras en gris (como cuando aplicamos una nota manualmente), nos
iremosa donde este nuestro punto de ampliacion y si por ejemplo pone
ENHANCEMENT-POINT SAPLMIGO_01 SPOTS ES_SAPLMIGO STATIC. pincharemos con
el boton derecho en donde pone ES_SAPLMIGO y seleccionaremos Ampliaciones-
>Crear

3.- Asignaremos un nombre a la clase que implementamos y luego nos aparecera un


fragmento de codigo donde podremos introducir lo que deseemos
¿Qué es una BADI ?

Las BADI’s (Bussiness Ad-ins) son unas 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

Es decir sirven para acomodar los requerimientos específicos de un cliente a las


transacciones estándar de sap. Para los que acaban de adentrase en sap vamos a
explicar esto un poco más el resto se puede saltar el siguiente párrafo.

El código generado por SAP en sus transacciones estándar (para realizar un pedido,…)
no se puede modificar (salvo para implementar un parche de SAP ), ya que se perdería
el soporte que este ofrece a su producto. Pero pongamos que cuando termino de hacer
un pedido de comprar por ME21N necesito guardar ciertos datos de este pedido en una
tabla ZPEDIDOS que yo he creado. Pues para esto están las ampliaciones (BADI’s, user
exits, field exits) que al fin y al cabo no son más que fragmentos de código que me
permite SAP meter dentro de su código estándar para realizar ciertas operaciones a
medida, en este caso meter la información que necesito en una tabla cuando se crea el
pedido en concreto.

Básicamente cumplen la misma función que las USER EXITS y las FIELD
EXITS amen de algunas diferencias que vamos a exponer.

No las confundamos con las BAPI’s que de una forma llana y sencilla podríamos decir
que son simplemente funciones abap que pueden consultarse desde la transacción
BAPI y llamadas desde otros sistemas y que realizan funciones concretar con los
parámetros que se les pasa como crear pedidos, modificarlos, crear documentos de
material, ….

Diferencia entre BADI y las USER EXITS

 BADI se puede utilizar todas las veces que quieras, donde las users exits solo
se pueden usar una sola vez. Ejemplo: Si asignas una user-exit a un proyecto
usando la transacción CMOD, entonces no puedes volver a asignarlo a otro
proyecto. Es decir varios programadores pueden implementar la misma BADI
independientemente.
 Las BADI’s son mucho más moldeables a las necesidades del programador en
cuento a que podemos definir los puntos de salida, junto con la lógica de
programación que necesitemos. Es decir posee todas las propiedades de una
programación orientada a objetos.
Como encontrar la BADI que necesitamos

Existen varios métodos para encontrar la BADI que necesitamos pero nosotros vamos
a explicar un método basado en la transacción ST05 (Performance Analysis).

Esta técnica de análisis se basa en el echo de que todas las BADIS’s están registradas
en tablas de SAP. Por lo que en cada llamada a una Badi el sistema pasa por estas
tablas. Las tablas de las BADIS son las siguientes SXS_INTER, SXC_EXIT,
SXC_CLASS y SXC_ATTR. A estas tablas Sap siempre accede mediante las
vistas V_EXT_IMP y V_EXT_ACT. Por lo que estas vistas (T: SE11) serán la base de
nuestro análisis.

EJEMPLO:

Supongamos que quiero saber que BADIS son llamadas en la transacción “Maintain
Business Partners” código BT

PASOS:

1.- Primero chequeamos que ningún otro usuario (T:SM04) o jobs en fondo (T: SM50)
están usando el mismo usuario que tú.

2.- Nos vamos a la transacción ST05 (Performance Analysis) y marcamos el flag


"Buffer trace", después pulsamos el botón “Activate Trace “, para activar el Trace.

3.- Inmediatamente después ya que el sistema está ya “Grabando” nos vamos a la


transacción BT que queremos analizar y pulsamos el boton "Organization" completando
los campos con los siguientes datos de prueba:

Al finalizar pulsamos el boton salvar.

4.- Volvemos a la ventana donde teníamos abierta la ST05 y pulsamos el botón


"Deactivate Trace" para finalizar el trace y pulsamos sobre el botón "Display Trace",
entonces el popup "Set Restrictions for Displaying Trace" aparecerá.

5.- Ahora vamos a filtrar el Trace con los objetos: V_EXT_IMP y V_EXT_ACT. Que
son nuestras vistas.
Pulsamos el botón "Copy (F8)" , Fill Operations: OPEN y pulsamos el botón "Enter"

ANALISIS DE LOS RESULTADOS

Obtendremos un listado parecido a este que interpretaremos de la siguiente manera:

Todas las “interface class names” de las vista V_EXT_IMP comienzan con IF_EX_.
Este es el prefijo estándar de Sap para las “ BAdI class interfaces “. El nombre de la
BAdI está después de este IF_EX_.
Es decir el nombre de la BADi
para IF_EX_ADDR_LANGU_TO_VERS es ADDR_LANGU_TO_VERS.
En la transacción SE18 puedes ver la definición de la BADI.

Aconsejamos durante la realización del Trace no ejecutar ninguna otra transacción o


comando que no sean los propios de análisis si queremos obtener unos resultados lo
más limpios posibles. Bien pues ya podéis realizar una función que propiamente es de
analista .

No obstante podemos ver una lista de las BADI’s disponibles haciendo lo siguiente:
- Vamos a la Transacción SE18
- Pulsamos F4 para desplegar el matchcode
- Hacemos click en el icono “Sistema de información”
- Aumentamos el campo “Cant. Máxima aciertos” a 999999
Hacemos click en OK.

Se nos listará de esta forma las BADIS disponibles.

Como Implementar una BADI

Las transacciones con las que vamos a trabajar con las BADI’s son las:

SE18 – Definición de BADIS


SE19 – Implementación de BADIS

Supongamos que hemos elegido la BADI ME_PROCESS_PO_CUST y su método


CLOSE que cubren necesidades especificas de la creación y modificación de pedidos de
materiales, transacciones ME21N y ME22N.

Por lo tanto:

Obtener la información relevante de BADIs realizando los siguientes pasos:

- Vamos a la transacción SE18 con la BADI ME_PROCESS_PO_CUST estamos


trabajando en este grupo de badi (ME21N)
- Click en visualizar
- Click en la solapa Interfase
- Doble click en CLOSE
- Click en la solapa Parameters, en este caso vemos a IM_HEADER.

En tipo de referencia vemos que su tipo es IF_PURCHASE_ORDER_MM

Hallar los métodos disponibles para cada parámetro:

Supongamos que hemos elegido ME_PROCESS_PO_CUST y dentro de el a POST

- Vamos a la SE18 con la BADI ME_PROCESS_PO_CUST


- Click en visualizar
- Click en la solapa Interfase
- Doble click en POST

Se presentan sus parámetros


Cada uno tiene un tipo de referencia
El primero es un simple tipo de datos EBELN
El segundo IM_HEADER en cambio es tipo IF_PURCHASE_ORDER_MM
Si se hace doble click sobre IM_HEADER aparecen los metodos disponibles.
.
.
.
CREATE_ITEM
GET_DATA
GET_PREVIOUS_DATA
.
.
Etc.

Para hallar detalles de cada método hacer doble click sobre cada uno, por
ejemplo
Doble click sobre GET_DATA
Click en parametros
Aparece como parámetro RE_DATA de tipo MEPOHEADER
Si se hace click sobre MEPOHEADER se vera que es una estructura de datos de
cabecera.

Es importante saber que al principio la implementación no esta definida, la


primera ves que se entra a SE19 hay que crear la implementación con el mismo
nombre que ya existe en SE18.

Crear la Implementación del BADI seleccionado

- Vas a la Transacción SE19


- Click en Crear
- Darle el nombre Implementación, por ejemplo ME_PROCESS_PO_CUST
- Luego pide nombre Definición, es la misma ME_PROCESS_PO_CUST
- Paquete es AM2P
- Pide la orden de transporte
- Click en salvar
- Pide una clave SAP de modificación de objeto estándar.
- Pide un comentario, habitualmente igual al de la orden de transporte.
- Click en Salvar
- Click en Activar y marcar todo para que se recompile completamente

Modificar el código fuente de la Implementacion

- Vas a la Transacción SE19 con la BADI ME_PROCESS_PO_CUST


- Click en Modificar
- Click en solapa interfase
- Doble click sobre CLOSE
- Introducir la clave
- Editar el texto del código fuente.

Importante, nunca olvides hacer la activación formal:

- Vas a la Transacción SE19 SE19


- Click en el menú superior Implementación
- Click en activar.

Si no no funcionara.

Potrebbero piacerti anche