Criar execução automática em tela de tempo em tempo

Olá a todos, um amigo me perguntou como ele poderia fazer para atualizar os registros de um browse automaticamente de tempos em tempo. Bom como essa pode ser a duvida de outros e minha também caso eu precise novamente desta rotina vou postar um exemplo em progress de como colocar essa rotina para executar automaticamente a cada x segundos usando o componente PSTimer do AppBuilder.

Vamos ver um exemplo simples de uma rotina que deve ser executada automaticamente a cada 15 segundos.

Incluía na tela os seguintes objetos da palette na tela:

PSTimer: responsável por disparar eventos de tempo em tempo, ao inserir um PSTimer na tela ele cria automaticamente uma variável do tipo COMPONENT-HANDLE com o nome ch + nome do componente e é a está variável que devemos usar para acessar as propriedades e métodos.

Text: Para apresentarmos o tempo para próxima execução, vamos chama-lo de fch-relogio.

Toogle Box: Para pausar ou iniciar o contador, vamos chama-lo de chb-para.

De dois clique sobre o PSTimer e altere a propriedade Interval para 60.

No definitions da tela declare um variável do tipo inteiro para controlar a próxima execução:

DEFINE VARIABLE vControle AS INTEGER NO-UNDO.

Na trigger OCX.Tick do PSTimer use o seguinte código:

    if vControle < integer(time) then
        ASSIGN vControle = integer(time) + 15.

    assign
        fch-relogio:screen-value in frame {&frame-name} = "Próxima Execução em: " + string(vControle - integer(time)).

    IF integer(time) = vControle THEN DO:
       MESSAGE "Executar agora"
           VIEW-AS ALERT-BOX INFO BUTTONS OK.
    END.

Na trigger VALUE-CHANGED do chb-parar (toogle box) use o seguinte código para parar ou iniciar o contador:

    if chb-parar:CHECKED in frame {&frame-name} = yes then do:
        ASSIGN 
            chCtrlFrame:pSTimer:ENABLED = FALSE
            fch-relogio:screen-value in frame {&frame-name} = "Próxima Execução em: --".
    end.
    if chb-parar:CHECKED in frame {&frame-name} = no then do:
        ASSIGN 
            chCtrlFrame:pSTimer:ENABLED = true.
    end.

Por enquanto é isso pessoal.

Qualquer duvida ou observação por favor comentem.

 

2 thoughts on “Criar execução automática em tela de tempo em tempo

  1. muito bom seus posts sobre progress, estou começando e esta me ajudando muito !! poste mais exemplos de progress

    1. Legal que tenha gostado e que os post estejam ajudando!
      Qualquer duvida pode mandar, talvez possamos ajudar!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.