メインコンテンツまでスキップ

参照データの取得失敗時

app.record.lookup.error イベントは、連携フィールド(RelationSelect)の連携先の解決に失敗したときに発火します。
このイベントを利用することで、独自のエラー表示(トースト等)に差し替えることができます。

定義

  • 連携先のキー(value.value)または表示名(labelValue)の変更を検知して解決を行い、失敗した場合に発火します。
  • フィールド1つにつき1回発火します。明細(SubTable)は明細フィールドが単位のため、何行失敗しても通知は1回にまとまります。
  • false を返すと、既定のインラインエラー表示を抑止できます。
atPocket.events.on('app.record.lookup.error', handler)

イベントハンドラーの登録方法は イベントハンドラーの登録 を参照してください。

イベントオブジェクトのプロパティ

handlerの引数eventの内容
{
"fieldUid": "string", // 対象フィールドのUID(明細の場合は明細フィールド自体のUID)
"isSubTable": "boolean",// 対象が明細(SubTable)かどうか
"errors": [] // 失敗の一覧(1件以上)
}

errors[](失敗1件分)

プロパティ説明
rowobject行情報 { index, id }index は0始まり。通常配置のフィールドでは null
columnUidstring列のUID(明細の場合のみ)
reasonstring失敗の理由。"NOT_FOUND" / "AMBIGUOUS" / "API_FAILED"
messagestring表示用のメッセージ
labelValuestring解決に使った表示名(labelValue を指定した場合のみ)
errorobject原因のエラー("API_FAILED" の場合のみ)

reason ごとの値の扱い

reason内容連携値・コピー先
NOT_FOUND該当する連携元レコードがありませんクリアされます
AMBIGUOUS表示名が複数のレコードに一致し、特定できませんクリアされます
API_FAILED通信・サーバの障害で取得できませんでした維持されます

クリアは連携フィールドだけでなく、コピー先のフィールド(明細では同一行内のコピー先)にも及びます。

戻り値

  • false を返すと既定のインラインエラー表示を抑止します。

記述方法

atPocket.events.on('app.record.lookup.error', function(event) {
// 参照データの取得に失敗したときに実行する処理を記述
});

サンプルコード

失敗の内容をまとめて表示する

atPocket.events.on('app.record.lookup.error', (event) => {
const lines = event.errors.map((e) =>
e.row ? `${e.row.index + 1}行目: ${e.message}` : e.message);
alert(lines.join('\n'));

// 既定のインラインエラー表示を抑止して、独自表示に差し替える
return false;
});

明細の失敗したセルに色を付ける

atPocket.events.on('app.record.lookup.error', (event) => {
if (!event.isSubTable) return;

event.errors.forEach((e) => {
atPocket.app.record.setFieldStyle(e.columnUid, {
content: { backgroundColor: '#fdd' },
}, e.row.index);
});
});
明細(SubTable)での違い
  • 明細には既定のインラインエラー表示がないため、false を返しても何も起きません。
  • 明細のセルの解決に失敗しても、レコードの登録はブロックされません。失敗を検知するには、このイベントを購読してください。
注意

配信されるビルドではコンソール出力が除去されます。解決の失敗を console で検知することはできません。

関連ページ