Sử dụng truy vấn trong lớp hợp đồng dữ liệu SysOperation trong Dynamics AX 2012
Đã xuất bản: lúc 01:24:35 UTC 16 tháng 2, 2025
Cập nhật lần cuối: lúc 08:47:26 UTC 12 tháng 1, 2026
Bài viết này sẽ hướng dẫn chi tiết cách thêm truy vấn có thể cấu hình và lọc bởi người dùng vào lớp hợp đồng dữ liệu SysOperation trong Dynamics AX 2012 (và Dynamics 365 for Operations).
Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012
Thông tin trong bài đăng này dựa trên Dynamics AX 2012 R3. Nó có thể đúng hoặc không đúng với các phiên bản khác. (Cập nhật: Tôi xác nhận rằng điều này cũng hoạt động trên Dynamics 365 for Operations)
Tôi dường như luôn quên các chi tiết về cách chỉ định và khởi tạo một truy vấn trong framework SysOperation. Tôi đoán rằng hầu hết các công việc xử lý hàng loạt mà tôi đã thực hiện không dựa trên các truy vấn do người dùng cấu hình, nhưng thỉnh thoảng tôi vẫn cần tạo một công việc xử lý hàng loạt như vậy, vì vậy bài đăng này cũng dành cho chính tôi để tham khảo.
Đầu tiên, trong lớp hợp đồng dữ liệu, truy vấn sẽ được lưu trữ dưới dạng chuỗi. Phương thức parm của nó phải được trang trí bằng thuộc tính AifQueryTypeAttribute, như sau (trong ví dụ này tôi đã sử dụng truy vấn SalesUpdate, nhưng bạn có thể thay thế bằng bất kỳ truy vấn AOT nào):
DataMemberAttribute,
AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
;
packedQuery = _packedQuery;
return packedQuery;
}
Nếu bạn muốn truy vấn được quyết định bởi lớp điều khiển, bạn cũng có thể sử dụng chuỗi rỗng. Trong trường hợp đó, bạn cũng cần triển khai một vài phương thức hỗ trợ (mà có lẽ bạn cũng nên triển khai để thuận tiện hơn khi cần truy vấn):
{
;
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
;
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
Nếu bạn cần khởi tạo truy vấn (ví dụ: thêm phạm vi), bạn nên triển khai phương thức initQuery:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
Bạn cần đảm bảo gọi phương thức này từ lớp điều khiển.
Đọc thêm
Nếu bạn thích bài viết này, bạn cũng có thể thích những gợi ý sau:
- Tổng quan nhanh về Dynamics AX 2012 SysOperation Framework
- Chuyển đổi số thực thành chuỗi với tất cả số thập phân trong Dynamics AX 2012
- Lỗi "Không có lớp siêu dữ liệu nào được xác định cho đối tượng hợp đồng dữ liệu" trong Dynamics AX 2012
