いつも大変お世話になっております。
今回、【kintoneプラグイン 《カレンダーPlus》】を使用することになり、
一旦無料版にてカレンダーへのカスタムを行っています。
(どこまでできるか確認の為)
現在、別アプリからルックアップで参照した「時刻」項目を元に、予定を登録できるようにしたく、以下の処理を実施したいと考えていますが、スクリプトにて実現可能でしょうか。
1.現在の日付を取得
2.ルックアップで取得したの「時刻」項目と1.を組み合わせる
3.組み合わせた2.を予定登録用の「日時」項目へ反映する。
こちらはすべて、「追加」「編集」の保存実行前イベント
([‘app.record.create.submit’,‘app.record.edit.submit’])にて実施します。
1.と2.については実施出来ていることを確認していますが、3.が上手く行きません。
良い方法がありましたら、教えていただけると助かります。
よろしくお願いいたします。
arakakiさま
カレンダーPlusを提供しているラジカルブリッジの斎藤です。
カレンダーPlusをご試用いただきありがとうございます。
3.がうまくいかないとのことですが、どのようにうまくいかないのか教えていただけますでしょうか?
1.の日付と2.の時刻が正しく存在していれば、JavaScriptで日時形式を作ることはできると思いますが、その日時のフォーマットはこちらのページに記載の形式で作られていますでしょうか?
https://cybozudev.zendesk.com/hc/ja/articles/201941754#step6
尚、カレンダーPlusで一つの予定を表す場合、開始日時と終了日時の両方が必要なので、その両方に正しく値が格納されていれば、カレンダーPlusで正しく表示されると思います。
但し、カレンダーPlus側からマウス操作で登録・編集した場合は、2.のルックアップとは連動せずに開始日時と終了日時が登録・更新されますので運用上ご注意ください。
斎藤 栄 さん
コメント頂きありがとうございます。
フォーマット形式を再確認し、チャレンジしてみます。
確認次第またコメントさせてください。
決まった週間予定がすでにkintoneに別で登録してありまして、そちらをどうにか連動反映していきたいです。
また、終了日時については、今回の質問事項が解決次第、一時間進めた日時を指定できるようにしたいと考えています。
アカウントごとに予定を管理するアプリや連動システムは他でもありましたが、
kintoneに登録されているレコードから予定を作成できそう、且つ、
週間予定を一覧表示で重複分まで確認できるのは【カレンダーPlus】だけでしたので、
今必死に作業しています…
arakakiさん
業務によっていろいろなアプリ形態があり得ると思いますので、カレンダーPlusは比較的汎用性を持った作りにしているつもりなのですが、arakakiさんのやりたいことが実現できればこちらとしてもうれしいです。
うまくいくようでしたらぜひ本採用をご検討いただければ幸いです(笑)
斎藤 栄さん
コメント頂きありがとうございます。
本採用予定なのですが、出来ることと、出来ないことを確認しなくてはならないため…頑張ってます(笑)
形式を確認しました。
日時項目に値を設定する場合、「2016-09-02T00:00:00Z」といった形式にしたいのですが、
PCより取得した日付が「2016-9-2」なので、組み合わせた時点で
「2016-9-2T00:00:00Z」 といった状態になっていました。
セットのロジックとしては以下になります
//本日日付取得
var dat = new Date();
var year = dat.getFullYear();
var month = dat.getMonth()+1;
var week = dat.getDay();
var day = dat.getDate();
var yobi = new Array(“日”,“月”,“火”,“水”,“木”,“金”,“土”);
event.record[‘日時’].value = year + “-” + month + “-” + day + “T” + event.record[‘時刻’].value + “:00Z”;
おそらく、月と日の桁数が1桁になっているのがいけないのかな?と想定していますが、
月と日の桁を2桁として設定する、何か良い方法はありますでしょうか。
知っている方がいらっしゃいましたら、よろしくお願いいたします。
arakakiさん
JavaScriptの標準のDateオブジェクトは結構面倒なことが多いので、moment.jsがおすすめです。
http://momentjs.com/
var today = moment().format(‘YYYY-MM-DD’);
で今日の日付が「2016-09-02」の形式で取れます。
時刻のハンドリングもしやすいのですが、最初調べるのが大変かもですね。。
moment.jsを使わずに通常のJSで「月と日の桁を2桁として設定する」を頑張るとすれば以下でしょうか。
var date = new Date();
var today = date.getFullYear() + ‘-’ + (‘0’ + (date.getMonth() + 1)).slice(-2) + ‘-’ + (‘0’ + date.getDate()).slice(-2);
あと、時刻の方はUTC時刻との差にお気をつけください。
斎藤 栄さん
コメントありがとうございます。
そういったやり方があるのですね。とても参考になります。
トライしてみます!
また、今後ともよろしくお願い致します。
arakakiさん
斎藤 さんがおっしゃるように moment.js を使ったほうがいろいろ悩まずに済むと思います。
こんな感じでいけると思います。
// ロケールを設定
moment.locale(‘ja’);
// 本日日付(日本時間)
var datetime = moment().format(‘YYYY-MM-DD’);
// 本日日付+時刻(日本時間)
if(event.record[‘時刻’][‘value’])
datetime += ’ ’ + event.record[‘時刻’][‘value’];
// ISO
event.record[‘日時’][‘value’] = moment(datetime).toISOString();
console.log(event.record[‘日時’][‘value’]);
rex0220 さん
ご返答が遅くなり申し訳ありません。
コメント頂きありがとうございます。
教えて頂いた通りに実施したところ出来ました!
moment.jsの使い方がよくわからなかったので、
大変勉強になりました。ありがとうございました。