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?