Функция Errors в PowerAppsErrors function in PowerApps

В этой статье приведены сведения об ошибках, связанных с предыдущими изменениями источника данных.Provides error information for previous changes to a data source.

ОбзорOverview

Ошибки могут возникать при изменении записи источника данных.Errors can happen when a record of a data source is changed. Причин может быть много, включая перебои в работе сети, отсутствие достаточных разрешений и конфликты редактирования.Many causes are possible, including network outages, inadequate permissions, and edit conflicts.

Функция Patch и другие функции данных не возвращают ошибки напрямую.The Patch function and other data functions don't directly return errors. Вместо этого они возвращают результат своей работы.Instead they return the result of their operation. После выполнения функции данных можно использовать функцию Errors для получения сведений об ошибках.After a data function executes, you can use the Errors function to obtain the details of any errors. Вы можете проверить наличие ошибок, используя функцию [IsEmpty] в формуле IsEmpty( Errors ( ... ) ).You can check for the existence of errors with the [IsEmpty] function in the formula IsEmpty( Errors ( ... ) ).

Некоторые ошибки можно устранить до их возникновения с помощью функций Validate и DataSourceInfo.You can avoid some errors before they happen by using the Validate and DataSourceInfo functions. Дополнительные сведения о работе с ошибками и их устранении см. в статье Общие сведения об источниках данных в PowerApps.See working with data sources for more suggestions on how to work with and avoid errors.

ОписаниеDescription

Функция Errors возвращает таблицу ошибок, содержащую следующие столбцы:The Errors function returns a table of errors that contains the following columns:

  • Record (Запись).Record. Запись в источнике данных, содержащем ошибку.The record in the data source that had the error. Если ошибка произошла во время создания записи, этот столбец будет пустым.If the error occurred during the creation of a record, this column will be blank.
  • Column (Столбец).Column. Столбец, вызвавший ошибку, если ошибку можно отнести к одному столбцу.The column that caused the error, if the error can be attributed to a single column. В противном случае он будет пустым.If not, this will be blank.
  • Message (Сообщение).Message. Описание ошибки.A description of the error. Эта строка ошибки может быть отображена для пользователя.This error string can be displayed for the end user. Учтите, что это сообщение может быть создано источником данных. Оно может быть длинным и содержать прямые имена столбцов, которые, возможно, не будут понятны для пользователя.Be aware that this message may be generated by the data source and could be long and contain raw column names that may not have any meaning to the user.
  • Error (Ошибка).Error. Код ошибки, который можно использовать в формулах для ее устранения.An error code that can be used in formulas to help resolve the error:
ErrorKind (Тип ошибки)ErrorKind ОписаниеDescription
ErrorKind.ConflictErrorKind.Conflict В ту же запись было внесено другое изменение, что привело к конфликту изменений.Another change was made to the same record, resulting in a change conflict. Используйте функцию Refresh, чтобы загрузить запись заново, и повторите попытку изменения.Use the Refresh function to reload the record and try the change again.
ErrorKind.ConstraintViolationErrorKind.ConstraintViolation Нарушено одно или несколько ограничений.One or more constraints have been violated.
ErrorKind.CreatePermissionErrorKind.CreatePermission Предпринята попытка создать запись, при этом у текущего пользователя нет разрешения на создание записей.An attempt was made to create a record, and the current user doesn't have permission to create records.
ErrorKind.DeletePermissionErrorKind.DeletePermission Предпринята попытка удалить запись, при этом у текущего пользователя нет разрешения на удаление записей.An attempt was made to delete a record, and the current user doesn't have permission to delete records.
ErrorKind.EditPermissionErrorKind.EditPermission Предпринята попытка изменить запись, при этом у текущего пользователя нет разрешения на изменение записей.An attempt was made to edit a record, and the current user doesn't have permission to edit records.
ErrorKind.GeneratedValueErrorKind.GeneratedValue Предпринята попытка изменить столбец, который автоматически создается источником данных.An attempt was made to change a column that the data source generates automatically.
ErrorKind.MissingRequiredErrorKind.MissingRequired Значение требуемого столбца отсутствует в записи.The value for a required column is missing from the record.
ErrorKind.NoneErrorKind.None Отсутствие ошибок.There is no error.
ErrorKind.NotFoundErrorKind.NotFound Предпринята попытка изменить или удалить запись, которую не удалось найти.An attempt was made to edit or delete a record, but the record couldn't be found. Возможно, другой пользователь изменил запись.Another user may have changed the record.
ErrorKind.ReadOnlyValueErrorKind.ReadOnlyValue Предпринята попытка изменить столбец, который доступен только для чтения.An attempt was made to change a column that's read only.
ErrorKind.SyncErrorKind.Sync Произошла ошибка в источнике данных.An error was reported by the data source. Чтобы узнать больше, просмотрите столбец "Message".Check the Message column for more information.
ErrorKind.UnknownErrorKind.Unknown Произошла неизвестная ошибка.There was an error, but of an unknown kind.
ErrorKind.ValidationErrorKind.Validation Обнаружена общая проблема проверки, которая не соответствует ни одному из типов.There was a general validation issue detected, that did not fit one of the other kinds.

