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

Обзор

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

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

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

Описание

Функция Errors возвращает таблицу ошибок, содержащую следующие столбцы:

  • Record (Запись). Запись в источнике данных, содержащем ошибку. Если ошибка произошла во время создания записи, этот столбец будет пустым.

  • Column (Столбец). Столбец, вызвавший ошибку, если ошибку можно отнести к одному столбцу. В противном случае он будет пустым.

  • Message (Сообщение). Описание ошибки. Эта строка ошибки может быть отображена для пользователя. Учтите, что это сообщение может быть создано источником данных. Оно может быть длинным и содержать прямые имена столбцов, которые, возможно, не будут понятны для пользователя.

  • Error (Ошибка). Код ошибки, который можно использовать в формулах для ее устранения.

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.

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

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

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

  • Patch( IceCream, EditRecord, Gallery.Updates ),

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

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

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