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