キンコミ kintone user community

みんなの投稿

2021/10/22 11:28

日時に関するフィールドについての相談です。

「日報アプリ」に予定を登録した時に「予定表アプリ」に登録できるよう、アクションを設定しようとしています。
しかし、「日報アプリ」は日時に関する項目が「日付」「時刻」フィールドで、「予定表アプリ」は「日時」フィールドで作成されているため、アクションボタンでは登録できませんでした。

カスタマイズで「日報アプリ」にアクション用の「日時フィールド」を作成しようかと思ったのですが、「日時フィールド」にデータを入力する方法がわからず断念。

『「予定表アプリ」は「日時フィールド」を設定したいので「日報アプリ」の仕様を変更するべきか』
とも考えたのですが
『「日報アプリ」の「日付欄」は空白、「時刻欄」は定時を初期設定で登録しておきたい』
とも思い、悩んでいます。

何かいいアイデアがあればご教示いただければ幸いです。
よろしくお願いいたします。

4件のコメント (新着順)
アンデス
2021/10/30 11:36

いただいたコメントを参考に「日時フィールド」を「日付フィールド」「時刻フィールド」に変更できました!

方法はカスタマイズしようと思った経緯と合わせてnoteに投稿しました。
※途中でkintoneの基本機能の関数を挟んだりしてしています。

https://note.com/andeskakigori/n/n2de10e100e85

いつか私と同じような問題にあたった人に届けば幸いです。


アンデスさん。note拝見しました。
大変興味深い内容でした。面白かったです!^^

…………カレンダーPlus欲しい。

標準機能のカレンダーからのカレンダーPlus。ありますね^^;

kintoneプラグイン 《カレンダーPlus》
https://radical-bridge.com/product/calendarPlus.html

カレンダーPlusのライセンス料は、「購入時点での利用人数(kintone契約ユーザー数)」ですので、購入するなら早めがいいですよ~と上司を説得してみてはいかがですか。
また、カレンダーPlusはメッセージボックスは出ますが機能制限なく無期限に試用できますので十分に便利さをわかったもらえたうえで購入できます。

「カレンダーPlus」はkintoneエバンジェリストの斎藤栄さんが作られたプラグインでみんなで色々触って楽しんでいます。

カレンダーPlus Advent Calendar 2020
https://adventar.org/calendars/5414
私も2つ投稿しています。

「カレンダーPlus」でシフト表を考えてみました。
https://kincom.cybozu.co.jp/chats/r6isncrfmbmti6ef

「カレンダーPlus」で通知
https://kincom.cybozu.co.jp/chats/a7hliojbotew6bbt
「通知信号」というの思いつきました。

nakaji32さんが将棋を作っています。
https://note.com/nkj_t/n/n4d945e068837

kintoneエバンジェリスト松田さんが紹介している「テレワーク管理アプリ」

私も松田さんの「テレワーク管理アプリ」の動画から多くの事を学びました。
なんだかアンデスさんといっしょですね。^^
https://kincom.cybozu.co.jp/chats/psyguudmemay2jm7

「わからん。試すしかないか。」で試した結果が以下です。
なるほど…「開始日時フィールド」を変更した時点では「日付フィールド」の計算式はまだ実行されていない状態なのか…。
やった…!計算が実行された瞬間もフィールド変更タイミングとして認識されている……!!

試すしかないからこの気付き、そこからの解決まで!素晴らしいです!

『当初の目的から脱線しすぎじゃない???』

脱線はよいですよね。興味のおもむくまま広がった知識はどこかできっと役に立ちます。
発明も、当初の目的から脱線した結果という事例はおおいですよねー。ポストイットとか電子レンジとかテフロン(焦げ付かないフライパン)とか。。。

アンデスさんのnoteから話題がひろがってよかったです!
大変参考になりました。

アンデス
2021/11/01 09:49

西村 志郎様

ありがとうございます。
まさしく現在のkintone利用者が20人ということで「入れるなら今でしょ!」で提案しました。
カレンダーPlus関連のリンクもありがとうございます。
皆さんのアイデアを参考に「こんなアプリも作れるよ!」で後押ししてみます!

アンデスさん、こんにちは。

予定表アプリの方にアクション登録用の「日付」「時刻」を用意しておき、予定表アプリのレコード登録時に「日時」フィールドに転記する方法はいかがでしょうか?試しに私の環境でやってみたらできたので共有しますね。

日付・時刻フィールドから日時フィールドに転記するのはJavaScriptのカスタマイズが必要ですが、そこまで複雑ではありません。
普通に新規に登録するときに実行エラーとなってしまうので、アクション用の日付・時刻フィールドに何も記載されていないときに処理を飛ばすということは必要です。

(function() {
'use strict';
kintone.events.on(['app.record.edit.submit','app.record.create.submit'], function(event) {

var record = event.record;

var date = record['開始日'].value;
var time = record['時刻'].value

//開始日と時刻が空欄だった場合は処理を飛ばす    
if (typeof date === 'undefined') {
  console.info('貼付け用にないので処理しない');
  return event;
}
if (typeof time === 'undefined') {
  console.info('貼付け用にないので処理しない');
  return event;
}

record['日時'].value = date + 'T' + time +'+09:00';

return event;
});
})();



