las_badis

14
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

Upload: rcsuarez

Post on 11-Aug-2015

66 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Las_badis

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:

Page 2: Las_badis

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:

Page 3: Las_badis

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”

Page 4: Las_badis

- Aumentamos el campo “Cant. Máxima aciertos” a 999999Hacemos 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 BADISSE19 – 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ámetrosCada uno tiene un tipo de referenciaEl primero es un simple tipo de datos EBELNEl segundo IM_HEADER en cambio es tipo IF_PURCHASE_ORDER_MMSi se hace doble click sobre IM_HEADER aparecen los metodos disponibles....CREATE_ITEMGET_DATAGET_PREVIOUS_DATA..Etc.

Para hallar detalles de cada método hacer doble click sobre cada uno, porejemploDoble click sobre GET_DATAClick en parametrosAparece como parámetro RE_DATA de tipo MEPOHEADER

Page 5: Las_badis

Si se hace click sobre MEPOHEADER se vera que es una estructura de datos decabecera.

Es importante saber que al principio la implementación no esta definida, laprimera ves que se entra a SE19 hay que crear la implementación con el mismonombre 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.

Otro modo de encontrar las badis que se ejecutan en un proceso / transaccion, es el siguiente:

> Ingresan en la trx. SE80.> Seleccionamos Clase / Interfase. > Dentro de ella colocamos la clase CL_EXITHANDLER.> Seleccionamos el metodo GET_INSTANCE para que se visualice el codigo de dicho metodo.> Colocamos un BREAK en la llamada al metodo:

call method cl_exithandler=>get_class_name_by_interfaceexportinginstance = instanceimportingclass_name = class_namechangingexit_name = exit_name exceptionsno_reference = 1no_interface_reference = 2

Page 6: Las_badis

no_exit_interface = 3data_incons_in_exit_managem = 4class_not_implement_interface = 5others = 6.

Ahora ejecutamos el proceso/transaccion, del cual deseamos averiguar las BADIS que se instancian, y al haber colocado el BREAK en el metodo anterior, cada vez se intente instanciar la BADI pasara por dicho punto y el nombre de la BADI la tendremos en el parametro "exit_name" (que cambia este metodo).

Sólo las badis que no permiten modificar su contenido pueden ser implementadas varias veces. Las Badis que periten modificar datos (que tienen exporting) no se pueden implementar varias veces. Aunque no permita modificar, a la hora de poner la badi se puede definir de implementación multiple o simple. Para que no sea neceasario meter ninguna clave a la hora de implementar la BADI, basta con que el nombre de dicha implementación empiece por Z. En paquete, le indicamos un paquete Z nuestroCuando pida la definición es cuando hay que indicarle el mismo nombre.

Enhancement Framework: Nuevo método para realizar ampliaciones al código ABAP en ECC 6.0 (ERP 6.0).Inicialmente los user-exits en ABAP eran el modo más usual de realizar ampliaciones en SAP. Este método utiliza módulos de función mediante los cuales se puede ingresar código ABAP. El sistema provee las funciones donde los user-exits son llamados y se cuenta con una interfaz definida y un programa Include. Es en éste programa Include donde se agrega el código requerido y se activa a través de un Proyecto de Ampliación vía la transacción CMOD.El problema principal de esta solución es que sólo es posible una implementación simple. Esto significa que si el enhancement es disponible en un proyecto activo, no puede reutilizarse en otro.Para resolver esta limitación SAP provee la utilización de BADI’s que soportan múltiples implementaciones. De esta forma se pueden crear varias instancias del mismo objeto bajo el concepto de la orientación a objetos.SAP brinda un nuevo framework para el desarrollo de ampliaciones conocido como Enhancement Framework. Esta nueva opción esta disponible a partir de la versión ECC 6.0. (SAP ERP 6.0)El Enhancement Framework es una nueva tecnología que brinda todas las técnicas de ampliación bajo un mismo techo. 

Las diferentes técnicas son las siguientes:

Ampliaciones de código (plug-ins) Ampliaciones de grupo de función Ampliaciones de clases Ampliaciones Kernel-BADI

En este tip nos focalizaremos en los enhancement ABAP para ampliaciones (Enhancements) de código ABAP.

II. Tipos de enhancements para ampliación de código fuente

Las ampliaciones de código fuente ABAP (source code enhancement/source code plug-in) es una de las tecnologías disponibles dentro del Enhancement Framework. Esta

