Функция Errors

Применимо к: приложениям на основе холста приложениям на основе модели

В этой статье приведены сведения об ошибках, связанных с предыдущими изменениями источника данных.

Обзор

Ошибки могут возникать при изменении записи источника данных. Причин может быть много, включая перебои в работе сети, отсутствие достаточных разрешений и конфликты редактирования.

Функции, которые изменяют данные в источниках данных, такие как Patch, Collect, Remove, RemoveIf, Update, UpdateIf и SubmitForm, сообщают об ошибках двумя способами:

  • Каждая из этих функций вернет значение ошибки как результат операции. Ошибки можно обнаружить с помощью функции IsError и заменить или подавить с помощью функций IfError и App.OnError, как обычно. Дополнительные сведения см. в разделе Обработка ошибок.
  • После операции функция Errors также вернет ошибки для предыдущих операций. Это может быть полезно для отображения сообщения об ошибках на экране формы без необходимости захвата ошибки в переменной состояния.

Некоторые ошибки можно устранить до их возникновения с помощью функций Validate и DataSourceInfo. Дополнительные сведения о работе с ошибками и их устранении см. в статье Общие сведения об источниках данных.

Описание

Функция 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 Произошла ошибка в источнике данных. Чтобы узнать больше, просмотрите столбец "Message".
ErrorKind.Unknown Произошла неизвестная ошибка.
ErrorKind.Validation Обнаружена общая проблема проверки, которая не соответствует ни одному из типов.

Ошибки могут быть возвращены для всего источника данных или только для выбранной строки. При этом для функции предоставляется аргумент Record.

Функция Patch или другая функция данных может возвращать пустое значение, если, например, не удалось создать запись. Вы можете передать пустое значение функции Errors. В таком случае она возвратит необходимые сведения об ошибке. При последующем использовании функций данных в том же источнике данных эти сведения об ошибке будут удалены.

Если ошибок нет, таблица, которую возвращает функция Errors, будет пустой, и ее можно будет проверить с помощью функции IsEmpty.

Синтаксис

Errors( DataSource [, Record ] )

  • DataSource — обязательный аргумент. Источник данных, для которого необходимо вернуть ошибки.
  • Record — необязательный аргумент. Определенная запись, для которой необходимо вернуть ошибки. Если этот аргумент не указан, функция возвратит ошибки для всего источника данных.

Примеры

Пошаговое руководство

В этом примере мы будем работать с источником данных IceCream:

Ice Cream.

С помощью приложения пользователь загружает запись Chocolate в форму ввода данных, а затем изменяет значение свойства Quantity на 90. Запись помещается в переменную контекстаEditRecord:

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

Внести эти изменения в источник можно с помощью функции Patch:

  • Patch( IceCream, EditRecord, Gallery.Updates )

где Gallery.Updates равно { Quantity: 90 }, так как только свойство Quantity изменено.

К сожалению, прямо перед вызовом функции Patch кто-то изменил значение свойства Quantity для записи Chocolate на 80. Power Apps определит это и не допустит конфликтного изменения. Вы можете проверить, случилось ли нечто подобное, с помощью формулы:

  • 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 )