Lưu ý
Cần có ủy quyền mới truy nhập được vào trang này. Bạn có thể thử đăng nhập hoặc thay đổi thư mục.
Cần có ủy quyền mới truy nhập được vào trang này. Bạn có thể thử thay đổi thư mục.
Sự OnSave kiện này xảy ra khi:
- Người dùng chọn nút Lưu hoặcLàm mới trong thanh lệnh, ngay cả khi không có dữ liệu đã thay đổi nào được lưu.
- Mã thực thi phương pháp formContext.data.entity.save , ngay cả khi không có dữ liệu đã thay đổi nào được lưu.
- Người dùng dẫn hướng ra khỏi biểu mẫu và có dữ liệu chưa lưu trong biểu mẫu.
- Tùy chọn Lưu Tự động được bật, 30 giây sau khi dữ liệu đã thay đổi và có dữ liệu chưa lưu trong biểu mẫu.
- Mã thực thi phương thức formContext.data.save và có dữ liệu chưa lưu trong biểu mẫu.
- Mã thực thi phương pháp formContext.data.refresh truyền giá trị đúng làm tham số đầu tiên và có dữ liệu chưa lưu trong biểu mẫu.
Lưu ý
Sự OnSave kiện cho cuộc hẹn, cuộc hẹn định Book kỳ hoặc bản ghi hoạt động dịch vụ sẽ hủy bỏ thao tác lưu và sử dụng thông báo để duy trì thay đổi thay đổi thay vì Create hoặc Update. Vì vậy, trình xử OnSave lý sự PostSave kiện cho các bảng này sẽ không hoạt động.
Để xác định nút nào đã được bấm để thực hiện lưu, hãy sử dụng phương pháp getSaveMode .
Bạn có thể hủy bỏ hành động lưu bằng cách sử dụng phương pháp preventDefault trong đối tượng tham đối sự kiện. Có thể truy nhập phương pháp preventDefault bằng cách sử dụng phương pháp getEventArgs là một phần của ngữ cảnh thực thi. Ngữ cảnh thực thi được tự động chuyển đến bộ xử lý sự kiện biểu mẫu.
Hỗ trợ bộ xử lý sự kiện không đồng bộ
Sự kiện OnSave có khả năng chờ đợi lời hứa được bộ xử lý sự kiện trả về để giải quyết trước khi lưu, OnSave cho phép sự kiện không đồng bộ ("không đồng bộ").
Sự OnSave kiện sẽ trở nên không đồng bộ khi trình xử OnSave lý sự kiện trả về lời hứa. Việc lưu bản ghi sẽ xảy ra khi mỗi lời hứa do bộ xử lý trả về được giải quyết. Đối với bất kỳ lời hứa nào được trả về, sẽ có giới hạn 10 giây cho mỗi lời hứa, sau đó nền tảng sẽ xem xét lời hứa sẽ hết thời gian chờ. Thời gian chờ này được áp dụng cho mỗi lời hứa. Ví dụ, nếu chúng ta có năm lời hứa được trả về, thì tổng thời gian chờ là 50 giây.
Nếu lời hứa bị từ chối hoặc hết thời gian chờ, thao tác lưu sẽ tiếp tục hoạt động tương tự như lỗi script hiện tại. Sử dụng phương pháp preventDefault trong đối tượng đối số sự kiện trong bộ xử lý cụ thể đó nếu bạn muốn ngăn sự kiện lưu xảy ra nếu có lỗi tập lệnh/lời hứa bị từ chối hoặc trình xử lý hết thời gian chờ.
Bạn cũng có thể hủy bỏ thao tác lưu bất kể lỗi trong bộ xử lý hay không sử dụng phương pháp preventDefault trong đối tượng đối số sự kiện. Nếu phương pháp này được gọi, sự kiện OnSave Async chờ đợi cho tất cả những lời hứa để giải quyết, nhưng lưu sẽ không xảy ra. Gọi phương pháp này có nghĩa là lô-gic bên trong .then() & .catch() sẽ thực thi.
Sự kiện OnSave sẽ chờ một lời hứa được trả về cho mỗi bộ xử lý. Nếu nhiều lời hứa là bắt buộc, bạn nên Promise.all() bao bọc tất cả những lời hứa trong phương pháp và trả về lời hứa kết quả duy nhất. Đối với nhiều bộ xử lý trả về lời hứa, chúng tôi khuyên bạn nên tạo một bộ xử lý gọi tất cả các sự kiện và trả về một lời hứa duy nhất bao hàm tất cả những lời hứa bắt buộc. Thực hành này là để giảm thiểu thời gian chờ gây ra bởi thời gian chờ.
Kịch bản ví dụ về thời điểm sử dụng bộ xử lý OnSave không đồng bộ
Cân nhắc việc tạo Tác vụ Dịch vụ Đơn hàng Công việc, bạn cần xác thực rằng Tài sản Khách hàng đã chọn có cùng một tài khoản được liệt kê trong Lệnh Làm việc. Tải về tài khoản trên Đơn hàng Làm việc và Tài sản khách hàng là cả hai quy trình không đồng bộ và cần phải được hoàn thành trước khi xác thực có thể xảy ra.
Trong trường hợp này, kể từ khi có nhiều quá trình không đồng bộ và cả hai cuộc gọi trả về một lời hứa duy nhất bằng cách gói cả hai trong phương Promise.all() pháp.
Lưu ý
Chỉ preventDefault có thể dùng phương pháp một cách đồng bộ.
Ví dụ:
function myHandler() {
return Promise.all([getWorkOrderPromise, getCustomerAssetPromise]).then((values) => {
var workOrder = values[0];
var customerAsset = values[1];
// Perform validation
if (isValid(workOrder, customerAsset)) {
return Promise.resolve();
}
return Promise.reject(new Error("Validation failed for the work order and customer asset"));
});
}
Bật Lưu Trên Không đồng bộ bằng cách sử dụng cài đặt ứng dụng
Để sử dụng bộ xử lý Lưu không đồng bộ, bạn cần bật bộ xử lý này thông qua cài đặt ứng dụng:
Truy cập https://make.powerapps.com.
Đảm bảo chọn môi trường chính xác.
Chọn Ứng dụng từ ngăn dẫn hướng bên trái.
Chọn ứng dụng và sau đó chọn ... (dấu chấm lửng). Chọn Chỉnh sửa.
Chọn Cài đặt từ thanh lệnh.
Khi hộp thoại mở ra, hãy chọn Tính năng.
Bật Bộ xử lý Lưu không đồng bộ.
Chọn Lưu.
bộ
Thời gian chờ OnSave không đồng bộ
Khi bạn sử dụng bộ xử lý không OnSave đồng bộ, biểu mẫu sẽ chờ lời hứa được bộ xử lý trả về để được thực hiện. Để đảm bảo rằng biểu mẫu lưu hoàn tất một cách kịp thời, bộ xử lý sẽ đưa ra một ngoại lệ hết thời gian chờ sau 10 OnSave giây để cho bạn biết để điều chỉnh bộ xử lý không đồng bộ để có hiệu suất tốt hơn.
Có những trường hợp cần tạm cầm OnSave lâu hơn 10 giây. Một ví dụ đang mở một hộp thoại và chờ dữ liệu nhập của người dùng trước khi tiếp tục lưu. Để đảm bảo thao tác không đồng bộ chờ cho lời hứa giải quyết, hãy sử dụng phương pháp disableAsyncTimeout .
Lưu ý
Bạn phải gọi trước disableAsyncTimeout khi chờ bất kỳ câu lệnh hoặc cuộc gọi không đồng bộ.
Ví dụ:
async function myHandler(context) {
context.getEventArgs().disableAsyncTimeout();
// The 10000ms time out will not be disabled if the above line does not come before all async awaits
await Xrm.Navigation.openConfirmDialog({ text: "Are you sure you want to save?" });
}
Khi gọi disableAsyncTimeout , thời gian chờ cho bộ xử lý đó sẽ không được áp dụng. Nó tiếp tục chờ đợi lời hứa của người xử lý được thực hiện.
Mẫu này nên được sử dụng thận trọng vì nó có thể ảnh hưởng đến hiệu suất của việc lưu biểu mẫu.
Bài viết liên quan
Sự kiện Lưu Lưới
Sự kiện (Tài liệu tham khảo về API máy khách)
Sự kiện trong biểu mẫu và lưới trong các ứng dụng dựa trên mô hình