Rozdíl mezi data() a buf2Buf() v Dynamics AX 2012
Vydáno: 15. února 2025 v 22:53:06 UTC
Tento článek vysvětluje rozdíly mezi metodami buf2Buf() a data() v Dynamics AX 2012, včetně toho, kdy je vhodné použít každou z nich a příklad kódu X++.
The Difference Between data() and buf2Buf() in Dynamics AX 2012
Informace v tomto příspěvku jsou založeny na Dynamics AX 2012 R3. Může a nemusí platit pro jiné verze.
Když potřebujete zkopírovat hodnotu všech polí z jedné vyrovnávací paměti tabulky do druhé v Dynamics AX, tradičně byste udělali něco jako:
To funguje dobře a ve většině případů je to správná cesta.
Místo toho však máte také možnost použít funkci buf2Buf:
I tohle funguje dobře. V čem je tedy rozdíl?
Rozdíl je v tom, že buf2Buf nekopíruje systémová pole. Systémová pole zahrnují pole jako RecId, TableId a možná nejdůležitější v tomto kontextu DataAreaId. Důvod, proč je posledně jmenovaný je nejdůležitější, je ten, že nejtypičtějším případem, kdy byste místo data() použili buf2Buf(), je duplikace záznamů mezi firemními účty, obvykle pomocí klíčového slova changeCompany.
Pokud jste například ve společnosti „dat“ a máte jinou společnost s názvem „com“, ze které chcete zkopírovat všechny záznamy v CustTable:
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
V tomto případě to bude fungovat, protože buf2Buf zkopíruje všechny hodnoty polí kromě systémových polí do nového bufferu. Pokud byste místo toho použili data(), nový záznam by byl vložen do firemních účtů "com", protože tato hodnota by byla také zkopírována do nové vyrovnávací paměti.
(Ve skutečnosti by to vedlo k chybě duplicitního klíče, ale ani to není to, co chcete).