Olha pai, agora sem mãos
Neste artigo vou mostrar-te (e explicar-te!) como podes fazer com que um ecrã de selecção de um programa se refresque periodicamente sem intervenção do utilizador.
Estás preparado?
O nosso exemplo mostra um parâmetro que se vai actualizando sozinho a cada segundo. Como o código é simples mostro-o todo de uma vez e explico-o a seguir:
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 .
O truque está em usar a classe CL_GUI_TIMER em interacção com o evento AT SELECTION-SCREEN OUTPUT.
-
Primeiro declaramos o tal parâmetro que vai ser automaticamente actualizado.
-
Depois declaramos uma pequena classe que há-de implementar o handler do evento espoletado pelo final do temporizador do CL_GUI_TIMER.
-
A seguir declaramos as duas instâncias, uma do temporizador (CL_GUI_TIMER) e a outra do nosso handler LCL_HANDLER.
-
O evento INITIALIZATION cria os objectos temporizador e handler , configura o temporizador e associa o seu evento ao nosso handler.
-
A implementação do método do handler reinicia o temporizador e lança um OK code que refresca o ecrã, correndo o evento AT SELECTION-SCREEN OUPUT.
-
Finalmente o evento AT SELECTION-SCREEN OUTPUT limita-se a decrementar o nosso contador.
Simples, não? Dúvidas?
Obrigado a Evil Saltine pela foto.
O Abapinho saúda-vos.