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

[RESOLVIDO] Rodar procedure na tela pai, apartir da viewer SMART

Discussão em 'EMS , HCM e Totvs 11' iniciado por afarns, Junho 27, 2018.

Status do Tópico:
Não esta aberto para novas mensagens.
  1. afarns

    afarns Sem Pontuação

    Boa tarde Senhores.

    Estou com uma tela Smart, nela existe um browse, sim o browse está direto na tela principal (.w onde é instanciado todas viewers e querys), tenho uma procedure neste .w principal que faz a busca dos valores que são exibidos no browse.
    Agora a partir de uma viewer deste .w preciso acionar esta procedure para atualizar as informações de dentro do browse, tentei passar por parâmetro para a viewer o Handle da window, mas tive o erro 2128 acredito que na hora de usar o handle na viewer, ele não consegue identificar do que se trata.
    Alguem tem alguma ideia de como posso fazer isso ?

    Desde já, obrigado.
  2. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    tem 2 jeitos:
    Primeiro jeito:
    1) crie na viewer uma procedure recebehandle, onde o parametro seria define input parameter handlePai as handle no-undo.
    2) na tela principal, na procedure local-initialize, depois de {include/i-inifld.i} vc coloca run recebehandle in h_nomeviewer(this-procedure).

    Agora vc cria na tela principal uma procedure que atualiza o que vc precisa, na viewer, no ponto que precisa que atualiza, vc faz run procedureTelaPrincipal in handlePai. pode até passar algum parametro

    segundo jeito:
    1) vc cria um link de smart de state de origem na viewer e destino em this-procedure;
    2) na viewer vc faz a qualquer momento run new-state('atualizabrowser');
    3) na tela principal, na procedure state-changed, depois do run pi-trata-state(p-issuer-hdl, p-state). vc faz if p-state = 'atualizabrowser' then ...... faz o que precisa

    Esse segundo jeito tem uma vantagem, todos os smarts que tiverem um link de state com a viewer, recebe o p-state, então vc pode tomar varias atitudes em varias smarts.
    Se quiser pode passar dados, por exemplo, contatenar uma chave de tabela, codigo do cliente por exemplo, run new-state('atualizabrowser|' + string(emitente.cod-emitente)).

    na state-changed, if p-state begins 'atualizabrowser' then assign codEmitente = int(entry(2,p-state,'|').

    coisas desse tipo
    afarns curtiu isso.
  3. afarns

    afarns Sem Pontuação

    Opa, fazia anos que não trabalha com smart, perfeito o segundo jeito vai servir até para outras situações aqui que vou precisar futuramente.. valeu @bootstrapmaster sempre salvando..
  4. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    eu costumo usar pra habilitar e desabilitar botões de acordo com uma situação especifica, aqui tem muito de registros com situação Aberto, em processo, encerrado ou cancelado, dai vc ve o que habilita ou não em termos de incluir, excluir, alterar, agora se quiser por exemplo, em uma viewer vc mudar o status de um registro e quiser que isso já mostre nas outras viewers, no container vc tem a smart query, nela tem umas procedures interessantes, vc pode usar a pi-posiciona-query() recebendo o rowid do registro principal, depois usar a pi-reposiciona-query() passando o rowid, quando faz isso, ele atualiza todas as viewers e browsers, tipo um refresh na tela.
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página