Razlika med data() in buf2Buf() v Dynamics AX 2012
Objavljeno: 15. februar 2025 ob 10:54:02 pop. UTC
Nazadnje posodobljeno: 12. januar 2026 ob 8:41:11 dop. UTC
Ta članek pojasnjuje razlike med metodama buf2Buf() in data() v programu Dynamics AX 2012, vključno s tem, kdaj je primerno uporabiti vsako od njih, in primerom kode X++.
The Difference Between data() and buf2Buf() in Dynamics AX 2012
Informacije v tej objavi temeljijo na programu Dynamics AX 2012 R3. Morda veljajo za druge različice, morda pa tudi ne.
Ko morate v programu Dynamics AX kopirati vrednost vseh polj iz enega medpomnilnika tabele v drugega, bi tradicionalno storili nekaj takega:
To deluje dobro in v večini primerov je to prava pot.
Vendar pa imate tudi možnost uporabe funkcije buf2Buf:
Tudi to deluje dobro. Kakšna je torej razlika?
Razlika je v tem, da buf2Buf ne kopira sistemskih polj. Sistemska polja vključujejo polja, kot so RecId, TableId in morda najpomembneje v tem kontekstu DataAreaId. Slednje je najpomembnejše, ker je najpogostejši primer, ko bi uporabili buf2Buf() namesto data(), podvajanje zapisov med računi podjetij, običajno z uporabo ključne besede changeCompany.
Na primer, če ste v podjetju »dat« in imate še eno podjetje z imenom »com«, iz katerega želite kopirati vse zapise v CustTable:
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
V tem primeru bo delovalo, ker buf2Buf kopira vse vrednosti polj, razen sistemskih polj, v novi medpomnilnik. Če bi namesto tega uporabili data(), bi bil novi zapis vstavljen v račune podjetja "com", ker bi bila tudi ta vrednost kopirana v novi medpomnilnik.
(Pravzaprav bi to povzročilo napako podvojenega ključa, vendar tudi to ni tisto, kar želite).
Nadaljnje branje
Če vam je bila ta objava všeč, vam bodo morda všeč tudi ti predlogi:
- Pretvorite realno v niz z vsemi decimalkami v Dynamics AX 2012
- Uporaba poizvedbe v podatkovnem pogodbenem razredu SysOperation v Dynamics AX 2012
- Uporaba ogrodja SysExtension Framework, da ugotovite, kateri podrazred ustvariti v Dynamics AX 2012
