サブテーブルに1ヶ月分の日付、休日の登録

いつも大変お世話になっております。 6月分1レコードとして、休日予定をテーブルでセットしたいと思ってます。 その際、希望動作として

1,最初の行に6/1の日付をセット。

2,ワンクリックでその月の1ヶ月分の行(日付自動挿入)を追加。

3,テーブルに設定してある「休日」のチェックボックスを任意でチェック。

4,「休日」にチェックが入った行数をカウントしてテーブル外のフィールドへ集計値挿入。 そんな高度なカスタマイズは可能でしょうか。

ジェシーおいたん さん

こんにちは。ひよこです。これらのカスタマイズはできると思います!
複数のことを行うので、分解して説明しますね。

> 1,最初の行に6/1の日付をセット。

レコード追加画面の表示後イベントで、テーブルに対して初期値を設定します。
https://developer.cybozu.io/hc/ja/articles/202796890 が参考になりそうです。

> 2,ワンクリックでその月の1ヶ月分の行(日付自動挿入)を追加。

レコードに配置したスペースフィールドにボタンを追加します。
https://developer.cybozu.io/hc/ja/articles/201952870 の「ボタンの設置(2)」が参考になりそうです。

ボタンをクリックしたときの処理で、その月の1ヶ月分の行(その月の末日-1)を追加します。

JavaScript は日付処理が扱いづらいので、末日を取得するのは、Luxondayjs などのライブラリを利用すると良いと思います。
Luxon は、cybozu developer network に紹介記事があります。

// Luxon の場合
var endOfDay = luxon.DateTime.now().endOf('month').get('day'); // 6月なら、30 が返ってくる
// dayjs の場合
var endOfDay = dayjs().endOf('month').date(); // 6月なら、30 が返ってくる

行を追加する方法は、https://developer.cybozu.io/hc/ja/articles/360022502911 が参考になりそうです。

ただ、すでに日付が入った状態のときに「その月の1ヶ月分の行(日付自動挿入)を追加」するボタンをクリックした時にどうするか?など、考えるべきことは多そうです。

> 4,「休日」にチェックが入った行数をカウントしてテーブル外のフィールドへ集計値挿入。 

計算式ではできなさそうなので、カスタマイズが必要そうですね。

ユーザーがレコードの内容を入力した後なので、レコード追加画面の保存実行前イベントレコード編集画面の保存実行前イベントを利用すると良さそうです。

集計については以下の様にするとできると思います。

  1. テーブルに対して for 文を回す
      for 文の中で、行の休日のフィールドに休日が設定されていたら、カウントする。
  2. for 文の外で、カウントした値をテーブル外のフィールドに設定する

ありがとうございます。参考記事を元に色々試してみます。

> 1,最初の行に6/1の日付をセット。

> 2,ワンクリックでその月の1ヶ月分の行(日付自動挿入)を追加

サンプルコードは公開されていないのでしょうか

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