Skillnaden mellan data() och buf2Buf() i Dynamics AX 2012
Publicerad: 15 februari 2025 kl. 22:54:03 UTC
Senast uppdaterad: 12 januari 2026 kl. 08:41:11 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 samt 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. Den kan vara giltig för andra versioner, men inte nödvändigtvis.
När du behöver kopiera värdet för alla fält från en tabellbuffert till en annan i Dynamics AX gör du traditionellt något i stil med:
Detta fungerar bra och är i de flesta fall rätt väg att gå.
Du har dock 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 i detta sammanhang, DataAreaId. Anledningen till att det senare är det viktigaste är att det vanligaste fallet där du använder buf2Buf() istället för data() är när du duplicerar poster mellan företagskonton, vanligtvis med hjälp av nyckelordet changeCompany.
Om du till exempel är i företaget "dat" 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 fungerar det eftersom buf2Buf kopierar alla fältvärden, förutom systemfält, till den nya bufferten. Om du hade använt data() istället skulle den nya posten ha infogats i företagskontona "com" eftersom det värdet också skulle ha kopierats till den nya bufferten.
(Egentligen skulle det ha resulterat i ett fel med en duplicerad nyckel, men det är inte heller vad du vill).
Vidare läsning
Om du gillade det här inlägget kanske du också gillar dessa förslag:
- Använda en fråga i en SysOperation-datakontraktsklass i Dynamics AX 2012
- Ringer AIF Document Services direkt från X++ i Dynamics AX 2012
- Fel "Ingen metadataklass definierad för datakontraktsobjekt" i Dynamics AX 2012
