Rozdiel medzi data() a buf2Buf() v Dynamics AX 2012
Publikované: 15. februára 2025 o 22:54:02 UTC
Tento článok vysvetľuje rozdiely medzi metódami buf2Buf() a data() v Dynamics AX 2012 vrátane toho, kedy je vhodné použiť každú z nich a príklad kódu X++.
The Difference Between data() and buf2Buf() in Dynamics AX 2012
Informácie v tomto príspevku sú založené na Dynamics AX 2012 R3. Môže a nemusí platiť pre iné verzie.
Keď potrebujete skopírovať hodnotu všetkých polí z jednej vyrovnávacej pamäte tabuľky do druhej v Dynamics AX, tradične by ste urobili niečo ako:
Funguje to dobre a vo väčšine prípadov je to správna cesta.
Namiesto toho však máte tiež možnosť použiť funkciu buf2Buf:
Toto tiež funguje dobre. Aký je teda rozdiel?
Rozdiel je v tom, že buf2Buf nekopíruje systémové polia. Systémové polia zahŕňajú polia ako RecId, TableId a možno najdôležitejšie v tomto kontexte DataAreaId. Najdôležitejším dôvodom je, že najtypickejším prípadom, keď by ste použili buf2Buf() namiesto data(), je duplikovanie záznamov medzi firemnými účtami, zvyčajne pomocou kľúčového slova changeCompany.
Ak ste napríklad v spoločnosti „dat“ a máte inú spoločnosť s názvom „com“, z ktorej chcete skopírovať všetky záznamy v CustTable:
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
V tomto prípade to bude fungovať, pretože buf2Buf skopíruje všetky hodnoty polí okrem systémových polí do novej vyrovnávacej pamäte. Ak by ste namiesto toho použili data(), nový záznam by sa vložil do firemných účtov „com“, pretože táto hodnota by sa tiež skopírovala do nového vyrovnávacej pamäte.
(V skutočnosti by to viedlo k chybe duplicitného kľúča, ale ani to nie je to, čo chcete).