¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo capturar el código de función en SAP para personalizar eventos de clic en botones

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 38 Vistas
0
Cargando...

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.

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

Sin respuestas

No hay respuestas para mostrar No hay respuestas para mostrar Se el primero en responder

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?