A különbség a data() és a buf2Buf() között a Dynamics AX 2012-ben
Megjelent: 2025. február 15. 22:53:45 UTC
Ez a cikk elmagyarázza a Dynamics AX 2012 buf2Buf() és data() metódusai közötti különbségeket, ideértve azt is, hogy mikor célszerű mindegyiket használni, valamint egy X++ kódpéldát.
The Difference Between data() and buf2Buf() in Dynamics AX 2012
A bejegyzésben található információk a Dynamics AX 2012 R3-on alapulnak. Lehet, hogy más verziókra érvényes, de lehet, hogy nem.
Ha át kell másolnia az összes mező értékét az egyik táblapufferből a másikba a Dynamics AX-ben, akkor hagyományosan a következőket kell tennie:
Ez jól működik, és a legtöbb esetben ez a helyes út.
Lehetősége van azonban a buf2Buf függvény használatára is:
Ez is jól működik. Szóval mi a különbség?
A különbség az, hogy a buf2Buf nem másolja a rendszermezőket. A rendszermezők olyan mezőket tartalmaznak, mint a RecId, TableId, és ebben az összefüggésben talán a legfontosabb a DataAreaId. Ez utóbbi a legfontosabb oka, hogy a legjellemzőbb eset, amikor a data() helyett a buf2Buf() függvényt használja, az az, amikor rekordokat másol a vállalati számlák között, jellemzően a changeCompany kulcsszó használatával.
Például, ha Ön a "dat" cég tagja, és van egy másik "com" nevű cége, amelyről a CustTable összes rekordját át szeretné másolni:
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
Ebben az esetben ez működni fog, mert a buf2Buf a rendszermezők kivételével minden mezőértéket az új pufferbe másol. Ha helyette a data()-t használta volna, az új rekord bekerült volna a "com" vállalati számlákba, mert ez az érték is az új pufferbe másolódott volna.
(Igazából ez duplikált kulcshibát eredményezett volna, de nem is ezt szeretnéd).