共用方式為


Errors 函數

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

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

概觀

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

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

  • 這些函數中的每一個都會傳回一個錯誤值作為作業的結果。 Errors 可以使用 IsError 來偵測,並像往常一樣以 IfErrorApp.OnError 取代或隱藏。 如需詳細資訊,請參閱錯誤處理
  • 操作結束後,函數 Errors 也會傳回先前操作的錯誤。 它對於在表單畫面上顯示錯誤訊息非常有用,而不需要在狀態變數中擷取錯誤。

您可以使用 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 偵測到一般驗證問題,不符合其他類型之一。

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 按鈕,讓使用者可以有效地解決衝突。

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