En este post vamos a ver una de las BADI´s mas utilizadas dentro de SAP. No es otro que la BADI
ME_PROCESS_PO_CUST que se utiliza para incluir funcionalidad dentro de los pedidos de compra (
ME21N,
ME22N,
ME23N) a través de los diferentes métodos que pone a nuestra disposición.
Para los que no tengáis claro que es una BADI os dejo el siguiente link del blog donde ya hablamos sobre ellas:
El primer paso si queremos utilizar esta BADI sería implementarla y activarla. Para ello debemos utilizar la transacción SE19. Aquí introduciremos el nombre de la BADI y pulsaremos sobre el botón "IMPLEMENTAR" como se ve en la siguiente imagen:
Tras esto el sistema nos pedirá que asignemos un nombre a nuestra implementación.
Tras aceptar el sistema nos mostrará la implementación que se va a crear. Podremos ver todos los métodos que están disponibles y en los que vamos a poder introducir código. Además nos va a mostrar la clase sobre la que vamos a trabajar para introducir nuestra lógica. En nuestro caso la clase se va a llamar ZCL_IM_ME_PROCESS_PO_CUST.
Finalmente grabamos y activamos. Ahora ya tenemos implementada la BADI y vamos a poder comenzar a introducir nuestro código a través de la clase que hemos comentado anteriormente. Para modificar la clase ejecutamos la transacción SE24.
Dentro veremos todos los metodos disponibles sobre los que vamos a poder trabajar.
En este punto ya lo que hace falta es identificar cual de los método se adecua mas a lo que necesitamos. Como veis hay unos cuentos y cada uno se ejecuta en un punto diferente de la ejecución. Os comento algunos de ellos:
- IF_EX_ME_PROCESS_PO_CUST~PROCESS_HEADER: Se lanza cuando modificamos algún dato de cabecera y por ejemplo el usuario presiona enter.
- IF_EX_ME_PROCESS_PO_CUST~PROCESS_ITEM: Se lanza cuando modificamos algún dato a nivel de linea y por ejemplo el usuario presiona enter.
- IF_EX_ME_PROCESS_PO_CUST~PROCESS_ACCOUNT: Se utiliza para tratar los datos de imputación que haya introducido el usuario. Por ejemplo podemos utilizarlo para chequear un centro de coste o una cuenta en función del material.
- IF_EX_ME_PROCESS_PO_CUST~CHECK: Como su nombre indica es un método marcado para realizar controles. Tiene un parámetro de salida que nos permite marcar la ejecución como errónea.
Podéis ir explorando el resto. Mi recomendación es que cuando necesitéis incluir lógica marquéis breakpoints en los diferentes métodos y ejecutéis la creación ó modificación de un pedido de compras. De esta forma veréis donde para cada método y que información traen sus parámetros. De está forma va a ser mas sencillo decidir donde introducir vuestro código.