Tạo trường tra cứu cho một chiều tài chính trong Dynamics 365
Đã xuất bản: lúc 11:35:23 UTC 16 tháng 2, 2025
Bài viết này giải thích cách tạo trường tra cứu cho chiều tài chính trong Dynamics 365 for Operations, bao gồm ví dụ mã X++.
Creating a Lookup Field for a Financial Dimension in Dynamics 365
Thông tin trong bài đăng này dựa trên Dynamics 365 for Operations, nhưng phần lớn cũng có thể áp dụng cho Dynamics AX 2012 (xem bên dưới).
Gần đây tôi được giao nhiệm vụ tạo một trường mới trong đó có thể chỉ định một chiều tài chính duy nhất, trong trường hợp này là Sản phẩm. Tất nhiên, trường mới cũng có thể tra cứu các giá trị hợp lệ của chiều này.
Việc này phức tạp hơn một chút so với việc tra cứu thông thường trong bảng, nhưng nếu bạn biết cách thì thực ra cũng không quá khó.
May mắn thay, ứng dụng chuẩn cung cấp biểu mẫu tra cứu tiện lợi (DimensionLookup) có thể được sử dụng cho mục đích này, chỉ cần bạn cho ứng dụng biết thuộc tính kích thước nào cần tra cứu.
Đầu tiên, bạn cần tạo chính trường biểu mẫu. Điều này có thể dựa trên trường bảng hoặc phương pháp chỉnh sửa, không quan trọng đối với chính tra cứu, nhưng theo cách này hay cách khác, nó phải sử dụng kiểu dữ liệu mở rộng DimensionValue.
Sau đó, bạn cần tạo một trình xử lý sự kiện OnLookup cho trường. Để tạo một trình xử lý sự kiện, hãy nhấp chuột phải vào sự kiện OnLookup cho trường, sau đó chọn "Sao chép phương thức xử lý sự kiện". Sau đó, bạn có thể dán một phương thức xử lý sự kiện trống vào một lớp và chỉnh sửa từ đó.
Lưu ý: Hầu hết các thao tác này cũng có thể áp dụng cho Dynamics AX 2012, nhưng thay vì tạo trình xử lý sự kiện, bạn có thể ghi đè phương thức tra cứu của trường biểu mẫu.
Trình xử lý sự kiện phải trông giống thế này (thay thế tên biểu mẫu và tên trường nếu cần):
FormControlEventHandler(formControlStr( MyForm,
MyProductDimField),
FormControlEventType::Lookup)
]
public static void MyProductDimField_OnLookup( FormControl _sender,
FormControlEventArgs _e)
{
FormStringControl control;
Args args;
FormRun formRun;
DimensionAttribute dimAttribute;
;
dimAttribute = DimensionAttribute::findByName('Product');
args = new Args();
args.record(dimAttribute);
args.caller(_sender);
args.name(formStr(DimensionLookup));
formRun = classFactory.formRunClass(args);formRun.init();
control = _sender as FormStringControl;
control.performFormLookup(formRun);
}