Errors 函数

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

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

概述

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

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

  • 其中每个函数都返回一个错误值作为作的结果。 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 函数进行测试。

语法

ErrorsDataSource [, Record ] )

  • 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 函数之前,其他人将 Chocolate 的 Quantity 修改为 80。 由于这是冲突检测支持的数据源,因此 Power Apps 将检测此问题,不允许发生冲突更改。 可使用以下公式检查是否存在这种情况:

  • 伊姆皮蒂( ErrorsIceCream,EditRecord)

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

记录 消息 错误​
{ 风格: “Chocolate”, Quantity: 100 } 空白 “另一个用户已修改您正尝试修改的记录。 重新加载记录,然后重试。 ErrorKind.Conflict

可在窗体上放置标签,向用户显示此错误。

  • 若要显示错误,请将标签的 Text 属性设置为此公式:
    Label.Text = First(ErrorsIceCream, EditRecord ))。消息

还可以在窗体上添加重新加载按钮,使用户可高效地解决冲突。

  • 若要只在发生冲突时显示该按钮,请将按钮的 Visible 属性设置为此公式:
    !IsEmpty(Lookup( ErrorsIceCream,EditRecord),Error = ErrorKind.Conflict)
  • 若要还原用户选择按钮的更改,请将其 OnSelect 属性设置为以下公式:
    ReloadButton.OnSelect = 还原(冰淇淋,编辑记录)