Skirtumas tarp duomenų () ir buf2Buf () Dynamics AX 2012
Paskelbta: 2025 m. vasario 15 d. 22:53:52 UTC
Šiame straipsnyje paaiškinami skirtumai tarp „Dynamics AX 2012“ metodų „buf2Buf()“ ir „data()“, įskaitant tai, kada tikslinga naudoti kiekvieną ir X++ kodo pavyzdį.
The Difference Between data() and buf2Buf() in Dynamics AX 2012
Šiame įraše pateikta informacija pagrįsta Dynamics AX 2012 R3. Jis gali galioti arba negalioja kitoms versijoms.
Kai jums reikia nukopijuoti visų laukų vertes iš vienos lentelės buferio į kitą Dynamics AX, paprastai atlikite kažką panašaus:
Tai veikia gerai ir daugeliu atvejų yra teisingas būdas.
Tačiau taip pat galite naudoti funkciją buf2Buf:
Tai taip pat gerai veikia. Taigi koks skirtumas?
Skirtumas tas, kad buf2Buf nekopijuoja sistemos laukų. Sistemos laukai apima tokius laukus kaip RecId, TableId ir, ko gero, svarbiausia šiame kontekste DataAreaId. Priežastis, kodėl pastaroji yra pati svarbiausia, yra ta, kad tipiškiausias atvejis, kai vietoj data() naudotumėte buf2Buf(), yra dubliuojant įrašus tarp įmonės sąskaitų, paprastai naudojant raktinį žodį changeCompany.
Pavyzdžiui, jei priklausote „dat“ įmonei ir turite kitą įmonę „com“, iš kurios norite kopijuoti visus „CustTable“ įrašus:
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
Šiuo atveju tai veiks, nes buf2Buf nukopijuos visas lauko reikšmes, išskyrus sistemos laukus, į naują buferį. Jei vietoj to naudojote data(), naujas įrašas būtų įterptas į „com“ įmonės sąskaitas, nes ta reikšmė taip pat būtų nukopijuota į naują buferį.
(Tiesą sakant, dėl to būtų atsiradusi pasikartojančio rakto klaida, bet to irgi nenorite).