Forskjellen mellom data() og buf2Buf() i Dynamics AX 2012
Publisert: 15. februar 2025 kl. 22:53:54 UTC
Denne artikkelen forklarer forskjellene mellom buf2Buf()- og data()-metodene i Dynamics AX 2012, inkludert når det er hensiktsmessig å bruke hver og et X++-kodeeksempel.
The Difference Between data() and buf2Buf() in Dynamics AX 2012
Informasjonen i dette innlegget er basert på Dynamics AX 2012 R3. Det kan være eller ikke være gyldig for andre versjoner.
Når du trenger å kopiere verdien av alle feltene fra en tabellbuffer til en annen i Dynamics AX, ville du tradisjonelt gjort noe som:
Dette fungerer bra og er i de fleste tilfeller veien å gå.
Du har imidlertid også muligheten til å bruke buf2Buf-funksjonen i stedet:
Dette fungerer også bra. Så hva er forskjellen?
Forskjellen er at buf2Buf ikke kopierer systemfelt. Systemfelt inkluderer felt som RecId, TableId, og kanskje viktigst i denne sammenhengen, DataAreaId. Grunnen til at sistnevnte er den viktigste er at det mest typiske tilfellet hvor du vil bruke buf2Buf() i stedet for data() er når du dupliserer poster mellom firmakontoer, typisk ved bruk av nøkkelordet changeCompany.
For eksempel, hvis du er i "dat"-selskapet og har et annet selskap kalt "com" som du ønsker å kopiere alle poster i CustTable fra:
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
I dette tilfellet vil det fungere fordi buf2Buf kopierer alle feltverdier, unntatt systemfelt til den nye bufferen. Hadde du brukt data() i stedet, ville den nye posten blitt satt inn i "com"-selskapskontoene fordi den verdien også ville blitt kopiert til den nye bufferen.
(Egentlig ville det ha resultert i en duplikatnøkkelfeil, men det er heller ikke det du ønsker).