Miklix

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++.


Tato stránka byla strojově přeložena z angličtiny, aby byla přístupná co největšímu počtu lidí. Strojový překlad bohužel ještě není dokonalá technologie, takže může dojít k chybám. Pokud si přejete, můžete si prohlédnout původní anglickou verzi zde:

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:

toTable.data(fromTable);

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:

buf2Buf(fromTable, toTable);

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:

while select crossCompany : ['com'] custTableFrom
{
    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).

Sdílet na BlueskySdílejte na FacebookuSdílet na LinkedInSdílet na TumblrSdílet na XSdílet na LinkedInPřipnout na Pinterest

Mikkel Bang Christensen

O autorovi

Mikkel Bang Christensen
Mikkel je tvůrcem a majitelem webu miklix.com. Má více než 20 let zkušeností jako profesionální programátor/vývojář softwaru a v současné době pracuje na plný úvazek pro velkou evropskou IT společnost. Pokud zrovna nepíše blog, věnuje svůj volný čas široké škále zájmů, koníčků a aktivit, což se může do jisté míry odrážet v rozmanitosti témat na tomto webu.