Errors 函式

適用於: 畫布應用程式 模型導向應用程式

提供先前變更 資料來源 的錯誤資訊。

概觀

資料來源的 記錄 變更時,就會發生錯誤。 許多原因都有可能,包括網路中斷、權限不足,以及編輯衝突。

修改資料來源中資料的函式,例如 PatchCollectRemoveRemoveIfUpdateUpdateIf,而 SubmitForm 透過兩種方式回報錯誤:

  • 上述每一個函式都傳回錯誤值以作為作業結果。 您可以使用 IsError 偵測錯誤,並使用 IfErrorApp.OnError 進行取代或隱藏。 如需詳細資訊,請參閱錯誤處理
  • 作業完成後,Errors 函式也會傳回先前作業的錯誤。 這樣即可在表單畫面顯示錯誤訊息,而不需在狀態變數中擷取錯誤。

您可以使用 ValidateDataSourceInfo 函式,在錯誤發生之前予以避免。 如需更多有關如何使用和避免錯誤的建議,請參閱 使用資料來源

描述

Errors 函式會傳回錯誤的 資料表,當中包含下列 欄位

  • 記錄。 發生錯誤之資料來源中的記錄。 如果在記錄建立期間發生錯誤,此欄位將為 空白
  • 。 造成錯誤的欄位,如果錯誤歸咎單一欄位。 如果不是,這會是 空白
  • 訊息。 一個錯誤描述。 可以針對使用者顯示此錯誤字串。 請注意,此訊息可能會由資料來源產生且可能會很長,並包含對使用者可能沒有任何意義的未經處理欄位名稱。
  • Error。 可以在公式中使用錯誤程式碼來協助您解決錯誤︰
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 函式進行測試。

語法

Errors( DataSource [, Record ] )

  • DataSource – 必要項目。 您要傳回錯誤的資料來源。
  • Record - 非必要。 您要傳回錯誤的特定記錄。 如果您未指定這個引數,函式會傳回整個資料來源的錯誤。

範例

逐步解說

針對此範例,我們將使用 IceCream 資料來源︰

冰淇淋。

透過應用程式,使用者會將 Chocolate 記錄載入至資料輸入表單,然後將 Quantity 的值變更為 90。 要使用的記錄會放在內容變數EditRecord

  • UpdateContext( { EditRecord: LookUp( IceCream, Flavor = "Chocolate" ) } )

若要在資料來源進行這項變更,會使用 Patch 函式︰

  • Patch( IceCream, EditRecord, Gallery.Updates )

其中 Gallery.Updates 評估為 { Quantity: 90 },因為只有 Quantity 屬性已修改。

很不幸,就在呼叫 Patch 函式之前,已有另一人將巧克力的 數量 修改為 80。 Power Apps 會偵測這個且不允許發生衝突的變更。 您可以使用下列公式來檢查這種情況︰

  • IsEmpty( Errors( IceCream, EditRecord ) )

它會傳回 false,因為 Errors 函式會傳回下列資料表︰

記錄 訊息 錯誤
{ Flavor: "Chocolate", Quantity: 100 } 空白 「另一位使用者已修改您嘗試修改的記錄。 請重新載入記錄,然後再試一次。」 ErrorKind.Conflict

您可以在表單上放置一個標籤,向使用者顯示此錯誤。

  • 若要顯示錯誤,將標籤的 Text 屬性設為此公式︰
    Label.Text = First(Errors( IceCream, EditRecord )).Message

您也可以在表單中新增 Reload 按鈕,讓使用者可以有效地解決衝突。

  • 若只要在發生衝突時才顯示按鈕,將按鈕的 Visible 屬性設為此公式︰
    !IsEmpty( Lookup( Errors( IceCream, EditRecord ), Error = ErrorKind.Conflict ) )
  • 若要還原使用者選取按鈕的變更,將其 OnSelect 屬性設為此公式︰
    ReloadButton.OnSelect = Revert( IceCream, EditRecord )