Because We Love Happy Coding

フリーライターからエンジニア × 講師。発信力だけあり余ってる感じ

kintoneでルックアップフィールドの変更イベントを検出したい時のコツ

今日もまたコーディング。だって僕らはHappy Codingが大好きだから。

アプリA.foorbarルックアップフィールドで、アプリB.foobarレコードから、値を取得してきて、アプリA.hogeとか。アプリA.fugaとか更新しているとします。

そしてアプリA.foobarルックアップフィールドが変更された時に、アプリA.bazフィールドを変更したい場合。あると思います。

アプリAに3つのフィールドがあるとしましょう。

  • foobar : ルックアップフィールド。取得時、hogeとfugaに値をコピーする
  • hoge: コピー先フィールド1
  • fuga: コピー先フィールド2

こんなJavaScriptを書いてみます。

kintone.events.on('app.record.edit.change.foobar',function(){
//処理
});

ところがこれだと、イベントフックしてくれません。ルックアップでイベントを取りたい時には、ルックアップで更新される側のフィールドを使うようです。

ところがところが、別のフィールドがundefinedになるパターンがありまして。

kintone.events.on('app.record.edit.change.hoge',function(){
    console.log(event.record.fuga.value);// undefined
});

hogeとfugaが順番に読み込まれるため、fugaの値を参照しても間に合ってない時があります。

kintone.events.on('app.record.edit.change.fuga',function(){
    console.log(event.record.fuga.value);//OK
});

ルックアップフィールドでchangeイベントを使いたい時は、「一番最後に読み込まれるフィールドのchangeイベントを捕まえる」というのがいいようです。

「ルックアップで読み込まれる順番を制御する」とか「ルックアップで全フィールド更新が終わった時に発火する」という方法があるといいんですけれども、誰かご存知でしたらぜひ教えてください。

追記

こんな記事を見つけましたのでご参考まで。