背景・実現したいこと
実現したいこととしては、 テーブルデータ(名称:テーブル)の1列目(名称:連番)へ、自動で列番号を反映したいというものです。
(現在は詳細画面編集時のアクションにてテストしていますが、新規作成時等でも実装したいです)
consoleにてうまくいったものの、いざJSEdit for kintoneに流し込むとエラーが出てしまい、
constを追加したりしたり色々試したものの、うまくいかなくなってしまいました。
基礎的な話だと思うのですが、うまくいかずお恥ずかしい限りです。
エラー情報 (開発者ツールのコンソール)
Uncaught TypeError: Cannot read properties of null (reading ‘record’)
利用したソースコード
() => {
"use strict";
const count = kintone.app.record.get().record.テーブル.value.length;
kintone.events.on('app.record.edit.show', (event) => {
for (var i = 0; i < count; i++) {
event.record.作業テーブル.value[i].value.連番.value = i + 1;
}
return event;
});
})();
以上です。
恐れ入りますが、解決方法をご教示いただければ幸いです。
よろしくお願いいたします。
kintone.app.record.get() は、アプリの画面表示後に利用できます。
イベント処理内に記述してください。スクリプト読み込み時に実行してもレコードを取得できません。
console で動作するのは、アプリの画面表示後に実行しているからです。
Neko様
見た目上、イベントハンドラを登録する前に下記を実行していますが、
constcount = kintone.app.record.get().record.テーブル.value.length;
もし、関数的に「あとから呼び出して」使いたいなら、
constcount = function(){return kintone.app.record.get().record.テーブル.value.length;}
…とfunctionにする必要があります。
ただ、おそらくこのやり方でも"イベントハンドラ内"でrecord.getはできないと思うので、
レコードの値を取得する(…の注意事項)
登録(create)、編集(edit)ではevent.recordを使うと良いかと思います。
kintone.events.on([
'app.record.create.show',
'app.record.edit.show'
],(event) => {
constcount = event.record.テーブル.value.length;
for(vari =0; i < count; i++) {
event.record.作業テーブル.value[i].value.連番.value= i +1;
}
returnevent;
});
イベントハンドラにcreate.showを追加、countにevent.recordから取得したレコードのテーブル行数を格納しています。
ハンドラが複数になったのでevents.onに配列[]でハンドラを登録しています。
なお、連番をふるテーブルが作業テーブルになっていますが、違うようでしたら適宜修正下さい。
rex0220様
確かにconsoleでの作業は、当然ながらすべて表示後になりますね・・・!
読み込み順序について意識できていなかったので、今後気を付けます。
ありがとうございました!
TO様
大変勉強になりました、ありがとうございます!
どこまで正しく記述できているかconsole.logで確かめまくっていたため、なんでも外で定義する書き癖になっていたのですが、
今後は基本的にイベントハンドラ内で記述するように気を付けます。
(実は他でも同じエラーコードが連発していたので、おそらくまったく同じ内容ですね。。。)
複数ハンドラの配列についてもご教示ありがとうございます。
そちらもまだ勉強不足だったので大変助かりました。
テーブル名についてもご指摘の通り誤記ですね。。。重ね重ねお恥ずかしい限りです。
ご指摘いただいた内容にて、無事に手もとでうまく実装できました。
丁寧な解説を頂戴し、本当にありがとうございます。
ご両名様ともこのような基本的なことにご親切に対応いただき、誠にありがとうございました!
精進いたします。
system
(system)
クローズされました:
5
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。