Hey dad, look...no hands
In today’s article I will show you (and explain!) how you can make a selection screen refresh itself on a regular basis without user intervention.
Are you ready?
Our example shows a parameter that refreshes itself each second.
Because the code is simple I’ll show it all at once and only then will explain it:
PARAMETERS : p_conta TYPE t DEFAULT 300.
CLASS lcl_handler DEFINITION.
PUBLIC SECTION.
METHODS: corre_handler FOR EVENT finished OF cl_gui_timer.
ENDCLASS.
DATA o_temporizador TYPE REF TO cl_gui_timer .
DATA o_handler TYPE REF TO lcl_handler .
CLASS lcl_handler IMPLEMENTATION.
METHOD corre_handler.
CALL METHOD o_temporizador ->run.
CALL METHOD cl_gui_cfw =>set_new_ok_code
EXPORTING
new_code = 'REFR'.
ENDMETHOD.
ENDCLASS.
INITIALIZATION.
CREATE OBJECT o_temporizador.
CREATE OBJECT o_handler.
o_temporizador-> interval = '1' .
CALL METHOD o_temporizador-> run .
SET HANDLER o_handler-> corre_handler FOR ALL INSTANCES.
AT SELECTION-SCREEN OUTPUT .
p_conta = p_conta - 1 .
The trick is in using CL_GUI_TIMER class in interaction with the event AT SELECTION-SCREEN OUTPUT.
-
First we declare the parameter that should be automatically updated
-
Then we declare a small class to implement the handler of the event triggered by the end of the timer of CL_GUI_TIMER.
-
Next we declare two instances, one from the timer (CL_GUI_TIMER) and another from our handler LCL_HANDLER.
-
INITIALIZATION event creates the timer and handler objects, sets the timer and links your event to our handler.
-
The implementation method handler restarts the timer and launches an OK code that refreshes the screen, running the event AT SELECTION-SCREEN OUPUT.
-
Finally the event AT SELECTION-SCREEN OUTPUT only decreases our timer.
Quite simple, right? Any doubts?
Thank you Evil Saltine for the photo.
Greetings from Abapinho.