お世話になります。
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 でテーブル内の行を表す配列を取得できるので、以下のような流れでできるかと思います。
- ループを回す前に、口座停止する対象か?という情報を表す変数を作っておきます(値には trueを設定)
let isStop = true;
2. record.classTable.value の配列をループで回します。
ループの中で、ステータスの値が「退会」または「口振変更」でなければ isStop = false とします。
※「退会」「口振変更」ではないものがひとつでも含まれていたら isStop は false になる
=反対にいうと、すべて「退会」「口振変更」なら isStop は true のままです。
- ループの外で、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;
});