過去に一度ハマった時に切り分けができずに困ったことがありましたので共有です。
ある日突然kintoneのカスタマイズJSファイルが動かなくなる現象が起きました。
どうやらeventオブジェクト内のレコード情報の呼び出し時に「event.record.{フィールドコード}.value」を使用していた箇所で
>Cannot read property {フィールドコード} of undefined
のエラーが出ていたようです。
しかしコードには何の問題もないのになぜ・・・?と思っていたところ、
原因は他のJSファイルで同じイベントが発生したときにreturn false;を返したために起きたことが分かりました。
以下具体例。
例えば下記のsample1.js,sample2.jsを同じアプリに適用させ、sample1.jsを先に読み込んだ場合、
sample2.jsが読み込まれたときにはeventオブジェクトの中身がfalseに書き換わります。
■sample1.js
(function() {
“use strict”;
kintone.events.on(‘app.record.index.show’, function(event) {
console.log(event) //eventのオブジェクトが普通に表示される
return false;
});
})();
■sample2.js
(function() {
“use strict”;
kintone.events.on(‘app.record.index.show’, function(event) {
console.log(event) //falseが表示される!
return event;
});
})();
複数のJSファイルで同じイベントを扱うとたまに起きてしまう現象ですね・・・。プラグインと競合した場合も同様の現象が発生することがあります。
回避策としては
・正常系でreturn event;させる。
・何もリターンさせない(eventオブジェクトを書き換えない)。
・eventがfalse等になっている場合は処理をしないようにif(!event){ return false; }のような一文を特定のイベントでの処理時に入れておく
などが考えられますが、他にも何かいい案あればコメントお願いします。。