はじめに
kintoneのJavaScriptカスタマイズで、
「あるフィールドの値が変わったら何か処理をする」ために change.<フィールドコード>
イベントを使うのは定番です。
しかし、リンクフィールド(たとえばメールアドレスを入力するために使う)でこれを試すと、まったくイベントが発火せずハマるという落とし穴があります。
結論:リンクフィールドはchangeイベントに非対応
公式ドキュメントをよく読むと書いてあります。
※ホワイトリストなので注意
→「リンク」はダメって書いてない
文字列(1行)、数値、ラジオボタンなどは対応
公式ドキュメント(changeイベントの対応フィールド一覧)
ハマった状況
- メールアドレス入力時に「登録日」を自動入力する処理を作りたかった
- メールアドレス用に「リンク(メールアドレス)」フィールドを使用
-
app.record.create.change.メールアドレス
を書いたが、一切イベントが発火しない
// 動かないコード(リンクフィールドではイベント発火しない)
kintone.events.on('app.record.create.change.email', function (event) {
const today = new Date().toISOString().slice(0, 10);
event.record.reg_date.value = today;
return event;
});
試したこと(全部無駄)
- フィールドコードが日本語か確認 → 半角英数字に修正済
- イベント定義やアプリ更新忘れ → すべて対応済
- console.log() でデバッグ → 発火すらしていない
- 数値フィールドに変更して試す → イベント発火した!😇
対応方法
■方法①:文字列(1行)フィールドに変える(推奨)
■方法②:リンクフィールドのまま使うなら showイベントで対応。というか、無理やり感満載な回避策。。。
// フィールド値が入っていたら登録日を自動入力(画面表示時に対応)
kintone.events.on(['app.record.create.show', 'app.record.edit.show'], function (event) {
const email = event.record.email.value;
if (email) {
const today = new Date().toISOString().slice(0, 10);
event.record.reg_date.value = today;
}
return event;
});
教訓
change.<フィールドコード> を使う前に、フィールドタイプが対応しているか公式ドキュメントを確認すべし!
→というか、ヘルプを「リンクフィールド」検索しても、対応していないリストに掲載していないので、検索が空ぶる。ひどい。
kintone、地味なところで罠があるので油断しないこと…