チェックボックスフィールドの更新方法

お世話になっております。
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;

});

保存成功時でなく、保存するとき(~.submit.successでなく~.submit)イベントにしてあげてください。
もしsuccessの段階で更新したい場合はrest apiで処理してあげるといいですね。

レコード一覧画面のイベント

1 Like

回答いただきありがとうございます。
保存する時のイベントを変更して実行してみました。
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;

});

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 Like

コンソールでたしかに確認できました。
イベントハンドラー内ではkintone.app.record.setができないんですね・・
だいぶ苦戦してしまいました。
大変勉強になりました!ありがとうございます。

1 Like

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。