Versão atual:

Comparativo de campos

Bom dia!

Estou escrevendo um fonte que faz o comparativo dos valores salvos em tabela, e o valor de memória. Esse fonte só é usado em pontos de entrada chamados antes de salvar os valores no banco de dados, para efeito de comparativo de alteração e montagem de e-mail notificando gestores sobre o que de fato foi alterado.

Porém, durante o desenvolvimento me deparei com uma mensagem: "macro of type &xx->&zz at line 40". Ja procurei em varios fóruns e não encontrei nada sobre o assunto.

O código é bem simples:

User Function CHECKALT(cAlias)
    Local cQuery    := ""
    Local cChanges  := ""
    Local nX        := 1
    Local aFields   := {}

    Local cQuery := ChangeQuery(" SELECT X3_CAMPO, X3_TIPO, X3_TITULO FROM SX3010 WHERE X3_ARQUIVO = '"+cAlias+"' AND X3_TIPO <> 'M' AND X3_CONTEXT IN ('R', '') ")
    TCQUERY cQuery NEW ALIAS "X3"

    While X3->(!EOF())
        aAdd(aFields, {X3->X3_CAMPO, X3->X3_TIPO, X3->X3_TITULO})
        X3->(DbSkip())
    End
    X3->(DbCloseArea())

    For nX := 1 to len(aFields)
        If aFields[nX][2] == 'N' .or. aFields[nX][2] == 'D'
            If &(cAlias)->&(aFields[nX][1]) != M->&(aFields[nX][1]) // <------------ Erro aqui
                cChanges += "Campo "+aFields[nX][3]+" alterado: "+&(cAlias)->&(aFields[nX][1])+"  >>  "+M->&(aFields[nX][1])+"" + CRLF
            EndIf
        Else 
            If AllTrim(&(cAlias)->&(aFields[nX][1])) != Alltrim(M->&(aFields[nX][1]))
                cChanges += "Campo "+aFields[nX][3]+" alterado: "+Alltrim(&(cAlias)->&(aFields[nX][1]))+"  >>  "+Alltrim(M->&(aFields[nX][1]))+"" + CRLF
            EndIf
        EndIf
    Next

Return cChanges

É possível usar a função &() da forma que eu especifiquei, ou tenho que de fato passar um alias fixado no fonte para que o mesmo funcione conforme o esperado?

Versão (1):

Ver a versão formatada

Comparativo de campos

  • criado 23 de Mar de 2021

Comentário

new question