Page 7: Las_badis

técnica se almacena en un programa de tipo include y no es parte del código fuente original. Las ampliaciones de este tipo permiten ampliar la funcionalidad de transacciones estandar sin modificaciones en el código fuente.

Existen dos tipos de ampliaciones:

1. Ampliaciones de tipo Implícito2. Ampliaciones de tipo Explícito

1. Las ampliaciones de tipo implícito son ampliaciones predefinidas provistas por SAP en el código fuente. Mediante la opción: Enhancement Operations -> Show implicit Enhancement Options aparecerán resaltadas las líneas de código relacionadas con la ampliación. Las podemos encontrar en los siguientes lugares:- Principio y final de un Include- Principio y final de un Método, módulo de Función, Rutina- Al final de una estructura- Al final de las sección privada, protegida y publica de clases locales

2. Las ampliaciones de tipo explícito pueden implementarse en cualquier parte del código fuente a excepción de algunas áreas restringidas por SAP. Para este tipo de ampliaciones existen dos formas:

- ENHANCEMENT-POINT: permiten agregar código extra en un programa fuente. Pueden ser estáticos (agregar nuevas declaraciones) o dinámicos (agregar código con alguna funcionalidad extra).- ENHANCEMENT-SECTION: es posible reemplazar parte del código existente. Puede ser estático (modificar declaraciones) o dinámica (reemplazar la funcionalidad estándar)

En este tip se verá un ejemplo de una Implementación de Ampliación (Enhancement) de tipo Explícito. III. Implementación de un Explicit Enhancement 

Como ejemplo vamos a utilizar el reporte RFBVBIC_0 que lee un archivo, compara y actualiza los datos bancarios proporcionados. La intención es agregar un nuevo select-option para filtrar la información por el campo Sucursal.Los siguientes son los pasos para modificar el reporte:

Page 8: Las_badis

1- Vamos a agregar la Sucursal como parámetro en la pantalla de selección:· Posicionar el cursor en el lugar donde se quiere agregar la ampliación

 · Presionar botón derecho: Enhancements > Create

- La ampliación a agregar es de tipo ENHANCEMENT-POINT ya que sólo se agregará un parámetro en la pantalla de selección.- Se ingresa el nombre del ENHANCEMENT POINT y del ENHANCEMENT SPOT que deberán crearse.

Page 9: Las_badis

 El sistema agrega en el código fuente del programa la sentencia ENHANCEMENT-POINT … SPOTS …

- Cambiar el editor a modo “Enhancement” mediante el botón de la espiral   (Shift + F4) - Posicionar el cursor sobre la sentencia ENHANCEMENT-POINT y luego ir con el botón derecho del mouse a: Enhancement Implementation -> Change

· En el siguiente cuadro de diálogo creamos la implementación correspondiente. 

Page 10: Las_badis

· Luego de este paso, en el programa aparecerán las sentencias ENHANCEMENT – ENDENHANCEMENT donde se debe agregar el código nuevo. 

· Por último, se activa el Enhancement 

· Al ejecutar el reporte se verá el nuevo parámetro de selección. 

- Modificar la verificación de datos y agregar el nuevo filtro.

· Seleccionar el código a reemplazar y luego con el botón derecho del mouse posicionarse en:Enhancements -> Create

Page 11: Las_badis

· El sistema agrega en el código fuente del programa la sentencia ENHANCEMENT-SECTION … SPOTS …

· Cambiar el editor a modo “Enhancement” mediante el botón de la espiral   (Shift + F4) · Posicionar el cursor sobre la sentencia ENHANCEMENT-SECTION y luego ir con el botón derecho del mouse a: Enhancement Implementation -> Create· En el siguiente cuadro de diálogo creamos la implementación correspondiente.

· Luego de este paso, en el programa aparecerán las sentencias ENHANCEMENT – ENDENHANCEMENT donde se debe agregar el código nuevo. 

Page 12: Las_badis

· Por último se activa el Enhancement IV. Para tener en cuenta …· Este escenario está referido a la inclusión de un 'ENHANCEMENT-POINT' y un 'ENHANCEMENT-SECTION' en un programa estándar, para lo cual se debe modificar ingresando la clave del objeto.· Lo único que se agrega en el programa estándar son estos Enhancements. La implementación de los mismos es Z, por consiguiente también el código agregado se hace sobre estas implementaciones Z.· Solo puede haber una implementación activa para un 'ENHANCEMENT-SECTION'.