Power Apps での Errors 関数

データ ソース への前の変更のエラー情報を提供します。

概要

エラーは、データ ソースのレコード が変更された場合に発生することがあります。 ネットワークの停止、不適切なアクセス許可、および編集の競合を含む、多くの原因が考えられます。

Patch 関数および他のデータ関数は、直接エラーを返しません。 代わりに、操作の結果が返されます。 データ関数の実行後、Errors 関数を使用して、エラーの詳細を取得することができます。 IsEmpty( Errors ( ... ) ) の数式で [IsEmpty] 関数を使用して、エラーの存在を確認することができます。

Validate および DataSourceInfo 関数を使用して、いくつかのエラーを発生前に回避することができます。 エラーの処理および回避方法についての推奨事項については、データ ソースの操作 を参照してください。

内容

Errors 関数は、次の を含むエラーのテーブル を返します。

  • レコード。 エラーが発生したデータ ソース内のレコード。 レコードの作成中にエラーが発生した場合、この列は 空白 になります。
  • 。 エラーが 1 つの列に原因があると考えられる場合に、エラーの原因となった列。 そうでない場合は、空白 になります。
  • メッセージ。 エラーの説明。 このエラー文字列は、エンド ユーザーに対して表示できます。 このメッセージはデータ ソースによって生成される場合があり、長くなったり、ユーザーには意味を持たない生の列名を含んでいる可能性があることに注意してください。
  • エラー : エラーを解決するために数式で使用できるエラー コード。
ErrorKind 内容
ErrorKind.Conflict 同じレコードに対して別の変更が行われ、変更の競合という結果になりました。 Refresh 関数を使用して、レコードを再読み込みし、変更を再度試します。
ErrorKind.ConstraintViolation 1 つ以上の制約に違反しています。
ErrorKind.CreatePermission レコードを作成しようとしましたが、現在のユーザーにはレコードを作成するためのアクセス許可がありません。
ErrorKind.DeletePermission レコードを削除しようとしましたが、現在のユーザーにはレコードを削除するためのアクセス許可がありません。
ErrorKind.EditPermission レコードを編集しようとしましたが、現在のユーザーにはレコードを編集するためのアクセス許可がありません。
ErrorKind.GeneratedValue データ ソースが自動的に生成する列を変更しようとしました。
ErrorKind.MissingRequired 必要な列の値がレコードにありません。
ErrorKind.None エラーはありません。
ErrorKind.NotFound レコードを編集または削除しようとしましたが、レコードが見つかりませんでした。 別のユーザーがレコードを変更した可能性があります。
ErrorKind.ReadOnlyValue 読み取り専用の列を変更しようとしました。
ErrorKind.Sync データ ソースによってエラーが報告されました。 詳細については、メッセージの列を確認してください。
ErrorKind.Unknown エラーが発生しましたが、種類が不明です。
ErrorKind.Validation 他の種類の 1 つに適合しない、一般的な検証のイシューが検知されました。

関数に レコード 引数を提供すると、データ ソース全体または選択された行のみにエラーが返されます。

Patch または他のデータ関数は、たとえば、レコードを作成できなかった場合は、空白 値を返すことがあります。 Errors空白 を渡すと、そのような場合は適切なエラー情報が返されます。 同じデータ ソースのそれ以降のデータ関数の使用は、このエラー情報を消去します。

エラーがない場合、Errors が返すテーブルは になり、IsEmpty 関数でテストすることができます。

構文

Errors( DataSource [, Record ] )

  • DataSource – 必須。 エラーを返すデータ ソース。
  • Record – オプション。 エラーを返す特定のレコード。 この引数を指定しない場合、関数はデータ ソース全体のエラーを返します。

手順

この例では、IceCream データ ソースを使用して操作します。

Ice Cream

アプリを使用して、ユーザーはチョコレートのレコードをデータ入力フォームに読み込み、次に 数量 の値を 90 に変更します。 操作するレコードは、コンテキスト変数 EditRecord に配置されています。

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

データ ソースでこの変更を行うには、Patch 関数を使用します。

  • Patch( IceCream, EditRecord, Gallery.Updates )

ここで、Quantity 関数のみが変更されたため、Gallery.Updates{ Quantity: 90 } と評価されます。

残念ながら、Patch 関数が呼び出された直前に、他のユーザーがチョコレートの 数量 を 80 に変更しました。 Power Apps はこれを検出し、競合する変更の発生を許可しません。 次の数式でこの状況を確認できます。

  • IsEmpty( Errors( IceCream, EditRecord ) )

Errors 関数が次のテーブルを返したため、false が返されます。

レコード メッセージ エラー
{ 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 )