La diferència entre data() i buf2Buf() a Dynamics AX 2012
Publicat: 5 de març del 2025, a les 19:30:42 UTC
En aquest article s'explica les diferències entre els mètodes buf2Buf() i data() al Dynamics AX 2012, inclòs quan és apropiat utilitzar-ne cadascun i un exemple de codi X++.
The Difference Between data() and buf2Buf() in Dynamics AX 2012
La informació d'aquesta publicació es basa en Dynamics AX 2012 R3. Pot ser vàlid o no per a altres versions.
Quan necessiteu copiar el valor de tots els camps d'un buffer de taula a un altre a Dynamics AX, tradicionalment farieu alguna cosa com:
Això funciona bé i en la majoria dels casos és el camí a seguir.
Tanmateix, també teniu l'opció d'utilitzar la funció buf2Buf:
Això també funciona bé. Aleshores, quina és la diferència?
La diferència és que buf2Buf no copia els camps del sistema. Els camps del sistema inclouen camps com RecId, TableId i potser el més important en aquest context, DataAreaId. El motiu pel qual aquest últim és el més important és que el cas més típic en què utilitzaríeu buf2Buf() en lloc de data() és quan es duplica registres entre comptes de l'empresa, normalment mitjançant l'ús de la paraula clau changeCompany.
Per exemple, si sou a l'empresa "dat" i teniu una altra empresa anomenada "com" de la qual voleu copiar tots els registres de CustTable:
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
En aquest cas, funcionarà perquè buf2Buf copia tots els valors dels camps, excepte els camps del sistema al nou buffer. Si haguéssiu utilitzat data(), el nou registre s'hauria inserit als comptes de l'empresa "com" perquè aquest valor també s'hauria copiat al nou buffer.
(En realitat, hauria donat lloc a un error de clau duplicada, però això tampoc és el que voleu).