[RESOLVIDO] Tratamento de erro no progress 10.2B

Discussão em 'EMS , HCM e Totvs 11' iniciado por fabianofss, Dezembro 29, 2014.

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

    fabianofss Membro Participativo

    Boa tarde a todos,

    Estou procurando uma forma de pegar um erro em assign e retornar em uma variável.
    E encontrei a seguinte:
    Código:
    DO ON ERROR UNDO:
        DEF VAR i AS INTEGER.
        ASSIGN i = INTEGER('a').
    
        CATCH erro AS Progress.Lang.ProError:
            DISP "Esta mensagem só aparece se ocorrer um erro".
            DISP erro:GetMessageNum(1).
            DELETE OBJECT erro.
        END CATCH.
    
        FINALLY:
            DISP "Esta mensagem sempre é exibida".
        END FINALLY.
    END.
    Más este tratamento só existe no progress 10.1C
    e minha versão ainda é a 10.2B, alguém sabe qual seria a melhor solução pra mim?

    Obrigado.
  2. Agnaldo

    Agnaldo Membro Ativo

    Coloca uma clausula no-error no teu assign:
    Algo como:
    Código:
    DO ON ERROR UNDO:
        DEF VAR i AS INTEGER.
        ASSIGN i = INTEGER('a') NO-ERROR.
        IF ERROR-STATUS:ERROR
           THEN
               MESSAGE "erro no assign" VIEW-AS ALERT-BOX.
           ELSE
               MESSAGE "tudo ok" VIEW-AS ALERT-BOX.
    END.
    
    fabianofss e don.junior curtiram isso.
  3. Agnaldo

    Agnaldo Membro Ativo

    Completando....
    De uma olhada no ERROR-STATUS.
    Ele permite ainda capturar a mensagem de erro.
  4. jaisonantoniazzi

    jaisonantoniazzi Membro Ativo

    Bom dia @fabianofss
    Há duas linhas a serem seguidas, usar a linha tradicional com o ERROR-STATUS, como o @Agnaldo sugeriu ou usar esta com o Catch, como você pediu, veja este me código se lhe atende:
    Código:
    PROCEDURE comErro:
    
        DO ON ERROR UNDO, LEAVE:
    
            INTEGER('A').
           
            CATCH erro AS PROGRESS.lang.SysError:
                RETURN ERROR erro.
            END.
        END.
    
    END.
    
    DO ON ERROR UNDO, LEAVE:
        RUN comErro.
        MESSAGE 1
            VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
        CATCH erro AS PROGRESS.lang.SysError:
            IF  erro:getmessagenum(1) = 76 THEN
                MESSAGE            
                    'Ocorreu erro de conversão numérica' Erro:getmessage(1)
                    VIEW-AS ALERT-BOX ERROR BUTTONS OK
                    TITLE 'ERRO TRATADO'.
            ELSE
                MESSAGE            
                    'Ocorreu erro' Erro:getmessage(1)
                    VIEW-AS ALERT-BOX ERROR BUTTONS OK
                    TITLE 'ERRO TRATADO'.
        END.
    END.
    
    Você pode ver mais detalhes no OpenEdge® Development: Error Handling
    ou neste link da Progress.

    Veja se te atende.
    Forte abraço.
    don.junior e fabianofss curtiram isso.
  5. fabianofss

    fabianofss Membro Participativo

    Opa era isso mesmo que eu precisava!
    Quando dava erro pelo web speed eu tinha que olhar o log, agora estou conseguindo retornar para o cliente.

    Muito obrigado ao dois!
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página