Sự khác biệt giữa data() và buf2Buf() trong Dynamics AX 2012
Đã xuất bản: lúc 22:54:17 UTC 15 tháng 2, 2025
Bài viết này giải thích sự khác biệt giữa các phương thức buf2Buf() và data() trong Dynamics AX 2012, bao gồm thời điểm thích hợp để sử dụng từng phương thức và ví dụ mã X++.
The Difference Between data() and buf2Buf() in Dynamics AX 2012
Thông tin trong bài đăng này dựa trên Dynamics AX 2012 R3. Thông tin này có thể đúng hoặc không đúng với các phiên bản khác.
Khi bạn cần sao chép giá trị của tất cả các trường từ vùng đệm bảng này sang vùng đệm bảng khác trong Dynamics AX, theo truyền thống bạn sẽ thực hiện như sau:
Cách này hiệu quả và trong hầu hết các trường hợp là đúng.
Tuy nhiên, bạn cũng có thể sử dụng hàm buf2Buf thay thế:
Cách này cũng hiệu quả. Vậy sự khác biệt là gì?
Sự khác biệt là buf2Buf không sao chép các trường hệ thống. Các trường hệ thống bao gồm các trường như RecId, TableId và có lẽ quan trọng nhất trong ngữ cảnh này là DataAreaId. Lý do sau này là quan trọng nhất là trường hợp điển hình nhất mà bạn sẽ sử dụng buf2Buf() thay vì data() là khi sao chép các bản ghi giữa các tài khoản công ty, thường là bằng cách sử dụng từ khóa changeCompany.
Ví dụ, nếu bạn đang làm việc tại công ty "dat" và có một công ty khác tên là "com" mà bạn muốn sao chép tất cả các bản ghi trong CustTable từ đó:
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
Trong trường hợp này, nó sẽ hoạt động vì buf2Buf sao chép tất cả các giá trị trường, ngoại trừ các trường hệ thống vào bộ đệm mới. Nếu bạn sử dụng data() thay thế, bản ghi mới sẽ được chèn vào tài khoản công ty "com" vì giá trị đó cũng sẽ được sao chép vào bộ đệm mới.
(Thực tế, điều này sẽ dẫn đến lỗi trùng lặp khóa, nhưng đó cũng không phải là điều bạn mong muốn).