Duvida UPC impedir abertura tela em duplicidade

Discussão em 'Progress 4GL' iniciado por ivodarocha, Abril 6, 2015.

  1. ivodarocha

    ivodarocha Membro Participativo

    Richard, obrigado pela ajuda.

    No Totvs11 listou apenas os programas aberto por ele mesmo, porem as telas abertas pelo usuário não são listadas.
  2. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Então, ai temos um probleminha por causa do menu do datasul11, ou 12 pra quem está na versão 12........
    Pra cada item que vc carrega o menu abre uma sessão progress, se fosse no ems2, vc conseguiria rastrear certinho, talvez tenha apelar pra uma api do windows que te diga os programas que estão em execução ou algo do tipo.
  3. LFBuozi

    LFBuozi Membro Participativo

    Uma vez, na necessidade de bloquear a mesma PD4000, eu fiz o exemplo abaixo na minha UPC, veja se atende:

    Código:
    ...
    
    /*--- variável global para conferência ---*/
    DEF NEW GLOBAL SHARED VAR i-handle-unico AS INT NO-UNDO.
    
    /*--- se a variável está zerada, então atribui o handle de um objeto qualquer que uso em minha upc ---*/
    IF VALID-HANDLE(wh-perc-comis-pd4000) AND
        i-handle-unico = 0 THEN DO:
       ASSIGN i-handle-unico = INT(wh-perc-comis-pd4000:HANDLE).
    END.
    /*--- caso a variável já tenha um valor, então avisa que tem uma tela aberta e sai do programa ---*/
    ELSE IF VALID-HANDLE(wh-perc-comis-pd4000) AND
        i-handle-unico <> INT(wh-perc-comis-pd4000:HANDLE) AND
        i-handle-unico > 0 THEN DO:
       MESSAGE
           "Já existe outra tela do PD4000 aberta e isto causará vários problemas na inclusão e cálculo de pedidos." SKIP
           "Feche todas as telas do PD4000 abertas e abra novamente." SKIP
           VIEW-AS ALERT-BOX INFO BUTTONS OK.
       ASSIGN i-handle-unico = -1.
       LEAVE.
    END.
    
    /*--- ao fechar o programa a variável é zerada novamente ---*/
    IF p-ind-event  = "after-destroy-interface"  AND
       p-ind-object = "container"      THEN DO:
    
        ASSIGN i-handle-unico = 0.
    
    END.
    
    ...
    
    ivodarocha curtiu isso.
  4. ivodarocha

    ivodarocha Membro Participativo

    LFBuozi, muito obrigado pela ajuda

    Funcionou parcialmente.
    Ele avisou que havia outro pd4000 aberto e mesmo assim abriu a segunda tela.
    Outra coisa que percebi é que depois de fechar todas as tela e repetir a operação, a mensagem não é apresentada.

    Fiz vários testes mas não consegui solucionar

Compartilhe esta Página