Ошибки могут быть возвращены для всего источника данных или только для выбранной строки. При этом для функции предоставляется аргумент Record.Errors can be returned for the entire data source, or for only a selected row by providing the Record argument to the function.

Функция Patch или другая функция данных может возвращать пустое значение, если, например, не удалось создать запись.Patch or another data function may return a blank value if, for example, a record couldn't be created. Вы можете передать пустое значение функции Errors. В таком случае она возвратит необходимые сведения об ошибке.You can pass blank to Errors, and it will return appropriate error information in these cases. При последующем использовании функций данных в том же источнике данных эти сведения об ошибке будут удалены.Subsequent use of data functions on the same data source will clear this error information.

Если ошибок нет, таблица, которую возвращает функция Errors, будет пустой, и ее можно будет проверить с помощью функции IsEmpty.If there are no errors, the table that Errors returns will be empty and can be tested with the IsEmpty function.

СинтаксисSyntax

Errors( DataSource [, Record ] )Errors( DataSource [, Record ] )

  • DataSource — обязательный аргумент.DataSource – Required. Источник данных, для которого необходимо вернуть ошибки.The data source for which you want to return errors.
  • Record — необязательный аргумент.Record – Optional. Определенная запись, для которой необходимо вернуть ошибки.A specific record for which you want to return errors. Если этот аргумент не указан, функция возвратит ошибки для всего источника данных.If you don't specify this argument, the function returns errors for the entire data source.

ПримерыExamples

Шаг за шагомStep by Step

В этом примере мы будем работать с источником данных IceCream.For this example, we'll be working with the IceCream data source:

С помощью приложения пользователь загружает запись Chocolate в форму ввода данных, а затем изменяет значение свойства Quantity на 90.Through the app, a user loads the Chocolate record into a data-entry form and then changes the value of Quantity to 90. Запись помещается в переменную контекста EditRecord.The record to be worked with is placed in the context variable EditRecord:

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

Внести эти изменения в источник можно с помощью функции Patch.To make this change in the data source, the Patch function is used:

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

где Gallery.Updates равно { Quantity: 90 }, так как только свойство Quantity изменено.where Gallery.Updates evaluates to { Quantity: 90 }, since only the Quantity property has been modified.

К сожалению, прямо перед вызовом функции Patch кто-то изменил значение свойства Quantity для записи Chocolate на 80.Unfortunately, just before the Patch function was invoked, somebody else modifies the Quantity for Chocolate to 80. PowerApps определит это и не допустит конфликтного изменения.PowerApps will detect this and not allow the conflicting change to occur. Вы можете проверить, случилось ли нечто подобное, с помощью формулы:You can check for this situation with the formula:

  • IsEmpty( Errors( IceCream, EditRecord ) ),IsEmpty( Errors( IceCream, EditRecord ) )

которая возвращает значение false, так как функция Errors возвратила приведенную ниже таблицу.which returns false, because the Errors function returned the following table:

ЗаписьRecord СтолбецColumn СообщениеMessage ОшибкаError
{ Flavor: "Chocolate", Quantity: 100 }{ Flavor: "Chocolate", Quantity: 100 } пустое значениеblank "Запись, которую вы пытаетесь изменить, изменена другим пользователем."Another user has modified the record that you're trying to modify. Перезагрузите ее и повторите попытку".Please reload the record and try again." ErrorKind.ConflictErrorKind.Conflict

Вы можете поместить метку в форме для отображения данной ошибки пользователю.You can place a label on the form to show this error to the user.

  • Чтобы отобразить ошибку, задайте для свойства Text метки эту формулу:To show the error, set the label's Text property to this formula:
    Label.Text = First(Errors( IceCream, EditRecord )).Message Label.Text = First(Errors( IceCream, EditRecord )).Message

Вы также можете добавить в форму кнопку Перезагрузить, чтобы пользователь мог эффективно разрешить конфликт.You can also add a Reload button on the form, so that the user can efficiently resolve the conflict.

  • Чтобы отображать кнопку только при возникновении конфликта, задайте для свойства Visible кнопки эту формулу:To show the button only when a conflict has occurred, set the button's Visible property to this formula:
    !IsEmpty( Lookup( Errors( IceCream, EditRecord ), Error = ErrorKind.Conflict ) )!IsEmpty( Lookup( Errors( IceCream, EditRecord ), Error = ErrorKind.Conflict ) )
  • Чтобы пользователь мог отменять изменение нажатием кнопки, задайте в качестве значения свойства OnSelect следующую формулу:To revert the change which the user selects the button, set its OnSelect property to this formula:
    ReloadButton.OnSelect = Revert( IceCream, EditRecord )ReloadButton.OnSelect = Revert( IceCream, EditRecord )