Avalados por :
Este es mi primer blog, por favor siéntete libre de señalar los errores.
Siempre es tedioso encontrar el código de función en pantallas estándar, por ejemplo, un botón dentro de un control personalizado. En este caso, digamos que un evento de clic en un botón no se puede capturar a lo largo del flujo del programa estándar en todos los lugares.
Cuando queremos conocer el código de función en nuestra parte exacta del código se asignará dinámicamente como ‘%_GC 178 10’ y no se puede utilizar directamente para saber cuál es la función del usuario. Este podría ser el caso que enfrentemos al realizar cualquier mejora al programa estándar.
He buscado en toda la red de la comunidad y no pude encontrar una forma convincente de conocer el código de función. Cualquier referencia a la GUI es un atributo privado (no sé por qué SAP quiere ocultar el código de función)
Después de un análisis exhaustivo, encontré una forma de conocer el código de función. Creo que puede ayudar a alguien que esté buscando un escenario similar, por lo que comparto la idea.
Es una forma sencilla de dos llamadas de método como se explica a continuación.
Escenario: Quiero cambiar el estándar 'IMPRIMIR' (el marcado) por una página de declaración aduanera suplementaria. Esta subpantalla es una pestaña de control personalizado y los botones obtienen códigos de función dinámicos que se procesan para conocer el código de función real (aquí es '&PRINT_BACK') cuando es necesario.
Tengo que capturar el código de función de Impresión e insertar nuestra lógica empresarial en lugar de la impresión estándar.
Dentro del USER_COMMAND para el control personalizado, he creado una mejora implícita donde el OK_CODE para este botón de Impresión es esta basura ‘%_GC 178 10’.
No hay atributo para dar el OK_CODE correcto, por lo que he utilizado la siguiente lógica para obtener lo mismo
DATA: lo_control TYPE REF TO cl_gui_control,
lv_event TYPE string.
FIELD-SYMBOLS: <lo_event> TYPE REF TO cl_gui_event.
IF ok_code+0(4) EQ '%_GC'.
CALL METHOD cl_gui_control=>get_focus
IMPORTING
control = lo_control
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
IF NOT lo_control IS INITIAL.
ASSIGN lo_control->cur_event TO <lo_event>.
CALL METHOD <lo_event>->get_event_param
EXPORTING
pid = '0'
IMPORTING
value = lv_event.
ENDIF.
ENDIF.
LV_EVENT lleva el código de función actual. Aquí en este caso, contiene &PRINT_BACK.
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute