適用於: 畫布應用程式
模型導向應用程式
提供先前變更 資料來源 的錯誤資訊。
概觀
Errors 變更資料來源的 記錄 時,可能會發生。 許多原因都有可能,包括網路中斷、權限不足,以及編輯衝突。
修改資料來源中資料的函式,例如 Patch、Collect、Remove、RemoveIf、Update、UpdateIf,而 SubmitForm 透過兩種方式回報錯誤:
- 這些函數中的每一個都會傳回一個錯誤值作為作業的結果。 Errors 可以使用 IsError 來偵測,並像往常一樣以 IfError 和 App.OnError 取代或隱藏。 如需詳細資訊,請參閱錯誤處理。
- 操作結束後,函數 Errors 也會傳回先前操作的錯誤。 它對於在表單畫面上顯示錯誤訊息非常有用,而不需要在狀態變數中擷取錯誤。
您可以使用 Validate 和 DataSourceInfo 函式,在錯誤發生之前予以避免。 如需更多有關如何使用和避免錯誤的建議,請參閱 使用資料來源。
描述
- 記錄。 發生錯誤之資料來源中的記錄。 如果在建立記錄期間發生錯誤,則此直欄為 空白。
- 列。 造成錯誤的欄位,如果錯誤歸咎單一欄位。 如果沒有,則為 空白。
- 消息。 一個錯誤描述。 可以針對使用者顯示此錯誤字串。 此訊息可能由資料來源產生,而且可能很長,而且包含對使用者可能沒有任何意義的原始資料行名稱。
- 錯誤。 可以在公式中使用錯誤程式碼來協助您解決錯誤︰
| 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 | 偵測到一般驗證問題,不符合其他類型之一。 |
Errors 可以針對整個資料來源傳回,或透過提供 函數的 Record 引數來僅針對選取的資料列傳回。
例如,如果無法創建記錄,則 Patch 或其他數據函數可能會返回 空白 值。 您可以將 空白 傳遞給 Errors,在這些情況下,它會傳回適當的錯誤資訊。 後續在相同資料來源上使用資料函數會清除此錯誤資訊。
如果沒有錯誤,傳回的 Errors 表格將是 空的 ,可以使用 IsEmpty 函數進行測試。
語法
Errors( 資料來源 [, 記錄 ] )
- DataSource – 必要項目。 您要傳回錯誤的資料來源。
- Record (記錄 )–可選。 您要傳回錯誤的特定記錄。 如果您未指定這個引數,函式會傳回整個資料來源的錯誤。
範例
逐步解說
在此範例中,我們將使用 IceCream 資料來源,這是 Power Apps 將嘗試偵測衝突的資料來源:
備註
Power Apps 不會嘗試偵測 Dataverse 資料表變更的衝突。
透過應用程式,使用者會將 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( Errors( IceCream, EditRecord ) )
傳回 false,因為函 Errors 式傳回了下表:
| 記錄 | 欄 | 訊息 | 錯誤 |
|---|---|---|---|
| { flavor: “巧克力”, 數量: 100 } | 空白 | 「另一位使用者已修改您嘗試修改的記錄。 重新加載記錄並重試。 | ErrorKind.Conflict |
您可以在表單上放置一個標籤,向使用者顯示此錯誤。
- 若要顯示錯誤,將標籤的 Text 屬性設為此公式︰
Label.Text = First(Errors( IceCream, EditRecord ))。訊息
您也可以在表單中新增 Reload 按鈕,讓使用者可以有效地解決衝突。