チェックボックスの数によってアラートを表示させたい

ご教示いただけますと幸いです。

画像のようなレコードがあります。

レコードごとにAさん、Bさん、Cさん、があり、

「全体出欠」というカラムに、「〇」、「×」、「△」の【チェックボックス】あります。

日ごとにAさん、Bさん、Cさんに対し、「〇」、「×」、「△」をチェックボックスにチェックしていきますが、

例えば、10月1日~10月31日の間でレコードをAさん、Bさん、Cさんとつけていくにあたり、【Bさんの「△」が5個に達した場合「△」が4個を超えました】とアラートを表示させ、

そしてまた11月1日~11月30日の間でレコードをさん、Bさん、Cさんとつけていくにあたり、【Bさんの「△」が5個に達した場合「△」が4個を超えました】とアラートを表示させたいと考えております。

 

日付のフィールドコードは【date】

氏名のフィールドコードは【name】

「〇」、「×」、「△」のチェックボックスのフィールドコードは【check_01】

としてあります。

 

 

レコードの情報を下記のように一括で取得し、△の数を数えていくのだと思います。

https://developer.cybozu.io/hc/ja/articles/202331474-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E5%8F%96%E5%BE%97-GET-#step2

queryの書き方はここを参考に、どのように書けばいいのか実際にデータを絞り込みながら書いていくと良いと思います。

https://www.joyzo.co.jp/blog/1277

 

また、アラートを表示させるタイミングをどこにするのか?というご希望が不明のようですが

ここを明確にすると回答を得られやすいかも?しれません。

タイミングというのは例えば、こんな感じ

1)レコードを1件1件編集保存する際(record.edit(create).submit)に、△が5件目だったらエラーを表示し保存させたくない

2)一覧画面で編集保存するので、△が5件目だったらワーニングを表示させて欲しい(保存はしてOK)

3)△が5件目だったら、編集者ではなく、XXさんに通知を飛ばして欲しい

等・・・

Aiko Yamamoto さん

ありがとうございます。

タイミングとしては、

1)レコードを1件1件編集保存する際(record.edit(create).submit)に、△が5件目だったらエラーを表示し保存させたくない

です。

 

説明が、伝わりにくいかもしれませんが、

レコード追加画面で、

マスターレコードからルックアップで、名前を取得し、その後、記載日を入力し、全体出欠〇△✕のチェックボックスを入力しますが、

エラー発生画面の条件として、

いくつかの条件が必要となりますが、

「絞り込み」を行わず、

レコード追加画面で、Aさんが、特定の期間(例えば11月中)

に△の数が4を超えた場合、保存する際にエラーが表示されるのがよいですが、

 

単にチェックボックスで△が4を超えるという条件ですと、期間や人の名前で区分されず、すぐに条件が発動してしまうと思うので、

 

ルックアップで取り出した名前(●さん)/毎月の期間/チェックボックスで△が4を超える

という条件を、どのように構文を作ればよいのか悩んでいます。

 

 

C-POWER管理者さん

 

ご連絡遅くなりまして申し訳ありません。

私はまだまだJS勉強中の身ですが、サンプルJSを下記の通り記載してみました。

 

レコード追加画面保存成功前イベント(app.record.create.submit)と、レコード編集画面保存成功前イベント(app.record.edit.submit)時に

「全体出欠」が△だったら、「日付」が該当する月に、「ふりがな」さんが△取得した数を計算し

5件目だったらエラーとなり、保存できません。

(function () {

"use strict";
kintone.events.on(['app.record.edit.submit', 'app.record.create.submit'], async function (event) {
var ThisRecord = event.record;
var attend = ThisRecord.全体出欠.value[0];
var name = ThisRecord.ふりがな.value;
var attend_date = ThisRecord.日付.value;

if (attend == "△") {
var appid = kintone.app.getId();
var year = attend_date.slice(0, 4);
var month = attend_date.slice(5, 7);
var body = {
"app": appid,
"query": 'ふりがな = "' + name + '" and 全体出欠 in ("△") and 日付 >= "' + year + '-' + month + '-01" and 日付 <= "' + year + '-' + month + '-30"',
"fields": ["レコード番号"]
};

var resp1 = await kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body);

// success
//レコード作成回数
var Num = "";

//新規保存の時は3よりも大きかったら
if (event.type == "app.record.create.submit") {
Num = 3
//編集保存の時は4よりも大きかったら
} else if (event.type == "app.record.edit.submit") {
Num = 4
}

if (resp1.records.length > Num) {
event.error = year + '年' + month + '月の△は五件目です';
}

return event;

}
});
})();

 

Promiseの記載は下記の「Column1: async/awaitで直感的に同期的処理を書く」を参考に記載しました。

https://developer.cybozu.io/hc/ja/articles/360023047852-kintone%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8BPromise%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%81%AE%E5%9F%BA%E6%9C%AC

 

ご希望の動作となりますでしょうか。