Errors 函式
適用於: 畫布應用 模型驅動應用
提供先前變更 資料來源 的錯誤資訊。
概觀
資料來源的 記錄 變更時,就會發生錯誤。 許多原因都有可能,包括網路中斷、權限不足,以及編輯衝突。
修改資料來源中資料的函式,例如 Patch、Collect、Remove、RemoveIf、Update、UpdateIf,而 SubmitForm 透過兩種方式回報錯誤:
- 上述每一個函式都傳回錯誤值以作為作業結果。 您可以使用 IsError 偵測錯誤,並使用 IfError 和 App.OnError 進行取代或隱藏。 如需詳細資訊,請參閱錯誤處理。
- 作業完成後,Errors 函式也會傳回先前作業的錯誤。 這樣即可在表單畫面顯示錯誤訊息,而不需在狀態變數中擷取錯誤。
您可以使用 Validate 和 DataSourceInfo 函式,在錯誤發生之前予以避免。 如需更多有關如何使用和避免錯誤的建議,請參閱 使用資料來源。
描述
Errors 函式會傳回錯誤的 資料表,當中包含下列 欄位:
- 記錄。 發生錯誤之資料來源中的記錄。 如果在記錄建立期間發生錯誤,此欄位將為 空白。
- 列。 造成錯誤的欄位,如果錯誤歸咎單一欄位。 如果不是,這會是 空白。
- 消息。 一個錯誤描述。 可以針對使用者顯示此錯誤字串。 請注意,此訊息可能會由資料來源產生且可能會很長,並包含對使用者可能沒有任何意義的未經處理欄位名稱。
- 錯誤。 可以在公式中使用錯誤程式碼來協助您解決錯誤︰
ErrorKind | 描述 |
---|---|
ErrorKind.Conflict | 會針對同一筆記錄進行變更,因而導致變更衝突。 使用 Refresh 函式以重新載入記錄,並重新嘗試變更。 |
ErrorKind.ConstraintViolation | 已違反一或多個條件約束。 |
ErrorKind.CreatePermission | 嘗試建立一筆記錄,而目前使用者沒有建立記錄的權限。 |
ErrorKind.DeletePermission | 嘗試刪除一筆記錄,而目前使用者沒有刪除記錄的權限。 |
ErrorKind.EditPermission | 嘗試編輯一筆記錄,而目前使用者沒有編輯記錄的權限。 |
ErrorKind.GeneratedValue | 嘗試變更資料來源所自動產生的欄位。 |
ErrorKind.MissingRequired | 記錄中遺漏必要欄位的值。 |
ErrorKind.None | 沒有發生錯誤。 |
ErrorKind.NotFound | 嘗試編輯或刪除記錄,但找不到記錄。 另一位使用者可能已變更記錄。 |
ErrorKind.ReadOnlyValue | 嘗試變更唯讀的欄位。 |
ErrorKind.Sync | 資料來源回報錯誤。 如需詳細資訊,請檢查訊息欄位。 |
ErrorKind.Unknown | 發生錯誤,但屬未知種類。 |
ErrorKind.Validation | 偵測到一般的驗證問題,其不符合其他種類其中之一。 |
可能會傳回整個資料來源或只有選取之資料列的錯誤,方法為提供 Record 引數給函式。
例如,如果無法創建記錄,則 Patch 或其他數據函數可能會返回 空白 值。 您可以傳遞 空白 至 Errors,它在這些情況下會傳回適當的錯誤資訊。 相同資料來源上之資料函式的後續使用將會清除此錯誤資訊。
如果沒有任何錯誤,Errors 傳回的資料表將為 空白,且可以使用 IsEmpty 函式進行測試。
語法
錯誤( DataSource [, Record ])
- DataSource –必需。 您要傳回錯誤的資料來源。
- Record (記錄 )–可選。 您要傳回錯誤的特定記錄。 如果您未指定這個引數,函式會傳回整個資料來源的錯誤。
範例
逐步解說
針對此範例,我們將使用 IceCream 資料來源︰
透過應用程式,使用者會將 Chocolate 記錄載入至資料輸入表單,然後將 Quantity 的值變更為 90。 要使用的記錄會放在內容變數 EditRecord:
- UpdateContext( { EditRecord:LookUp(IceCream,Flavor =“Chocolate”) } )
若要在資料來源進行這項變更,會使用 Patch 函式︰
- 補丁(IceCream、EditRecord、Gallery.Updates)
其中 Gallery.Updates 評估為 { Quantity: 90 },因為只有 Quantity 屬性已修改。
很不幸,就在呼叫 Patch 函式之前,已有另一人將巧克力的 數量 修改為 80。 Power Apps 會偵測這個且不允許發生衝突的變更。 您可以使用下列公式來檢查這種情況︰
- IsEmpty (錯誤(IceCream,EditRecord))
它會傳回 false,因為 Errors 函式會傳回下列資料表︰
記錄 | 欄 | 訊息 | 錯誤 |
---|---|---|---|
{ Flavor: "Chocolate", Quantity: 100 } | 空白 | 「另一位使用者已修改您嘗試修改的記錄。 請重新載入記錄,然後再試一次。」 | ErrorKind.Conflict |
您可以在表單上放置一個標籤,向使用者顯示此錯誤。
- 若要顯示錯誤,將標籤的 Text 屬性設為此公式︰
Label.Text = First (Errors(IceCream,EditRecord)).消息
您也可以在表單中新增 Reload 按鈕,讓使用者可以有效地解決衝突。