Como verificar se um registro na tela foi Alterado.

Discussão em 'Progress 4GL' iniciado por marcosoliv, Abril 4, 2011.

  1. marcosoliv

    marcosoliv Membro Participativo

    Senhores,

    Existe algum comando no progress que verifica se o registro que esta sendo editado na tela sofreu alguma alteração em algum campo ?
    Isso é para uma geração de log de alterações.

    Marcosoliv
  2. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    Caro colega,

    Se você usa o EMS e está querendo controlar tabelas do produto, pode usar a tabela de dicionarios de dados e criar as triggers de dicionários comparando o <tabela>-new com a <tabela>-old (buffers) pelo comando BUFFER-COMPARE.

    Porém se não usa o EMS ou está querendo controlar tabelas especificas, fiz um exemplo que pode ajudar:

    Código:
    
    def var        c-alteracao  as character.
    def temp-table tt_emitente  like emitente.
    
    find last emitente     exclusive-lock no-error.
    
    /***** Antes de Salvar o registro, cria a tt com o registro atual *****/
    empty temp-table tt_emitente.
    
    create tt_emitente.
    buffer-copy emitente to tt_emitente.
    
    /***** Altere o registro *****/
    assign emitente.int-1 = random(5,10)
           emitente.dec-1 = random(5,10).
    
    /***** Depois Salvar o registro, compare a TT com o registro atual, os campos alterados serão mostrados na variavel c-alteração *****/
    buffer-compare emitente to tt_emitente save c-alteracao.
    
    message emitente.cod-emitente               skip
            emitente.int-1                      skip(1)
            tt_emitente.cod-emitente            skip
            tt_emitente.int-1                   skip(1) 
            "Campos Alterados: " c-alteracao    view-as alert-box.
    
    
    Marildo de Mendonca curtiu isso.
  3. Cobra.cne

    Cobra.cne Equipe de Suporte Moderador

    Só complementando o Eduardo, independente de utilizar o EMS ou não é possível fazer a verificação na trigger utilizando o buffer-old e buffer-new:
    Código:
    TRIGGER PROCEDURE FOR WRITE OF tabela NEW tabela-novo OLD tabela-antiga.
    def var        c-alteracao  as character.
    buffer-compare tabela-novo to tabela-antiga save c-alteracao.
    
    message "campos alterados: " c-alteracao view-as alert-box.
    
    Utilizando componentes dinâmicos (handles) é possível descobrir quais campos foram alterados e seus valores.

    Qualquer coisa posta mais detalhes.

    T+
  4. marcosoliv

    marcosoliv Membro Participativo

    Olá Galera,

    Obrigado pelas dicas... vou estar testando e depois complemento o post caso seja necessário.

    Marcosoliv

Compartilhe esta Página