Errors 関数
適用対象: キャンバス アプリ モデル駆動型アプリ
データ ソース への前の変更のエラー情報を提供します。
概要
エラーは、データ ソースのレコード が変更された場合に発生することがあります。 ネットワーク障害、不適切なアクセス許可、編集の競合など、多くの原因が考えられます。
Patch、Collect、Remove、RemoveIf、Update、UpdateIf、SubmitForm など、データ ソース内のデータを変更する関数は、2 つの方法でエラーを報告します。
- これらの各関数は、演算の結果としてエラー値を返します。 エラーは IsError で検出でき、通常どおり IfError と App.OnError で置換または抑制できます。 詳細については、エラー処理をご覧ください。
- 演算の後、Errors 関数は以前の演算のエラーも返します。 これは、状態変数でエラーをキャプチャする必要なしに、フォーム画面にエラー メッセージを表示するのに役立つ可能性があります。
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 つに適合しない、一般的な検証のイシューが検知されました。 |
関数にレコード引数を提供すると、データ ソース全体または選択された行のみにエラーが返されます。
パッチ または別のデータ関数が 空白 たとえば、レコードを作成できなかった場合の値。 Errors に空白を渡すと、そのような場合は適切なエラー情報が返されます。 同じデータ ソースのそれ以降のデータ関数の使用は、このエラー情報を消去します。
エラーがない場合、Errors が返すテーブルは空 になり、IsEmpty 関数でテストすることができます。
構文
エラー( データソース [、 記録 ])
- DataSource – 必須。 エラーを返すデータ ソース。
- 記録 – オプション。 エラーを返す特定のレコード。 この引数を指定しない場合、関数はデータ ソース全体のエラーを返します。
例
手順
この例では、IceCream データ ソースを使用して操作します。
アプリを使用して、ユーザーはチョコレートのレコードをデータ入力フォームに読み込み、次に数量の値を 90 に変更します。 操作対象のレコードは、コンテキスト変数EditRecord に配置されています。
- コンテキストの更新( { 編集レコード: LookUp( IceCream, Flavor = "Chocolate" ) } )
データ ソースでこの変更を行うには、次のように Patch 関数を使用します。
- パッチ(IceCream、EditRecord、Gallery.Updates)
ここで、Quantity 関数のみが変更されたため、{Gallery.Updates} は Quantity: 90 と評価されます。
残念ながら、Patch 関数が呼び出された直前に、他のユーザーがチョコレートの数量を 80 に変更しました。 Power Apps はこれを検出し、競合する変更の発生を許可しません。 次の数式でこの状況を確認できます。
- IsEmpty( エラー( IceCream, EditRecord ) )
Errors 関数が次のテーブルを返したため、false が返されます。
レコード | 列 | メッセージ | エラー |
---|---|---|---|
{ Flavor: "Chocolate", Quantity: 100 } | 空白 | "別のユーザーが、変更しようとしているレコードを変更しました。 レコードを再読み込みしてから再度やり直してください。" | ErrorKind.Conflict |
このエラーをユーザーに表示するため、フォームにラベルを置くことができます。
- エラーを表示するには、ラベルの Text プロパティを次の数式に設定します。
Label.Text = First(Errors( IceCream, EditRecord )).Message
フォームにリロード ボタンを追加すると、ユーザーが効率的に競合を解決できるようにすることもできます。