Miklix

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

Publicado: 15 de fevereiro de 2025 às 22:53:58 UTC

Este artigo explica as diferenças entre os métodos buf2Buf() e data() no Dynamics AX 2012, incluindo quando é apropriado utilizar 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

As informações neste post são baseadas no Dynamics AX 2012 R3. Pode ou não ser válido para outras versões.

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

toTable.data(fromTable);

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

No entanto, também tem a opção de utilizar a função buf2Buf:

buf2Buf(fromTable, toTable);

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

A diferença é que o buf2Buf não copia campos do sistema. Os campos do sistema incluem campos como RecId, TableId e, talvez o mais importante neste contexto, DataAreaId. A razão pela qual este último é o mais importante é que o caso mais comum em que utilizaria buf2Buf() em vez de data() é ao duplicar registos entre contas da empresa, normalmente utilizando a palavra-chave changeCompany.

Por exemplo, se estiver na empresa "dat" e tiver outra empresa chamada "com" da qual pretende copiar todos os registos em 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 utilizado data(), o novo registo teria sido introduzido nas contas da empresa "com", porque esse valor também teria sido copiado para o novo buffer.

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

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

Mikkel Bang Christensen

Sobre o autor

Mikkel Bang 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.