Miklix

A diferença entre data() e buf2Buf() no Dynamics AX 2012

Publicado: 15 de fevereiro de 2025 às 22:53:58 UTC
Última atualização: 12 de janeiro de 2026 às 08:41:08 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++.


Esta página foi traduzida automaticamente do inglês para a tornar acessível ao maior número possível de pessoas. Infelizmente, a tradução automática ainda não é uma tecnologia aperfeiçoada, pelo que podem ocorrer erros. Se preferir, pode ver a versão original em inglês aqui:

The Difference Between data() and buf2Buf() in Dynamics AX 2012

A informação neste artigo baseia-se no Dynamics AX 2012 R3. Pode ou não ser válida para outras versões.

Quando precisas de copiar o valor de todos os campos de um buffer de tabela para outro no Dynamics AX, tradicionalmente fazes algo como:

toTable.data(fromTable);

Isto funciona bem e, na maioria dos casos, é o caminho a seguir.

No entanto, também tens a opção de usar a função buf2Buf em vez disso:

buf2Buf(fromTable, toTable);

Isto também funciona bem. Então, qual é a diferença?

A diferença é que o buf2Buf não copia os campos do sistema. Os campos do sistema incluem campos como RecId, TableId, e talvez mais importante neste contexto, DataAreaId. A razão pela qual esta última é a mais importante é que o caso mais típico em que se usa buf2Buf() em vez de data() é ao duplicar registos entre contas da empresa, normalmente através do uso da palavra-chave changeCompany.

Por exemplo, se estiver na empresa "dat" e tiver outra empresa chamada "com" da qual deseja copiar todos os registos no CustTable:

while select crossCompany : ['com'] custTableFrom
{
    buf2Buf(custTableFrom, custTableTo);
    custTableTo.insert();
}

Neste caso, funcionará porque o buf2Buf copia todos os valores dos campos, exceto os campos do sistema, para o novo buffer. Se tivesse usado data() em vez disso, o novo registo teria sido inserido nas contas da empresa "com" porque esse valor também teria sido copiado para o novo buffer.

(Na verdade, teria resultado num erro de chave duplicada, mas também não é isso que queres).

Leitura adicional

Se gostou deste post, também pode gostar destas sugestões:


Partilhar no BlueskyPartilhar no FacebookPartilhar no LinkedInPartilhar no TumblrPartilhar em XPartilhar no LinkedInFixar no Pinterest

Mikkel Christensen

Sobre o autor

Mikkel Christensen
Mikkel é o criador e proprietário do miklix.com. Tem mais de 20 anos de experiência como programador informático/desenvolvedor de software profissional e trabalha atualmente a tempo inteiro para uma grande empresa europeia de TI. Quando não está a escrever no blogue, dedica o seu tempo livre a um vasto leque de interesses, passatempos e actividades, que podem, em certa medida, refletir-se na variedade de tópicos abordados neste sítio Web.