サブテーブル内フィールドの値を判定し、サブテーブル外のラジオボタンを変更する

お世話になります。

Java Script初心者です。

サブテーブル内(classTable)のステータス(status)の値が全て、"退会中"や"口振変更"になったら、サブテーブル外にある、口振ステータスaccount_status)の値を"口振停止"にしたいのですが、このやり方が分かりません。

ご存知の方がいらっしゃいましたら、ご教授いただけますと幸いです。

ちなみに、サブテーブルの1行目の値が変更された時だけのやり方は、下記のコードでできました。

問題は、全部の行を条件にした時の方法が分かりません…。

※( )内がそのフィールドのフィールドコードになります

=================================================

kintone.events.on

(“app.record.edit.change.status”, function (event) {

const record = event.record;

if (

record.classTable.value[0].value.status.value === “退会中” ||

record.classTable.value[0].value.status.value === “口振変更”

) {

record.account_status.value = “口振停止”;

}

return event;

});

Akio さん

こんにちは。ひよこです。

record.classTable.value でテーブル内の行を表す配列を取得できるので、以下のような流れでできるかと思います。

  1. ループを回す前に、口座停止する対象か?という情報を表す変数を作っておきます(値には trueを設定)
       let isStop = true;

2.  record.classTable.value の配列をループで回します。
ループの中で、ステータスの値が「退会」または「口振変更」でなければ isStop = false  とします。
※「退会」「口振変更」ではないものがひとつでも含まれていたら isStop は false になる
=反対にいうと、すべて「退会」「口振変更」なら isStop は true のままです。

  1. ループの外で、isStop が true なら account_status を口座停止する

kintone の利用する環境が IE でなければ、配列の every メソッドを使えばもっとシンプルにかけますが…。https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/every

ひよこさん

早速のご回答ありがとうございます。

初歩的で申し訳ないのですが…、

2.のrecord.classTable.value の配列をループで回すという方法がよく分からず、もしよろしければ、コードを教えていただけないでしょうか?

お手数おかけしますが、よろしくお願いいたします。

Akio さん

言葉を簡略化させすぎました… for 文で処理するという意味です。
はじめようJavaScript第7回 JavaScriptの基本機能 繰り返し処理をする、for文 その2 〜配列を使ってみよう〜 が参考になるかと思います。
なので、こんなイメージです。

let isStop = true;
const tableValues = record.classTable.value;
for (let i = 0; tableValues.length; i++) { // 行を1件ずつループ処理する
const status = tableValues[i].value.status.value; // status にステータスの値が入っている
// ステータスの値が「退会」または「口振変更」でなければ  isStop = false
}
// isStop が true なら account_status に "口座停止"を設定する
return event;

ひよこさん

ご丁寧にありがとうございます。

教えいていただいた内容を元に書いてみたのですが、何も反応がありません…。

おかしな箇所はありますでしょうか?

kintone.events.on(“app.record.edit.change.status”, function (event) {

const record = event.record;

let isStop = true;

const tableValues = record.classTable.value;

for (const i = 0; tableValues.length; i++) {

const status = tableValues[i].value.status.value;

if (status !== “退会中” || status !== “口振変更”) {

isStop = false;

}

}

if (isStop === true) {

record.account_status.value = “口振停止”;

}

return event;

});

ひよこさん

参考URLを元に少し変更してみたらできました!

ありがとうございました。

kintone.events.on(“app.record.edit.change.status”, function (event) {

const record = event.record;

let isStop = true;

const tableValues = record.classTable.value;

for (let i = 0; i < tableValues.length; i++) {

// 行を1件ずつループ処理する

const status = tableValues[i].value.status.value;

if (status !== “退会中” && status !== “口振変更”) {

isStop = false; // ステータスの値が「退会」または「口振変更」であれば isStop = false

}

}

if (isStop === true) {

record.account_status.value = “口振停止”; // isStop が true なら account_status に "口座停止"を設定する

}

return event;

});