Listbox en una celda en ALV OO
mayo 29, 2022
El proceso de creación de una BADI esta dividido en dos: una parte de definición y una de implementación. Ambas dos forman una BADI propiamente dicha.
Definición de una BADI
Ejecutamos la transacción SE18 y nos aparece esta pantalla inicial.
Llenamos el campo Enhancement Spot con el nombre de la BADI y presionamos el botón CREATE.
Nos va a aparecer un Popup en donde tenemos que volver a poner el mismo nombre que pusimos en la pantalla inicial y una descripción.
Presionamos OK y nos aparece la pantalla principal de una BADI existente o en el proceso de creación.
Presionamos el botón CREATE y nos aparece el siguiente PopUp
Debemos poner el nombre de la definición de la BADI (no es lo mismo que el nombre de la BADI en si)
Se creo la definición de la BADI y ahora vemos que la pantalla se lleno con propiedades de las mismas.
El check de MULTIPLE USE lo deshabilite para que la BADI solo tenga una implementación. De tener que implementar mas de una misma, existen dos posibilidades:
La diferencia entre los dos, es que cuando el check esta activado, se van a ejecutar TODAS las implementaciones existentes una luego de la otra (siempre y cuando el código este implementado también para eso). Cuando usamos los filtros, lo que hacemos es evitar que pase esto y permitirle al desarrollador separar las implementaciones y que no se ejecuten como el modo anterior.
Crear Interfase
Desplegamos el árbol que esta sobre la izquierda.
Y elegimos la opcion de Interface.
Llenamos el campo con el nombre de la misma y presionamos el botón de EDIT
Nos aparece una pantalla de la SE24.
Llenamos el campo del nombre del método y del nivel.
Presionamos el botón PARAMETERS para llenar los parámetros del mismo
Los parámetros deben tener los mismos parámetros de la user-exit (sin excepción)
Activación de la Definición
Completamos los campos y presionamos el botón ACTIVAR (recién ahora activamos todo lo que hemos hecho).
Crear Filtros
De tener que crear filtros, presionamos el botón derecho sobre la definición de la BADI y elegimos la opción CREATE FILTER
Nos aparece el siguiente Popup
Y lo llenamos de la siguiente manera (como ejemplo)
Volvemos a activar y nos queda ya definida, una BADI
Implementación de una BADI
Seleccionamos la BADI creada anteriormente desde la SE18 y presionamos el botón de IMPLEMENTAR BADI (es el de las dos personas juntas a la izquierda)
Nos aparece el siguiente Popup
Lo completamos y nos va a apacer luego uno idéntico, con la diferencia que en el segundo, debemos ingresar también el nombre de la clase.
Luego de implementar, nos aparece la pantalla con los atributos de la implementación, muy parecida a la anterior
Cuando la crea la implementación, siempre aparece en modo DISPLAY, así que presionamos el botón de EDIT
Implementar Filtros
De tener que implementar filtros, desplegamos el árbol de la derecha y seleccionamos la opción FILTER VAL.
Luego, presionamos el botón COMBINATION y nos aparece en la parte derecha, la combinación creada en la definición de la misma.
Hacemos doble-clic en la línea de la combinación y nos aparece el siguiente Popup.
Lo llenamos con los valores requeridos y presionamos OK
Vemos que ya se creo el filtro para la implementación.
Implementar el Método de la Clase
Luego, sobre el mismo árbol de la izquierda, seleccionamos la opción de IMPLEMENTING CLASS.
Al hacer doble-clic en el método de la derecha, nos aparece el siguiente popup y apretamos el botón YES.
Al hacerlo, nos lleva a una pantalla de la transacción SE24 para poder así, crear el código necesario.
Activación de la Implementación
Antes de empezar a desarrollar, debemos activar todo para que no haya errores a futuro. Es un paso que tenemos que hacer SI O SI antes de empezar.
Cuando presionamos ACTIVAR, nos aparece seleccionado los siguientes objetos. Como verán, hay 3 de ellos que no están seleccionados y debemos hacerlo SIEMPRE. De esta manera evitamos fallas a futuro.
Código a Implementar en la User-Exit
Como apartado final, el código a ser implementado es el siguiente (como ejemplo):
DATA:
*– Varibale declarations
v_exit_instance TYPE REF TO y_ejempli_badi_def ,
v_badi_not_implemented TYPE REF TO cx_badi_not_implemented,
v_badi_multiple_implemented TYPE REF TO cx_badi_multiply_implemented,
v_badi_initial_context TYPE REF TO cx_badi_initial_context,
v_badi_initial_reference TYPE REF TO cx_badi_initial_reference, “#EC NEEDED
v_badi_method_not_found TYPE REF TO cx_sy_dyn_call_illegal_method. “#EC NEEDED
DATA: vl_mensaje TYPE string.
PARAMETERS: pa_bukrs TYPE bukrs.
END-OF-SELECTION.
*– Get the BADI if Active
TRY.
GET BADI v_exit_instance.
CATCH cx_badi_not_implemented INTO v_badi_not_implemented. “#EC NO_HANDLER
CATCH cx_badi_multiply_implemented INTO v_badi_multiple_implemented. “#EC NO_HANDLER
CATCH cx_badi_initial_context INTO v_badi_initial_context. “#EC NO_HANDLER
ENDTRY.
*–look for badi implementation
IF NOT v_badi_not_implemented IS INITIAL OR
NOT v_badi_multiple_implemented IS INITIAL OR
NOT v_badi_initial_context IS INITIAL.
sy-subrc = 1.
CLEAR : v_badi_not_implemented, v_badi_multiple_implemented, v_badi_initial_context.
ENDIF.
*– Execute Method
IF sy-subrc = 0.
TRY.
CALL BADI v_exit_instance->exit_method
CHANGING
ch_mensaje = vl_mensaje.
CATCH cx_badi_initial_reference INTO v_badi_initial_reference. “#EC NO_HANDLER
CATCH cx_sy_dyn_call_illegal_method INTO v_badi_method_not_found. “#EC NO_HANDLER
ENDTRY.
WRITE vl_mensaje.
ENDIF.
En pos de que el código funcione correctamente, se debe cambiar el nombre de la definición de la BADI por la ya creada, y se tienen que adaptar los parámetros de la sentencia CALL BADI para replicar los mismos de la interfaz creada previamente
mayo 29, 2022
mayo 29, 2022
mayo 29, 2022
mayo 29, 2022
mayo 29, 2022