Errors関数とは
データ ソース への前の変更のエラー情報を提供します。
公式より引用
データソースを入力することで、そのデータソースで発生しているエラーの情報が一覧表示されるテーブルを出力します。このテーブル情報で、エラーの原因を特定することが可能です。
また第二引数にレコードを入力することで、最後に保存したレコードに絞ることなどもできます。
構文
Errors( DataSource [, Record ] )
DataSource – 必須。 エラーを返すデータ ソース。
Record – オプション。 エラーを返す特定のレコード。 この引数を指定しない場合、関数はデータ
ソース全体のエラーを返します。
使い方
エラーの特定方法
データソース操作関数の結果エラーが出た場合に、エラーの原因を特定するために使用します。
まずはエラーを起こすために、空のレコードをリストに追加します。
Title列が必須なので、エラーが発生しました。このエラーメッセージならわかりやすいですが、Errors関数ならより詳細に情報を確認できます。
関数の結果はテーブルとして出力されるので、一時的な物であればボタンを追加しOnSelectプロパティにSet(b, Errors(テーブル名))と入力し、値を変数aに格納します。
この変数bをプレビューすると値を確認しやすいです。
テーブル形式なので、値を表示するためにはFirst関数などで行と列を指定します。
次は、書き込みができないID列を更新してみます。
以下のようにエラーが表示されますが、どの列がエラーの原因なのかは表示されません。
Errors関数で確認すると、ID列が原因ということがわかりました。
Error列の値
ErrorKindというEnum値で取得できる数値に対応しています。
ErrorKind | 内容 |
---|---|
ErrorKind.Conflict | 同じレコードに対して別の変更が行われ、変更の競合という結果になりました。 Refresh 関数を使用して、レコードを再読み込みし、変更を再度試します。 |
ErrorKind.ConstraintViolated | 1 つ以上の制約に違反しています。 |
ErrorKind.CreatePermission | レコードを作成しようとしましたが、現在のユーザーにはレコードを作成するためのアクセス許可がありません。 |
ErrorKind.DeletePermissions | レコードを削除しようとしましたが、現在のユーザーにはレコードを削除するためのアクセス許可がありません。 |
ErrorKind.EditPermissions | レコードを編集しようとしましたが、現在のユーザーにはレコードを編集するためのアクセス許可がありません。 |
ErrorKind.GeneratedValue | データ ソースが自動的に生成する列を変更しようとしました。 |
ErrorKind.MissingRequired | 必要な列の値がレコードにありません。 |
ErrorKind.None | エラーはありません。 |
ErrorKind.NotFound | レコードを編集または削除しようとしましたが、レコードが見つかりませんでした。 別のユーザーがレコードを変更した可能性があります。 |
ErrorKind.ReadOnlyValue | 読み取り専用の列を変更しようとしました。 |
ErrorKind.Sync | データ ソースによってエラーが報告されました。 詳細については、メッセージの列を確認してください。 |
ErrorKind.Unknown | エラーが発生しましたが、種類が不明です。 |
ErrorKind.Validation | 他の種類の 1 つに適合しない、一般的な検証のイシューが検知されました。 |
ラベルのTextプロパティに入力することで内容列の値を表示できるコードを置いておきます。
First(a).ErrorをError列の値と置き換えてください。
LookUp(
Table(
{
ErrorKindValue: ErrorKind.Conflict,
内容: "同じレコードに対して別の変更が行われ、変更の競合という結果になりました。 Refresh 関数を使用して、レコードを再読み込みし、変更を再度試します。"
},
{
ErrorKindValue: ErrorKind.ConstraintViolated,
内容: "1 つ以上の制約に違反しています。"
},
{
ErrorKindValue: ErrorKind.CreatePermission,
内容: "レコードを作成しようとしましたが、現在のユーザーにはレコードを作成するためのアクセス許可がありません。"
},
{
ErrorKindValue: ErrorKind.DeletePermissions,
内容: "レコードを削除しようとしましたが、現在のユーザーにはレコードを削除するためのアクセス許可がありません。"
},
{
ErrorKindValue: ErrorKind.EditPermissions,
内容: "レコードを編集しようとしましたが、現在のユーザーにはレコードを編集するためのアクセス許可がありません。"
},
{
ErrorKindValue: ErrorKind.GeneratedValue,
内容: "データ ソースが自動的に生成する列を変更しようとしました。"
},
{
ErrorKindValue: ErrorKind.MissingRequired,
内容: "必要な列の値がレコードにありません。"
},
{
ErrorKindValue: ErrorKind.None,
内容: "エラーはありません。"
},
{
ErrorKindValue: ErrorKind.NotFound,
内容: "レコードを編集または削除しようとしましたが、レコードが見つかりませんでした。 別のユーザーがレコードを変更した可能性があります。"
},
{
ErrorKindValue: ErrorKind.ReadOnlyValue,
内容: "読み取り専用の列を変更しようとしました。"
},
{
ErrorKindValue: ErrorKind.Sync,
内容: "データ ソースによってエラーが報告されました。 詳細については、メッセージの列を確認してください。"
},
{
ErrorKindValue: ErrorKind.Unknown,
内容: "エラーが発生しましたが、種類が不明です。"
},
{
ErrorKindValue: ErrorKind.Validation,
内容: "他の種類の 1 つに適合しない、一般的な検証のイシューが検知されました。"
}
),
ErrorKindValue = First(a).Error,
内容
)
活用方法
デバッグ・エラーハンドリング
以下のようにエラーメッセージでエラーの原因が特定できないような場合に使用します。
またエラーメッセージの値を取得することもできるので、エラーメッセージによってエラーハンドリングを行うことも可能です。
コメント