Como prever a falta de campos no FIELDS

Discussão em 'Progress 4GL' iniciado por joelscampos, Abril 25, 2012.

  1. joelscampos

    joelscampos Membro Participativo

    Quando uso a clausula FIELDS num for each, se eu esquecer de colocar algum campo na FIELDS, o erro só ocorrerá em tempo de execução, e o pior é que quando é um programa chamado por WebService, não dá nenhum erro em tela.

    A intenção seria abortar todo o processo caso qualquer erro ocorra, mas sem ter que colocar verificação após cada comando.

    Imaginei que o exemplo abaixo funcionaria, mas o CATCH não pegou o erro referente ao FIELDS:

    DEF VAR i AS INTEGER.
    DO ON ERROR UNDO:

    FOR FIRST tabela_x FIELDS(campo_x) NO-LOCK:
    RUN pr.
    END.


    CATCH erro AS Progress.Lang.Error:
    DISP "Ocorreu algum Erro".
    DISP erro:GetMessageNum(1).
    DELETE OBJECT erro.
    END CATCH.
    END.
    PROCEDURE pr:
    ASSIGN i = tabela_x.campo_Y.
    END PROCEDURE.


    Por favor, alguém conhece alguma alternativa?
  2. kirchner

    kirchner Membro Participativo Moderador

    Eu considero isso um mega-P-bug do compilador do Progress.
    Não dá para aceitar esse tipo de erro em uma linguagem que se diz ser de 4ª geração.

    Mas por outro lado eu entendo as limitações técnicas também. Como o Progress permite que outro programa leia um buffer localizado pelo primeiro programa, não há muito o que fazer.
    Esse é mais um caso que demonstra que toda gambiarra um dia se tornará um tiro no pé.

    Outro exemplo que incomoda até hoje é o programa ter acesso ao RECID/ROWID. Uma vez que um detalhe de implementação foi exposto ao usuário, você está preso a ele até o fim da vida. Virou contrato, não pode ser alterado....
  3. joelscampos

    joelscampos Membro Participativo

    Blza. Obrigado kirchner!

Compartilhe esta Página