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

概觀

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

Patch 函式和其他資料函式不會直接傳回錯誤。 相反地,它們會傳回其作業的結果。 資料函式執行之後,您可以使用 Errors 函式來取得任何錯誤的詳細資料。 您可以使用 IsEmpty( Errors ( ... ) ) 公式中的 [IsEmpty] 函式來檢查是否有錯誤

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

說明

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 函式進行測試。

語法

Errors( DataSource [, Record ] )

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

範例

逐步解說

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

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

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

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

  • Patch( IceCream, EditRecord, Gallery.Updates )

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

很不幸,就在叫用 Patch 函式之前,有其他人將 Chocolate 的 Quantity 修改為 80。 PowerApps 會偵測這個且不允許發生衝突的變更。 您可以使用下列公式來檢查這種情況︰

  • IsEmpty( Errors( IceCream, EditRecord ) )

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

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

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

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

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

  • 若只要在發生衝突時才顯示按鈕,將按鈕的 Visible 屬性設為此公式︰
    !IsEmpty( Lookup( Errors( IceCream, EditRecord ), Error = ErrorKind.Conflict ) )

  • 若要還原使用者選取按鈕的變更,將其 OnSelect 屬性設為此公式︰
    ReloadButton.OnSelect = Revert( IceCream, EditRecord )