Miklix

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++.


Aquesta pàgina es va traduir automàticament de l'anglès per tal de fer-la accessible al màxim de persones possible. Malauradament, la traducció automàtica encara no és una tecnologia perfeccionada, de manera que es poden produir errors. Si ho prefereixes, pots veure la versió original en anglès aquí:

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:

toTable.data(fromTable);

Això funciona bé i en la majoria dels casos és el camí a seguir.

Tanmateix, també teniu l'opció d'utilitzar la funció buf2Buf:

buf2Buf(fromTable, toTable);

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:

while select crossCompany : ['com'] custTableFrom
{
    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).

Comparteix a BlueskyComparteix a FacebookComparteix a LinkedInComparteix a TumblrComparteix a XComparteix a LinkedInPin a Pinterest

Mikkel Bang Christensen

Sobre l'autor

Mikkel Bang Christensen
Mikkel és el creador i propietari de miklix.com. Té més de 20 anys d'experiència com a programador/desenvolupador de programari informàtic professional i actualment treballa a temps complet per a una gran corporació informàtica europea. Quan no fa blocs, dedica el seu temps lliure a una gran varietat d'interessos, aficions i activitats, que fins a cert punt es poden reflectir en la varietat de temes tractats en aquest lloc web.