ご教示いただけますと幸いです。
画像のようなレコードがあります。
レコードごとに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
ご希望の動作となりますでしょうか。