Chức năng lỗi

Á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

Lỗi có thể xảy ra khi một bản ghi của một nguồn dữ liệu được thay đổi. 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, UpdateIfSubmitForm) báo cáo lỗi theo 2 cách:

  • Mỗi hàm trong số này sẽ trả về một giá trị lỗi là kết quả của thao tác. Bạn có thể phát hiện lỗi bằng hàm IsError cũng như thay thế hoặc loại bỏ lỗi bằng hàm IfErrorApp.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 khi thao tác, hàm Errors sẽ trả về lỗi cho các thao tác trước đó. Cách này có thể hữu ích khi hiển thị thông báo lỗi trên màn hình biểu mẫu mà không cần nắm bắt lỗi trong 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 ValidateDataSourceInfo. 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, chứa các cột sau đây:

  • Record (Bản 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ẽ blank (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, cột này sẽ blank (trống).
  • Message (Thông báo). Mô tả về lỗi. Chuỗi lỗi này có thể hiển thị cho người dùng cuối. Xin lưu ý rằng thông báo này có thể do nguồn dữ liệu tạo, có thể dài và chứa những tên cột chưa xử lý có thể không có ý nghĩa gì với người dùng.
  • Error (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 vấn đề xác thực chung, không phù hợp với một trong các loại vấn đề khác.

Hàm có thể trả về lỗi của toàn bộ nguồn dữ liệu hoặc hãy cung cấp đối số Record cho hàm để chỉ trả về lỗi của hàng được chọn.

Hàm Patch hoặc hàm dữ liệu khác có thể trả về giá trị blank trong trường hợp không tạo được bản ghi chẳng hạn. Bạn có thể chuyển giá trị blank cho Errors và hàm sẽ 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 sau đó trên cùng nguồn dữ liệu sẽ xóa thông tin lỗi này.

Nếu không có lỗi, hàm Errors sẽ trả về bảng trống và bạn có thể dùng hàm IsEmpty để kiểm tra.

Cú pháp

Errors( DataSource [, Record ] )

  • DataSource – Bắt buộc. Nguồn dữ liệu mà bạn muốn hàm trả về lỗi.
  • Record – 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

Trong ví dụ này, chúng tôi sẽ thao tác với nguồn dữ liệu IceCream:

Kem.

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:

  • UpdateContext( { EditRecord: LookUp( IceCream, Flavor = "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:

  • Patch( IceCream, EditRecord, Gallery.Updates )

trong đó, Gallery.Updates được đánh giá là { Quantity: 90 }, vì chỉ 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. 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 ) )

hàm này trả về false, vì hàm Errors trả về bảng sau:

Bản ghi Cột Thông báo Lỗi
{ Flavor: "Chocolate", Quantity: 100 } blank "Một người dùng khác đã sửa đổi bản ghi mà bạn đang cố gắng sửa đổi. Vui lòng tải lại bản ghi này rồi 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 )).Message

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 ) )
  • Để hủy thay đổi về việc người dùng chọn nút, hãy đặt thuộc tính OnSelect của nút này thành công thức sau:
    ReloadButton.OnSelect = Revert( IceCream, EditRecord )