1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Forçar refresh na query principal

Discussão em 'Progress 4GL' iniciado por fabianofss, Novembro 5, 2014.

  1. fabianofss

    fabianofss Membro Participativo

    Bom dia a todos,
    Eu tenho um programa pai x filho atualiza ambos onde eu tenho totalizadores no pai e sempre que inserir ou alterar um registro filho preciso atualizar a query da tela principal pra mostrar os valores totalizados.

    Alguém pode me dar uma dica?!
    Obrigado.
  2. Eilleen

    Eilleen Membro Ativo

    Boa tarde,

    Você precisa seguir alguns passos:

    No programa pai:
    - passar a HANDLE do programa pai para o programa filho por parâmetro;
    - criar uma procedure para fazer a atualização dos totalizadores e abrir a query;

    No programa filho:
    - validar se a HANDLE do programa pai;
    - chamar a procedure do programa pai.

    Exemplo:

    Programa pai:
    .
    .
    .
    .
    RUN programaFilho(INPUT THIS PROCEDURE);
    .
    .
    PROCEDURE atualizaQuery:
    .
    .
    .
    END PROCEDURE.


    Programa filho:

    DEF INPUT PARAMETER hProgPai AS HANDLE.
    .
    .
    .
    IF VALID-HANDLE(hProgPai) THEN
    RUN atualizaQuery in hProgPai.
    .
    .
    .


    Era isso que você precisava?

    :)
  3. fabianofss

    fabianofss Membro Participativo

    Bom dia,
    eu consegui uma solução usando uma combinação de variável global, new-state e state-changed
    mas a solução que você me apresentou parece ser mais limpa, vou testa-la!

    obrigado.
  4. Rogerio

    Rogerio Moderator Moderador Equipe de Suporte

    Fabiano voce conseguiu fazer isso??? Estou com a mesma situacao..

    Como conseguiu resolver????
  5. fabianofss

    fabianofss Membro Participativo

    Bom dia, eu consegui sim!
    criei um smartlink state no programa principal entre o browser e this-procedure
    na procedure state-changed do programa principal coloquei uma validação pro p-state
    CASE p-state:
    when 'AtualizaRegistro':U then do:
    for first bf-despviag
    where rowid(bf-despviag) = gl-despviag-rowid
    no-lock:
    run pi-reposiciona-query in h_dm254q01 (rowid(bf-despviag)).
    assign gl-despviag-rowid = ?.
    end.
    end.
    END CASE.


    e no browser ou viewer sempre que quero força a atualização eu uso o comando:
    run new-state("AtualizaRegistro").

    Obs: tem a forma que a Eilleen passou acima mas ainda não testei.
    VLW
  6. Rogerio

    Rogerio Moderator Moderador Equipe de Suporte

    Em momento do browse eu devo colocar o comando
    run new-state("AtualizaRegistro").

    Porque a forma que a Eilleen disse eu nao entendi o momento que dou um RUN ProgramaFilho!!!!

Compartilhe esta Página