Duvida evento após clicar no botão cancelar do pi-acompanhar

Discussão em 'Progress 4GL' iniciado por ueluis, Maio 27, 2014.

  1. ueluis

    ueluis Membro Participativo

    Galera,

    gero um relatório que exporta informações para o excel e utilizo o pi-acompanhar para exibir os dados adicionados no arquivo.
    quando o usuario clica em cancelar o arquivo fica preso em segundo plano (excelappl:visible = false. )
    quero colocar um evento para quando o usuario clicar no cancelar do pi-acompanhar, mudar o visible do excel para true.
  2. pizzaia

    pizzaia Membro Participativo

    veja se ajuda o finally, dentro de um bloco que seja executado com erro ou não , sempre irá passar por ele.

    block-statements
    FINALLY :
    finally-logic ==> excelappl:visible = false.
    END [ FINALLY ] .
    [ block-end-statement ]

    t+
    Eberson Pizzaia
  3. ueluis

    ueluis Membro Participativo

    olá,

    como ficaria neste exemplo?
    Código:
    
    DEF TEMP-TABLE tt-pedido NO-UNDO
            field cod-emitente    as int
            field nome-abrev      as char
            field nome-emit       as char
            field CGC             as char.
    
    /* definição de variáveis  */
    DEFINE VARIABLE h-acomp   AS HANDLE NO-UNDO.
    DEF VAR i-linha           AS INT NO-UNDO INITIAL 1.
    DEF VAR excelappl         AS COM-HANDLE NO-UNDO.
    DEF VAR chWorkBook        as com-handle.
    DEF VAR chWorkSheet       as com-handle.
    DEF VAR loop AS INT.
    
    do loop = 1 to 500.
            create tt-pedido.
            assign
                tt-pedido.cod-emitente = loop
                tt-pedido.nome-abrev   = "Ful-" + string(loop)
                tt-pedido.nome-emit   = "Fulano-" + string(loop)
                tt-pedido.CGC         = "12145145" + string(loop).
    END.
    
    
    /* executando de forma persistente o utilitário de acompanhamento */
    RUN utp/ut-acomp.p PERSISTENT SET h-acomp.
    {utp/ut-liter.i Exportando_Registros_Para_Excel *}
    
    RUN pi-inicializar IN h-acomp (INPUT RETURN-VALUE).
    
    /*executando a procedure exportar.*/
    RUN exportar.
    
    
    RUN pi-finalizar IN h-acomp.
    RETURN "OK":U.
    
    PROCEDURE exportar:
    
        RUN pi-acompanhar IN h-acomp (INPUT STRING("Preparando para Criar Arquivo...")).
    
        create "Excel.Application" excelappl.
    
            IF excelappl  = ? THEN DO:
                MESSAGE "Não existe Microsoft Excel instalado nesta máquina." VIEW-AS ALERT-BOX INFO BUTTONS OK.
                RETURN.
            END.
              
                excelappl:VISIBLE = FALSE.
           
                RUN pi-acompanhar IN h-acomp (INPUT STRING("Criando Arquivo xls em Segundo Plano...")).
              
                chWorkbook = excelappl:Workbooks:add().
                chWorkSheet = excelappl:Sheets:item(1).
    
                RUN pi-acompanhar IN h-acomp (INPUT STRING("Inserindo Titulos das Colunas...")).
    
        ASSIGN
                    excelappl:range("A" + STRING(i-linha, "99999")):VALUE = "Cod Emit"
                    excelappl:range("B" + STRING(i-linha, "99999")):VALUE = "Nome Abrev"
                    excelappl:range("C" + STRING(i-linha, "99999")):VALUE = "Nome Emit"
                    excelappl:range("D" + STRING(i-linha, "99999")):VALUE = "cgc"
                    i-linha = i-linha + 1.
    
                 FOR EACH tt-pedido BREAK BY tt-pedido.cod-emitente:
                      
                      
                        RUN pi-acompanhar IN h-acomp (INPUT STRING("Exportando Pedido: " + string(tt-pedido.cod-emitente))).
                       
                                ASSIGN
                                    excelappl:range("A" + STRING(i-linha, "99999")):VALUE = tt-pedido.cod-emitente  
                                    excelappl:range("B" + STRING(i-linha, "99999")):VALUE = tt-pedido.nome-abrev    
                                    excelappl:range("C" + STRING(i-linha, "99999")):VALUE = tt-pedido.nome-emit     
                                    excelappl:range("D" + STRING(i-linha, "99999")):VALUE = tt-pedido.cgc
                                    i-linha = i-linha + 1.
                             
                      
                    END.
     
    
         /**************** Liberação do excel  ************/
        excelappl:visible = true.
        excelappl:ScreenUpdating = YES.
        release object excelappl.   
        release object chWorkbook.
        release object chWorksheet.
    END.
    
    
  4. lima

    lima Membro Participativo

    Porque você não desabilita o botão de cancelar? Assim o usuário não consegue cancelar e tem que ir até o final.

    segue abaixo a lógica.

    run pi-desabilita-cancela in h-acomp.

    Abraço.
  5. ueluis

    ueluis Membro Participativo

    olá,

    em ultimo caso poderia desabilitar sim, porém a intenção é dar autonomia ao usuario para interromper a exportação quando ele achar necessário e o mesmo ter o resultado da exportação até o momento em que cancelou.
  6. pizzaia

    pizzaia Membro Participativo

    segue código para tratar o cancelamento.

    Código:
    DEF TEMP-TABLE tt-pedido NO-UNDO
            field cod-emitente    as int
            field nome-abrev      as char
            field nome-emit       as char
            field CGC             as char.
    
    /* definição de variáveis  */
    DEFINE VARIABLE h-acomp   AS HANDLE NO-UNDO.
    DEF VAR i-linha           AS INT NO-UNDO INITIAL 1.
    DEF VAR excelappl         AS COM-HANDLE NO-UNDO.
    DEF VAR chWorkBook        as com-handle.
    DEF VAR chWorkSheet       as com-handle.
    DEF VAR loop AS INT.
    
    do loop = 1 to 500.
        create tt-pedido.
        assign
            tt-pedido.cod-emitente = loop
            tt-pedido.nome-abrev   = "Ful-" + string(loop)
            tt-pedido.nome-emit   = "Fulano-" + string(loop)
            tt-pedido.CGC         = "12145145" + string(loop).
    END.
    
    
    /* executando de forma persistente o utilitário de acompanhamento */
    RUN utp/ut-acomp.p PERSISTENT SET h-acomp.
    {utp/ut-liter.i Exportando_Registros_Para_Excel *}
    
    RUN pi-inicializar IN h-acomp (INPUT RETURN-VALUE).
    
    /*executando a procedure exportar.*/
    RUN exportar.
    
    RUN pi-finalizar IN h-acomp.
    RETURN "OK":U.
    
    PROCEDURE exportar:
    
        define variable v-terminou as logical no-undo initial no.
    
        do on stop undo, return error
           on error undo, return error :
    
            RUN pi-acompanhar IN h-acomp (INPUT STRING("Preparando para Criar Arquivo...")).
    
            create "Excel.Application" excelappl.
            IF excelappl  = ? THEN DO:
                MESSAGE "Não existe Microsoft Excel instalado nesta máquina." VIEW-AS ALERT-BOX INFO BUTTONS OK.
                RETURN.
            END.
            excelappl:VISIBLE = FALSE.
    
            RUN pi-acompanhar IN h-acomp (INPUT STRING("Criando Arquivo xls em Segundo Plano...")).
            chWorkbook = excelappl:Workbooks:add().
            chWorkSheet = excelappl:Sheets:item(1).
    
            RUN pi-acompanhar IN h-acomp (INPUT STRING("Inserindo Titulos das Colunas...")).
            ASSIGN
                excelappl:range("A" + STRING(i-linha, "99999")):VALUE = "Cod Emit"
                excelappl:range("B" + STRING(i-linha, "99999")):VALUE = "Nome Abrev"
                excelappl:range("C" + STRING(i-linha, "99999")):VALUE = "Nome Emit"
                excelappl:range("D" + STRING(i-linha, "99999")):VALUE = "cgc"
                i-linha = i-linha + 1.
    
            FOR EACH tt-pedido BREAK BY tt-pedido.cod-emitente:
                RUN pi-acompanhar IN h-acomp (INPUT STRING("Exportando Pedido: " + string(tt-pedido.cod-emitente))).
                ASSIGN
                    excelappl:range("A" + STRING(i-linha, "99999")):VALUE = tt-pedido.cod-emitente 
                    excelappl:range("B" + STRING(i-linha, "99999")):VALUE = tt-pedido.nome-abrev   
                    excelappl:range("C" + STRING(i-linha, "99999")):VALUE = tt-pedido.nome-emit    
                    excelappl:range("D" + STRING(i-linha, "99999")):VALUE = tt-pedido.cgc
                    i-linha = i-linha + 1.
            END.
    
            assign
                v-terminou = yes.
    
             /**************** Liberação do excel  ************/
            FINALLY : /* <================ */
    
            MESSAGE (if v-terminou then 'Processo Completo!' else 'Processo Cancelado pelo Usuário/Erro inesperado!')
                VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
            IF VALID-HANDLE(excelappl) then do:
                excelappl:visible = true.
                excelappl:ScreenUpdating = YES.
                release object excelappl.  
            end.
            IF VALID-HANDLE(chWorkbook) then
                release object chWorkbook.
            IF VALID-HANDLE(chWorksheet) then
            release object chWorksheet.
    
            END FINALLY.    /* <================ */
    
        end. /* bloco do */
    
    
    END.
    
    ueluis curtiu isso.

Compartilhe esta Página