Miklix

Forskellen mellem data() og buf2Buf() i Dynamics AX 2012

Udgivet: 15. februar 2025 kl. 22.53.16 UTC
Sidst opdateret: 12. januar 2026 kl. 08.40.58 UTC

Denne artikel forklarer forskellene mellem metoderne buf2Buf() og data() i Dynamics AX 2012, herunder hvornår det er passende at bruge hver af dem samt 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. De er muligvis ikke gyldige for andre versioner.

Når du skal kopiere værdien af alle felter fra én tabelbuffer til en anden i Dynamics AX, ville du traditionelt gøre noget i retning af:

toTable.data(fromTable);

Dette fungerer godt, og i de fleste tilfælde er det vejen frem.

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 af alt 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 ved duplikering af poster mellem virksomhedskonti, typisk ved hjælp af nøgleordet changeCompany.

Hvis du for eksempel er i firmaet "dat" 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 fungere, fordi buf2Buf kopierer alle feltværdier, undtagen systemfelter, til den nye buffer. Hvis du havde brugt data() i stedet, ville den nye post være blevet indsat i "com"-firmakontiene, fordi den værdi også ville være blevet kopieret til den nye buffer.

(Faktisk ville det have resulteret i en fejl med duplikatnøgler, men det er heller ikke det, du ønsker).

Yderligere læsning

Hvis du kunne lide dette indlæg, kan du måske også lide disse forslag:


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

Mikkel Christensen

Om forfatteren

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