Skillnaden mellan data() och buf2Buf() i Dynamics AX 2012
Publicerad: 15 februari 2025 kl. 22:54:03 UTC
Den här artikeln förklarar skillnaderna mellan metoderna buf2Buf() och data() i Dynamics AX 2012, inklusive när det är lämpligt att använda var och en och ett X++-kodexempel.
The Difference Between data() and buf2Buf() in Dynamics AX 2012
Informationen i det här inlägget är baserad på Dynamics AX 2012 R3. Det kan eller kanske inte är giltigt för andra versioner.
När du behöver kopiera värdet för alla fält från en tabellbuffert till en annan i Dynamics AX, skulle du traditionellt göra något som:
Detta fungerar bra och i de flesta fall är det rätt väg att gå.
Men du har också möjlighet att använda buf2Buf-funktionen istället:
Detta fungerar också bra. Så vad är skillnaden?
Skillnaden är att buf2Buf inte kopierar systemfält. Systemfält inkluderar fält som RecId, TableId och kanske viktigast av allt i detta sammanhang, DataAreaId. Anledningen till att det senare är det viktigaste är att det mest typiska fallet där du skulle använda buf2Buf() istället för data() är när du duplicerar poster mellan företagskonton, vanligtvis genom att använda nyckelordet changeCompany.
Till exempel, om du är i "dat"-företaget och har ett annat företag som heter "com" som du vill kopiera alla poster i CustTable från:
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
I det här fallet kommer det att fungera eftersom buf2Buf kopierar alla fältvärden, utom systemfält till den nya bufferten. Hade du använt data() istället skulle den nya posten ha infogats i "com"-företagskontona eftersom det värdet också skulle ha kopierats till den nya bufferten.
(Egentligen skulle det ha resulterat i ett duplicerat nyckelfel, men det är inte det du vill ha heller).