PowerApps の Errors 関数Errors 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( Errors ( ... ) ) という数式にある [IsEmpty] 関数で、エラーの存在を確認することができます。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. エラーの対処方法と回避方法の詳細な推奨事項については、データ ソースの操作に関するページを参照してください。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:

  • RecordRecord. データ ソース内のエラーが発生したレコード。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.
  • ColumnColumn. エラーの原因となった列 (エラーの原因が 1 つの列にある場合)。The column that caused the error, if the error can be attributed to a single column. そうでない場合は、"空白" になります。If not, this will be blank.
  • MessageMessage. エラーの説明。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.
  • ErrorError. 次に示すような、エラーを解決できるように数式で使用できるエラー コード。An error code that can be used in formulas to help resolve the error:
ErrorKindErrorKind 説明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 1 つ以上の制約に違反しました。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 関数が呼び出される直前に、他のユーザーによって Chocolate の Quantity が 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 )).MessageLabel.Text = First(Errors( IceCream, EditRecord )).Message

ユーザーが効率的に競合を解決できるように、フォームに Reload ボタンを追加することもできます。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 )