お世話になっております。
KintoneのJavaScriptでのコーディングについて質問です。
やりたい事としては
サブテーブルに条件をかけて、抽出したサブテーブル内にあるフィールドを更新したいです。
更新したいフィールドはチェックボックスで、値は『済』のみとなります。
(※空欄の状態から、保存後に『済』にチェックが入る仕様となります)
サブテーブルの抽出はできているのですが、該当フィールドに対する更新処理と処理後の反映がうまくいきません。
こちらの原因としては何が考えられるでしょうか?
お手数ですが、わかる方いらっしゃいましたらご教示の程お願いいたします。
(下記、コード抜粋)
kintone.events.on('app.record.edit.submit.success', (event) => {
const filteredRows = event.record.T_検品書明細.value.filter((row) => {
return row.value.一括買取品番号.value >= 1 ;
});
filteredRows.forEach((row) => {
row.value.ラベル明細.value = { value: '済' };
});
kintone.app.record.set(event.record);
return event;
});
pomo
2023 年 12 月 14 日午前 7:25
2
保存成功時でなく、保存するとき(~.submit.successでなく~.submit)イベントにしてあげてください。
もしsuccessの段階で更新したい場合はrest apiで処理してあげるといいですね。
レコード一覧画面のイベント
「いいね!」 1
回答いただきありがとうございます。
保存する時のイベントを変更して実行してみました。
alertによる確認で、『済』に更新されていることは確認できましたが、保存することができませんでした。
問題があるとすれば
kintone.app.record.set(event.record);
return event;
に原因がありそうなのですが、eventの箇所をfilteredRowsに変更しても反映されません。
私の認識では、上記コードで元のレコードに反映されると思っているのですが、なにか別の理由があるのでしょうか?
(下記、実行したコード)
kintone.events.on(‘app.record.edit.submit’, (event) => {
const filteredRows = event.record.T_検品書明細.value.filter((row) => {
return row.value.一括買取品番号.value >= 1 ;
});
filteredRows.forEach((row) => {
row.value.ラベル明細.value = ['済'];
});
// 反映された「済」の数を表示する
const count = filteredRows.filter((row) => row.value.ラベル明細.value == '済').length;
alert(`ラベル明細「済」の数: ${count} 件`);
kintone.app.record.set(event.record);
return event;
});
pomo
2023 年 12 月 14 日午前 8:41
4
kintoneのイベントハンドラー内でreturn eventで返すので、kintone.app.record.setは不要です。コンソールで確認していただくと
Uncaught Error: You cannot call kintone.app.record.set() in handler or during processing a handler.
と表示されてると思います。
kintone.app.record.set()はonclick や onclick や onchange などの JavaScript のイベントハンドラー内で実行できます。 例えば、ボタンを作ってそのボタンを押したときにレコードのデータを取得したり、更新したりするときに使います。
「いいね!」 1
コンソールでたしかに確認できました。
イベントハンドラー内ではkintone.app.record.setができないんですね・・
だいぶ苦戦してしまいました。
大変勉強になりました!ありがとうございます。
「いいね!」 1
system
(system)
クローズされました:
2023 年 12 月 17 日午前 9:25
6
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。