《カレンダーPlus》カレンダー画面上で日付・時刻を選択した時に開始日時(終了日時)のフィールドから日付のみを取得したい

実現したいこと

予定(レコード)の開始日時と終了日時の時刻部分の組み合わせを2パターンのみに限定したいと考えております。

(例)

パターン1:開始日時 yyyy-mm-dd  8:00 / 終了日時 yyyy-mm-dd 12:00

パターン2:開始日時 yyyy-mm-dd 13:00 / 終了日時 yyyy-mm-dd 17:00

 

愚見

以下の手順で開発しています。

 

《カレンダー画面上で日付・時刻を選択した時に発生するイベント(kintone 標準追加画面への画面遷移)》

①開始日時のフィールド(日時フィールド)から日付のみを取得

②開始日フィールド(日付フィールド)に①で取得した日付をセット

 

《レコード編集画面で【保存】をクリックしたときに発生するイベント》

③開始日フィールドから日付を取得

④時刻フィールドから時刻を取得

(時刻フィールドの値については、別途作成のラジオボタンから制御する予定です)

⑤開始日時のフィールドに日付と時刻をセット

 

コード

(function () {
'use strict';

//カレンダー画面上で日付・時刻を選択した時に発生するイベント(kintone 標準追加画面への画面遷移)
kintone.events.on('app.record.index.show', function (e) {
  calendarplus.events.on('cp.event.create.select', function (event) {
    //開始日時のフィールド(日時フィールド)から開始"日"を取得
      var startDate = event.record['開始日時']['value'].getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + date.getDate()).slice(-2);
    //開始日フィールド(日付フィールド)に値を設定
    event.record['開始日']['value'] = startDate;
    return event;
  });
  return e;
});

//レコード編集画面で【保存】をクリックしたときに発生するイベント
kintone.events.on('app.record.edit.submit', function (event) {
  //開始日フィールドから日付を取得
  var startDate = event.record['開始日']['value'];
  //時刻フィールドから時刻を取得
  var time = event.record['時刻']['value'];
  //開始日時のフィールドに値を設定
  event.record['開始日時']['value'] = startDate + 'T' + time + '+09:00';
  return e;
});
})();

 

発生した問題

カレンダー画面上で日付・時刻を選択(クリック)しても何も表示されなくなりました。

そもそも上記手順で実現可能かも含めてご教示いただけますと幸いです。

こんにちは。プロジェクト・アスノートの松田です。

パッと見で気づいた点としては、8行目の中で、dateが未定義のように思います。
コンソールにエラーが出ているのではないでしょうか?

下記のデバッグの記事等を参考に、順を追って確認しながらコーディングをされたらよいかと思います。

https://cybozudev.zendesk.com/hc/ja/articles/207613916-%E5%8B%95%E3%81%8B%E3%81%AA%E3%81%84-%E3%81%9D%E3%82%93%E3%81%AA%E6%99%82%E3%81%AF%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%82%92%E3%81%97%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86-%E5%85%A5%E9%96%80%E7%B7%A8

Shotaro Matsuda

 

ご指摘いただきありがとうございます。

提供いただいた記事を参考に一部修正しましたが、新たなエラーに遭遇してしまい、自分では解決できませんでした。

 

《エラー発生個所》

event.record[‘開始日’][‘value’] = startDate;

 

上記startDateを’2023-03-31’に置き換えてみてもエラーが発生してしまいます。

今回のテーマとは切り分けて、単にevent.record[‘開始日’][‘value’] = '2023-03-31’とすれば正常に動作することは確認済です。

 

なにとぞご助言をいただけますと幸いです。

 

Sources

(function () {
'use strict';
//カレンダー画面上で日付・時刻を選択した時に発生するイベント(kintone標準のレコード追加画面を直接表示するように設定済)
kintone.events.on('app.record.index.show', function (e) {
  calendarplus.events.on('cp.event.create.select', function (event) {
    //開始日時のフィールド(日時フィールド)から開始"日"を取得
    var startDate = event.record['開始日時']['value'];
    var startDate = new Date(startDate);
      startDate = startDate.getFullYear() + '-' + ('0' + (startDate.getMonth() + 1)).slice(-2) + '-' + ('0' + startDate.getDate()).slice(-2);
    console.log(startDate); //2023-03-14
   console.log(typeof startDate); //string
    //開始日フィールド(日付フィールド)に値を設定
    event.record['開始日']['value'] = startDate; //エラー発生個所
    return event;
  });
  return e;
});
//レコード追加画面、レコード編集画面で【保存】をクリックしたときに発生するイベント
kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], function (event) {
  //開始日フィールド、終了日フィールドから日付を取得
  var startDate = event.record['開始日']['value'];
  var endDate = event.record['終了日']['value'];
  //開始時刻フィールド、終了時刻フィールドから時刻を取得
  var startTime = event.record['開始時刻']['value'];
  var endTime = event.record['終了時刻']['value'];
  if (startDate !== undefined && endDate !== undefined) {
    //開始日時のフィールド、終了日時のフィールドに値を設定
    event.record['開始日時']['value'] = startDate + 'T' + startTime + '+09:00';
    event.record['終了日時']['value'] = endDate + 'T' + endTime + '+09:00';
  }
  return event;
});
})();

 

Console(エラー表示部分を抜粋)

Uncaught (in promise) TypeError: Cannot set properties of undefined (setting 'value')

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