ただ、個人的には、k-hataさんのおっしゃる通り、予定表(予定?)と日報(実績?)の2重管理を止めたいのであれば、登録をどちらかだけにしておき、片方は関連レコードなどで表示させる方法もいいのではないかと思いました。

それから、もし西村さんの案を考えられているのであれば、コメント内の「Moment.js」が、別のライブラリへの移行が推奨されていますので、その点、気を付けて運用なさってください。

https://developer.cybozu.io/hc/ja/articles/204982474


アンデス
2021/10/27 09:11

hori hiromi様

ありがとうございます。
コードだけでなく各注意事項も大変参考になります。

各日報を使用している担当者に確認して関連レコードかカスタマイズか検討してみます。

アンデスさん

カスタマイズで「日報アプリ」にアクション用の「日時フィールド」を作成しようかと思ったのですが、「日時フィールド」にデータを入力する方法がわからず断念。

カスタマイズであれば、Moment.js を使う方法があります。
@rex0220さんのQiitaに参考になるJSがありましたのでやってみました。
@rex0220さんありがとうございます。

kintone イベント処理で日時項目設定のメモ

『「日報アプリ」の「日付欄」は空白、「時刻欄」は定時を初期設定で登録しておきたい』

上記も可能でした。^^

Moment.jsの詳しい使い方や注意事項はこちらです。

ちょうどこの前のdevCampで、Moment.jsを教えてもらったので、試しにやったら動いたというレベルのものです。^^;

(function() {
  'use strict';
  function putNichiji(event) {
    // ロケールを設定
    moment.locale('ja');

    // 日付(日本時間)
    var hizuke = moment(event.record.日付.value).format('YYYY-MM-DD');

    // 日付+時刻(日本時間)
    if(event.record.時刻.value) {
      hizuke += ' ' + event.record.時刻.value;
    }

    // ISO形式に変換
    event.record.日時.value = moment(hizuke).toISOString();

    return event;
  }

  kintone.events.on(
    [
      'app.record.create.change.日付',
      'app.record.create.change.時刻',
      'app.record.edit.change.日付',
      'app.record.edit.change.時刻'
    ]  
    ,putNichiji);
})();

アンデス
2021/10/27 09:02

西村 志郎 様

ありがとうございます。
実は日時フィールドのフォーマットがいまいち理解できずカスタマイズを断念していました。
載せていただいたコードと教えていただいたリンク先様を参考に頑張ってみます!

アンデスさん

実は日時フィールドのフォーマットがいまいち理解できずカスタマイズを断念していました。

ですよねー。ココわかりにくいですよね。

これ、ISO8601形式といって、日時フィールドはこの形式になってる文字列を日時として受け付けるという仕様なんだと思います。

horiさんがMoment.jsを使わない方法を教えてくださいましたので、それを参考に私のMoment.jsを使った場合と比較テストしてみました。

horiさんありがとうございます!

(function() {
  'use strict';
  function putNichiji(event) {
    var date = event.record.日付.value;
    var time = event.record.時刻.value;
    event.record.日時.value = date + 'T' + time +'+09:00';
    //console.log(event);
    return event;
  }

  kintone.events.on(
    [
      'app.record.create.change.日付',
      'app.record.create.change.時刻',
      'app.record.edit.change.日付',
      'app.record.edit.change.時刻'
    ]  
    ,putNichiji);
})();

console.logで表示した日時の中身を添付します。

左側:Moment.jsライブラリを使うパターン
⇒協定世界時(UTC)は時刻の後ろにZを付ける
 YYYY-MM-DDTHH:MM:SSZ

右側:Moment.jsライブラリを使わないパターン
⇒UTC以外のタイムゾーン(時間帯)日本の場合+09:00を付ける
 YYYY-MM-DDTHH:MM:SS±HH:MM

参考:
日時のフォーマット
ISO 8601 Wiki

なんとなくイメージつかめますかね。参考になれば嬉しいです。

それとhoriさんもおっしゃってるように
そもそも、Moment.jsはメンテナンスモードに入ってて新規開発は推奨されてないようです。後継パッケージはLuxonという話。

わたしもライブラリを利用しなくてすむならそれにこしたとはないと思います。^^

アンデス
2021/10/28 10:38

西村 志郎 様

重ね重ねありがとうございます。
参考にさせていただきます。

kopata
2021/10/25 10:30

ご相談の内容があまり掴めていないのですが・・・
アプリアクションで設定できるフィールドの組合せにはルールがありますので、そこはそれに従うしかないかなぁと思います。https://jp.cybozu.help/k/ja/user/app_settings/appaction/copy_appaction.html
やりたい事は「日報アプリと予定表アプリの両方に同じ事を入力したくない、入力作業を簡略にしたい」 かと思いました。であれば、日報アプリには実績を、予定表アプリには予定を入力して、関連レコード一覧で、日報アプリに今後の予定も表示させるようにしたら如何でしょう?


アンデス
2021/10/25 12:47

k-hata様

やはり日時フィールドの内容をそのままアクションにするのは難しいんですね。

コメントいただいた関連レコードで対応できないか検討してみます。
ありがとうございます。