Razlika med data() in buf2Buf() v Dynamics AX 2012
Objavljeno: 15. februar 2025 ob 10:54:02 pop. UTC
V tem članku so razložene razlike med metodama buf2Buf() in data() v Dynamics AX 2012, vključno s tem, kdaj je primerno uporabiti vsako in primer kode X++.
The Difference Between data() and buf2Buf() in Dynamics AX 2012
Informacije v tej objavi temeljijo na Dynamics AX 2012 R3. Lahko velja ali ne velja za druge različice.
Ko morate kopirati vrednost vseh polj iz enega vmesnega pomnilnika tabele v drugega v Dynamics AX, bi običajno storili nekaj takega:
To dobro deluje in je v večini primerov prava pot.
Vendar pa imate tudi možnost, da namesto tega uporabite funkcijo 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 najpomembnejše v tem kontekstu, DataAreaId. Razlog, da je slednje najpomembnejše, je, da je najbolj tipičen primer, ko bi uporabili buf2Buf() namesto data(), ko podvajate zapise med računi podjetja, običajno z uporabo ključne besede changeCompany.
Na primer, če ste v podjetju "dat" in imate drugo 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 nov medpomnilnik. Če bi namesto tega uporabili data(), bi bil nov zapis vstavljen v račune podjetja "com", ker bi bila ta vrednost prav tako kopirana v novi medpomnilnik.
(Pravzaprav bi to povzročilo napako podvojenega ključa, vendar tudi tega ne želite).