A diferença entre data() e buf2Buf() no Dynamics AX 2012
Publicado: 15 de fevereiro de 2025 às 22:53:57 UTC
Este artigo explica as diferenças entre os métodos buf2Buf() e data() no Dynamics AX 2012, incluindo quando é apropriado usar cada um e um exemplo de código X++.
The Difference Between data() and buf2Buf() in Dynamics AX 2012
As informações neste post são baseadas no Dynamics AX 2012 R3. Podem ou não ser válidas para outras versões.
Quando você precisa copiar o valor de todos os campos de um buffer de tabela para outro no Dynamics AX, tradicionalmente você faria algo como:
Isso funciona bem e, na maioria dos casos, é o caminho a seguir.
No entanto, você também tem a opção de usar a função buf2Buf:
Isso também funciona bem. Então qual é a diferença?
A diferença é que buf2Buf não copia campos do sistema. Campos do sistema incluem campos como RecId, TableId e, talvez o mais importante neste contexto, DataAreaId. O motivo pelo qual este último é o mais importante é que o caso mais típico em que você usaria buf2Buf() em vez de data() é ao duplicar registros entre contas da empresa, normalmente pelo uso da palavra-chave changeCompany.
Por exemplo, se você estiver na empresa "dat" e tiver outra empresa chamada "com" da qual deseja copiar todos os registros em CustTable:
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
Neste caso, funcionará porque buf2Buf copia todos os valores de campo, exceto campos do sistema para o novo buffer. Se você tivesse usado data() em vez disso, o novo registro teria sido inserido nas contas da empresa "com" porque esse valor teria sido copiado para o novo buffer também.
(Na verdade, isso teria resultado em um erro de chave duplicada, mas também não é isso que você quer).