适用于: 画布应用
模型驱动应用
提供之前对数据源的更改的错误信息。
概述
Errors 当数据源的 记录 发生更改时,可能发生此情况。 导致错误的原因有许多,包括网络故障、权限不足和编辑冲突。
数据源中 Patch、Collect、Remove、RemoveIf、Update、UpdateIf 和 SubmitForm 等修改数据的函数以两种方式报错:
- 其中每个函数都返回一个错误值作为作的结果。 Errors 可以使用 IsError 进行检测,并像往常一样用 IfError 和 App.OnError 替换或禁止。 有关详细信息,请参阅错误处理。
- 作后,该 Errors 函数还将返回先前作的错误。 它可用于在窗体屏幕上显示错误消息,而无需在状态变量中捕获错误。
可使用 Validate 和 DataSourceInfo 函数在错误出现之前避免这些错误。 请参阅使用数据源,了解如何处理和避免错误的更多建议。
描述
- 记录。 数据源中有错误的记录。 如果在创建记录期间出错,则此列为 空。
- 列。 导致错误的列(如果该错误可归因于单个列)。 如果没有,则为 空。
- 消息。 错误描述。 可为最终用户显示此错误字符串。 此消息可能由数据源生成,并且可能很长,并且可能包含对用户没有任何意义的原始列名。
- 错误。 可在公式中使用以帮助解决错误的错误代码:
| 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 ] )
- 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 ))。消息
还可以在窗体上添加重新加载按钮,使用户可高效地解决冲突。