参照データの取得失敗時
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件分)
| プロパティ | 型 | 説明 |
|---|---|---|
| row | object | 行情報 { index, id }。index は0始まり。通常配置のフィールドでは null |
| columnUid | string | 列のUID(明細の場合のみ) |
| reason | string | 失敗の理由。"NOT_FOUND" / "AMBIGUOUS" / "API_FAILED" |
| message | string | 表示用のメッセージ |
| labelValue | string | 解決に使った表示名(labelValue を指定した場合のみ) |
| error | object | 原因のエラー("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 で検知することはできません。