Поделиться через


Errors функция

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

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

Обзор

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

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

  • Каждая из этих функций возвращает значение ошибки в результате операции. Errors его можно обнаружить с помощью 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 Обнаружена общая проблема проверки, которая не соответствовала одному из других видов.

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

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

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

Синтаксис

Errors( DataSource [, Record ] )

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

Примеры

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

В этом примере мы будем работать с источником данных IceCream , источником данных, для которого Power Apps попытается обнаружить конфликты:

Ice Cream.

Замечание

Power Apps не пытается обнаружить конфликты для изменений в таблицах Dataverse.

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

  • ОбновлениеКонтекста( { EditRecord: LookUp(Мороженое, Вкус = "Шоколад") } )

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

  • Патч (IceCream, EditRecord, Gallery.Updates)

Где Gallery.Updates оценивается как {Quantity: 90 }, так как было изменено только свойство Quantity .

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

  • IsEmpty( ErrorsIceCream, EditRecord ) )

Возвращает значение false, так как Errors функция вернула следующую таблицу:

Запись Столбец Сообщение Ошибка
{ Вкус: "Шоколад", Количество: 100 } пустой "Запись, которую вы пытаетесь изменить, изменена другим пользователем. Перезагрузите запись и повторите попытку". ErrorKind.Conflict

Вы можете поместить метку в форме для отображения данной ошибки пользователю.

  • Чтобы отобразить ошибку, задайте для свойства Text метки эту формулу:
    Label.Text = First(Errors( IceCream, EditRecord )). Сообщение

Вы также можете добавить в форму кнопку Перезагрузить, чтобы пользователь мог эффективно разрешить конфликт.

  • Чтобы отображать кнопку только при возникновении конфликта, задайте для свойства Visible кнопки эту формулу:
    ! IsEmpty( Lookup( ErrorsIceCream, EditRecord ), Error = ErrorKind.Conflict )
  • Чтобы вернуть изменение, которое пользователь выбирает кнопку, задайте для свойства OnSelect следующую формулу:
    ReloadButton.OnSelect = отменить изменения(Мороженое, Редактировать запись)