Miklix

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.


Denne side er blevet maskinoversat fra engelsk for at gøre den tilgængelig for så mange mennesker som muligt. Desværre er maskinoversættelse endnu ikke en perfekt teknologi, så der kan forekomme fejl. Hvis du foretrækker det, kan du se den originale engelske version her:

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:

toTable.data(fromTable);

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:

buf2Buf(fromTable, toTable);

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:

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

Del på BlueskyDel på FacebookDel på LinkedInDel på TumblrDel på XDel på LinkedInFastgør på Pinterest

Mikkel Bang Christensen

Om forfatteren

Mikkel Bang Christensen
Mikkel er skaberen og ejeren af miklix.com. Han har over 20 års erfaring som professionel computerprogrammør/softwareudvikler og er i øjeblikket fuldtidsansat i en stor europæisk IT-virksomhed. Når han ikke blogger, bruger han sin fritid på en lang række interesser, hobbyer og aktiviteter, som i et vist omfang afspejles i de mange forskellige emner, der dækkes på dette websted.