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.
Áp dụng cho: Ứng dụng Canvas Ứng
dụng dựa trên mô hình
Cung cấp thông tin lỗi về các thay đổi trước đó đối với nguồn dữ liệu.
Tổng quan
Errors có thể xảy ra khi thay đổi bản ghi của nguồn dữ liệu. Có thể có nhiều nguyên nhân, bao gồm mất mạng, không đủ điều kiện và xảy ra xung đột chỉnh sửa.
Các hàm sửa đổi dữ liệu trong nguồn dữ liệu (chẳng hạn như hàm Patch, Collect, Remove, RemoveIf, Update, UpdateIf và SubmitForm) báo cáo lỗi theo 2 cách:
- Mỗi hàm trong số này trả về giá trị lỗi do kết quả của thao tác. Errors có thể được phát hiện bằng IsError và thay thế hoặc ngăn chặn bằng IfError và App.OnError như bình thường. Hãy xem bài viết Xử lý lỗi để biết thêm thông tin.
- Sau thao tác, hàm cũng Errors sẽ trả về lỗi cho các thao tác trước đó. Nó có thể hữu ích cho việc hiển thị thông báo lỗi trên màn hình biểu mẫu mà không cần phải nắm bắt lỗi trong một biến trạng thái.
Bạn có thể ngăn chặn một số lỗi xảy ra bằng cách sử dụng hàm Validate và DataSourceInfo. Xem thao tác với nguồn dữ liệu để có thêm gợi ý về cách thao tác và tránh lỗi.
Mô tả
Hàm Errors trả về một bảng lỗi có chứa các cột sau đây:
- Ghi. Bản ghi trong nguồn dữ liệu có lỗi. Nếu xảy ra lỗi trong quá trình tạo bản ghi, cột này sẽ trống.
- Cột. Cột có lỗi, nếu lỗi có thể là do một cột duy nhất. Nếu không, nó sẽ trống.
- Tin nhắn. Mô tả về lỗi. Chuỗi lỗi này có thể hiển thị cho người dùng cuối. Thông báo này có thể được tạo ra bởi nguồn dữ liệu và có thể dài và chứa tên cột thô có thể không có bất kỳ ý nghĩa nào đối với người dùng.
- Lỗi. Có thể sử dụng mã lỗi trong công thức để giúp khắc phục lỗi:
| ErrorKind | Mô tả |
|---|---|
| ErrorKind.Conflict | Một người dùng khác đã thay đổi bản ghi này, dẫn đến xung đột thay đổi. Sử dụng hàm Refresh để tải lại bản ghi rồi thử thay đổi lại. |
| ErrorKind.ConstraintViolation | Đã vi phạm một hoặc nhiều ràng buộc. |
| ErrorKind.CreatePermission | Người dùng hiện tại cố gắng tạo bản ghi nhưng không có quyền tạo. |
| ErrorKind.DeletePermission | Người dùng hiện tại cố gắng xóa bản ghi nhưng không có quyền xóa. |
| ErrorKind.EditPermission | Người dùng hiện tại cố gắng chỉnh sửa bản ghi nhưng không có quyền chỉnh sửa. |
| ErrorKind.GeneratedValue | Người dùng cố gắng thay đổi một cột mà nguồn dữ liệu tạo tự động. |
| ErrorKind.MissingRequired | Bản ghi thiếu giá trị của cột bắt buộc. |
| ErrorKind.None | Không có lỗi. |
| ErrorKind.NotFound | Cố gắng chỉnh sửa hoặc xóa một bản ghi nhưng không tìm thấy bản ghi này. Một người dùng khác có thể đã thay đổi bản ghi. |
| ErrorKind.ReadOnlyValue | Cố gắng thay đổi một cột chỉ đọc. |
| ErrorKind.Sync | Nguồn dữ liệu báo cáo lỗi. Kiểm tra cột Tin nhắn để biết thêm thông tin. |
| ErrorKind.Unknown | Có một lỗi nhưng không rõ loại lỗi nào. |
| ErrorKind.Validation | Đã phát hiện sự cố xác thực chung, không phù hợp với một trong các loại khác. |
Errors có thể được trả về cho toàn bộ nguồn dữ liệu hoặc chỉ cho một hàng đã chọn bằng cách cung cấp đối số Record cho hàm.
Bản vá hoặc một hàm dữ liệu khác có thể trả về một trống giá trị nếu, ví dụ, không thể tạo bản ghi. Bạn có thể chuyển tệp trống đến Errorsvà trả về thông tin lỗi thích hợp trong những trường hợp này. Việc sử dụng các hàm dữ liệu tiếp theo trên cùng một nguồn dữ liệu sẽ xóa thông tin lỗi này.
Nếu không có lỗi, bảng trả về Errorssẽ trống và có thể được kiểm tra với hàm IsEmpty .
Cú pháp
Errors( DataSource [, Record ] )
- Nguồn dữ liệu – Bắt buộc. Nguồn dữ liệu mà bạn muốn hàm trả về lỗi.
- Ghi - Không bắt buộc. Bản ghi cụ thể mà bạn muốn hàm trả về lỗi. Nếu bạn không chỉ định đối số này, hàm sẽ trả về lỗi cho toàn bộ nguồn dữ liệu.
Ví dụ
Hướng dẫn chi tiết
Ví dụ: chúng tôi sẽ làm việc với nguồn dữ liệu IceCream , một nguồn dữ liệu mà Power Apps sẽ cố gắng phát hiện các xung đột:
Lưu ý
Power Apps không tìm cách phát hiện xung đột đối với các thay đổi đối với bảng Dataverse.
Thông qua ứng dụng, người dùng tải bản ghi Chocolate vào biểu mẫu nhập dữ liệu rồi thay đổi giá trị của Quantity thành 90. Bản ghi cần xử lý sẽ nằm trong biến ngữ cảnhEditRecord:
- Cập nhậtBối cảnh( { EditRecord: LookUp(Kem, Hương vị = "Chocolate") } )
Để thực hiện thay đổi này đối với nguồn dữ liệu, hãy sử dụng hàm Patch:
- Bản vá (IceCream, EditRecord, Gallery.Updates)
Khi Gallery.Updates định trị là { Quantity: 90 }, vì chỉ có thuộc tính Quantity đã được sửa đổi.
Rất tiếc, ngay trước khi bạn gọi hàm Patch, người khác đã sửa Quantity của Chocolate thành 80. Vì đây là nguồn dữ liệu được hỗ trợ để phát hiện xung đột, Power Apps sẽ phát hiện điều này và không cho phép xảy ra thay đổi xung đột. Bạn có thể kiểm tra tình huống này bằng công thức:
- IsEmpty( Errors( IceCream, EditRecord ) )
Trả về false vì hàm trả Errors về bảng sau:
| Bản ghi | Cột | Thông báo | Lỗi |
|---|---|---|---|
| { Flavor: "Chocolate", Số lượng: 100 } | trống | "Một người dùng khác đã sửa đổi bản ghi mà bạn đang cố gắng sửa đổi. Tải lại bản ghi và thử lại." | ErrorKind.Conflict |
Bạn có thể đặt nhãn trên biểu mẫu để hiển thị lỗi này cho người dùng.
- Để hiển thị lỗi, hãy đặt thuộc tính Văn bản (Văn bản) của nhãn này thành công thức sau:
Label.Text = First(Errors( IceCream, EditRecord )). Thông điệp
Bạn cũng có thể thêm nút Reload (Tải lại) trên biểu mẫu, để người dùng có thể giải quyết xung đột một cách hiệu quả.
- Để chỉ hiển thị nút khi xảy ra xung đột, hãy đặt thuộc tính Visible (Hiển thị) của nút này thành công thức sau:
! IsEmpty( Lookup( Errors( IceCream, EditRecord ), Error = ErrorKind.Conflict ) ) - Để hoàn nguyên thay đổi mà người dùng chọn nút, hãy đặt thuộc tính OnSelect của nút đó thành công thức này:
ReloadButton.OnSelect = hoàn nguyên(Kem, Sửa Bản Ghi)