Errors 函数

适用于:画布应用模型驱动应用

提供之前对数据源的更改的错误信息。

概述

数据源的记录发生更改时可能会出现错误。 导致错误的原因有许多,包括网络故障、权限不足和编辑冲突。

数据源中 PatchCollectRemoveRemoveIfUpdateUpdateIfSubmitForm 等修改数据的函数以两种方式报错:

  • 这些函数中的每一个都将返回一个错误值作为操作的结果。 可以像往常一样使用 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 检测到一个常规的验证问题,不符合其他任一类型。

通过向函数提供 Record 参数,可针对整个数据源,也可仅针对选定的行返回错误。

如果无法创建记录,Patch 或其他数据函数可能会返回空白值。 可以将 blank 传递到 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 函数之前,其他人将 Chocolate 的 Quantity 修改为 80。 Power Apps 将检测到此情况,且不允许发生更改冲突。 可使用以下公式检查是否存在这种情况:

  • IsEmpty( Errors( IceCream, EditRecord ) )

它将返回 false,因为 Errors 函数返回了下表:

记录 消息 错误​
{ Flavor: "Chocolate", Quantity: 100 } blank “另一个用户已修改您正尝试修改的记录。 请重新加载该记录,然后重试。” 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 )