0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

kintoneの「リンク」フィールドではchangeイベントが発火しない!罠と対処法まとめ

Posted at

はじめに

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;
});

試したこと(全部無駄)

  1. フィールドコードが日本語か確認 → 半角英数字に修正済
  2. イベント定義やアプリ更新忘れ → すべて対応済
  3. console.log() でデバッグ → 発火すらしていない
  4. 数値フィールドに変更して試す → イベント発火した!😇

対応方法

■方法①:文字列(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、地味なところで罠があるので油断しないこと…

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?