Forskellen mellem data() og buf2Buf() i Dynamics AX 2012
Udgivet: 15. februar 2025 kl. 22.53.16 UTC
Denne artikel forklarer forskellene mellem metoderne buf2Buf() og data() i Dynamics AX 2012, herunder hvornår det er passende at bruge hver og et X++ kodeeksempel.
The Difference Between data() and buf2Buf() in Dynamics AX 2012
Oplysningerne i dette indlæg er baseret på Dynamics AX 2012 R3. Det er muligvis ikke gyldigt for andre versioner.
Når du skal kopiere værdien af alle felter fra en tabelbuffer til en anden i Dynamics AX, ville du traditionelt gøre noget som:
Dette fungerer godt og er i de fleste tilfælde vejen at gå.
Du har dog også mulighed for at bruge buf2Buf-funktionen i stedet:
Dette fungerer også godt. Så hvad er forskellen?
Forskellen er, at buf2Buf ikke kopierer systemfelter. Systemfelter inkluderer felter som RecId, TableId og måske vigtigst i denne sammenhæng DataAreaId. Grunden til, at sidstnævnte er det vigtigste, er, at det mest typiske tilfælde, hvor du ville bruge buf2Buf() i stedet for data(), er, når du dublerer poster mellem virksomhedskonti, typisk ved brug af nøgleordet changeCompany.
For eksempel, hvis du er i "dat"-virksomheden og har et andet firma kaldet "com", som du ønsker at kopiere alle poster i CustTable fra:
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
I dette tilfælde vil det virke, fordi buf2Buf kopierer alle feltværdier undtagen systemfelter til den nye buffer. Havde du brugt data() i stedet, ville den nye post være blevet indsat i "com"-virksomhedsregnskabet, fordi den værdi også ville være blevet kopieret til den nye buffer.
(Faktisk ville det have resulteret i en duplikatnøglefejl, men det er heller ikke det, du ønsker).