La differenza tra data() e buf2Buf() in Dynamics AX 2012
Pubblicato: 15 febbraio 2025 alle ore 22:53:47 UTC
In questo articolo vengono spiegate le differenze tra i metodi buf2Buf() e data() in Dynamics AX 2012, incluso quando è appropriato utilizzare ciascuno di essi e un esempio di codice X++.
The Difference Between data() and buf2Buf() in Dynamics AX 2012
Le informazioni contenute in questo post si basano su Dynamics AX 2012 R3. Potrebbero essere valide o meno per altre versioni.
Quando è necessario copiare il valore di tutti i campi da un buffer di tabella a un altro in Dynamics AX, solitamente si procede come segue:
Questa soluzione funziona bene e nella maggior parte dei casi è la soluzione giusta.
Tuttavia, hai anche la possibilità di utilizzare la funzione buf2Buf:
Anche questo funziona bene. Quindi qual è la differenza?
La differenza è che buf2Buf non copia i campi di sistema. I campi di sistema includono campi come RecId, TableId e, forse più importante in questo contesto, DataAreaId. Il motivo per cui quest'ultimo è il più importante è che il caso più tipico in cui si userebbe buf2Buf() invece di data() è quando si duplicano record tra account aziendali, in genere tramite l'uso della parola chiave changeCompany.
Ad esempio, se ti trovi nell'azienda "dat" e hai un'altra azienda denominata "com" da cui desideri copiare tutti i record in CustTable:
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
In questo caso, funzionerà perché buf2Buf copia tutti i valori dei campi, eccetto i campi di sistema, nel nuovo buffer. Se avessi usato data(), il nuovo record sarebbe stato inserito negli account aziendali "com" perché quel valore sarebbe stato copiato anche nel nuovo buffer.
(In realtà si sarebbe verificato un errore di chiave duplicata, ma non è questo che si desidera).