Miklix

La diferència entre data() i buf2Buf() a Dynamics AX 2012

Publicat: 5 de març del 2025, a les 19:30:42 UTC
Última actualització: 12 de gener del 2026, a les 8:41:29 UTC

Aquest article explica les diferències entre els mètodes buf2Buf() i data() al Dynamics AX 2012, incloent-hi quan és apropiat utilitzar 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 el Dynamics AX 2012 R3. Pot ser vàlida o no per a altres versions.

Quan necessiteu copiar el valor de tots els camps d'una memòria intermèdia de taula a una altra al Dynamics AX, tradicionalment fareu alguna cosa semblant a:

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 ara RecId, TableId i, potser el més important en aquest context, DataAreaId. La raó per la qual aquest últim és el més important és que el cas més típic en què s'utilitzaria buf2Buf() en lloc de data() és quan es dupliquen registres entre comptes d'empresa, normalment mitjançant l'ús de la paraula clau changeCompany.

Per exemple, si sou de 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() en comptes d'això, el nou registre s'hauria inserit als comptes de l'empresa "com" perquè aquest valor també s'hauria copiat al nou buffer.

(De fet, hauria donat lloc a un error de clau duplicada, però això tampoc és el que vols).

Lectures addicionals

Si t'ha agradat aquesta publicació, també et poden agradar aquests suggeriments:


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

Mikkel Christensen

Sobre l'autor

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