Diferența dintre data() și buf2Buf() în Dynamics AX 2012
Publicat: 15 februarie 2025 la 22:53:59 UTC
Acest articol explică diferențele dintre metodele buf2Buf() și data() din Dynamics AX 2012, inclusiv când este adecvat să folosiți fiecare și un exemplu de cod X++.
The Difference Between data() and buf2Buf() in Dynamics AX 2012
Informațiile din această postare se bazează pe Dynamics AX 2012 R3. Poate fi valabil sau nu pentru alte versiuni.
Când trebuie să copiați valoarea tuturor câmpurilor dintr-un buffer de tabel în altul în Dynamics AX, în mod tradițional ați face ceva de genul:
Acest lucru funcționează bine și, în majoritatea cazurilor, este calea de urmat.
Cu toate acestea, aveți și opțiunea de a utiliza funcția buf2Buf:
Funcționează bine și asta. Deci, care este diferența?
Diferența este că buf2Buf nu copiază câmpurile de sistem. Câmpurile de sistem includ câmpuri precum RecId, TableId și poate cel mai important în acest context, DataAreaId. Motivul pentru care acesta din urmă este cel mai important este că cel mai tipic caz în care ați folosi buf2Buf() în loc de data() este atunci când duplicați înregistrările între conturile companiei, de obicei prin utilizarea cuvântului cheie changeCompany.
De exemplu, dacă vă aflați în compania „dat” și aveți o altă companie numită „com” din care doriți să copiați toate înregistrările din CustTable:
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
În acest caz, va funcționa deoarece buf2Buf copiază toate valorile câmpurilor, cu excepția câmpurilor de sistem în noul buffer. Dacă ați fi folosit data() în schimb, noua înregistrare ar fi fost inserată în conturile companiei „com”, deoarece acea valoare ar fi fost copiată și în noul buffer.
(De fapt, ar fi dus la o eroare de cheie duplicată, dar nici asta nu este ceea ce doriți).