Miklix

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.


Denna sida har maskinöversatts från engelska för att göra den tillgänglig för så många som möjligt. Tyvärr är maskinöversättning ännu inte en fulländad teknik, så fel kan uppstå. Om du föredrar det kan du se den engelska originalversionen här:

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:

toTable.data(fromTable);

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:

buf2Buf(fromTable, toTable);

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:

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

Dela på BlueskyDela på FacebookDela på LinkedInDela på TumblrDela på XDela på LinkedInFäst på Pinterest

Mikkel Bang Christensen

Om författaren

Mikkel Bang Christensen
Mikkel är skaparen och ägaren av miklix.com. Han har över 20 års erfarenhet som professionell datorprogrammerare/mjukvaruutvecklare och är för närvarande heltidsanställd på ett stort europeiskt IT-bolag. När han inte bloggar ägnar han sin fritid åt en mängd olika intressen, hobbies och aktiviteter, vilket i viss mån kan återspeglas i de olika ämnen som behandlas på den här webbplatsen.