【kintone】期間を指定して月別で条件絞り込み表示する方法
0. 目次
1. 概要
暑いですね、沖縄!ギークス株式会社CRUD Lab.のKUNISADAです。
期間を指定して月別で条件絞り込み表示する方法
アプリの種類によっては、期間(開始〜終了)を指定する場合も多いと思います。 レコード数が多くなり、指定する期間が長くなればなるほど、月別で絞り込んで確認することができたらいいのに!という場合もあるかと思います。
今回は、図書貸し出しアプリを想定して、貸し出し開始日と終了日から貸し出し期間を取得し、特定の月別で条件絞り込み表示をしたいと思います。
2. イメージ図
▼ 図書貸し出しアプリ(借りた本と借りる期間を記録する)
例)登録データの一例
本タイトル:「沖縄移住するには」
貸し出し期間:2016-04-23(開始)〜2016-05-05(終了)
▼ イメージ図のフロー説明
- 貸し出しの本(すべて)の一覧画面
- 本貸し出し期間(検索用)で次のキーワードを含む検索で「2016年06月」を入力
- 2016年06月に貸し出された本の一覧を表示
3. 準備
3-1 必要ファイルの読み込み
https://js.cybozu.com/momentjs/2.12.0/moment.min.js(参照:Cybozu CDN一覧)を利用。
3-2 フィールド
フィールド名 | フィールドタイプ | フィールドコード | 初期値 | その他 |
---|---|---|---|---|
本タイトル | 複数選択 | -- | -- | -- |
借りた人 | ユーザー選択 | -- | ※ここでは「KUNISADA」をテスト設定 | -- |
貸し出し期間(開始) | 日付 | rental_start | -- | -- |
貸し出し期間(終了) | 日付 | rental_end | -- | -- |
本貸し出し期間(検索用) | 文字列(1行) | rental_months | -- | 隠したい項目グループに内包 |
※本貸し出し期間(検索用)フィールドは、 隠したい項目グループに入れて、ユーザーに入力させないように設定します。TIPSで後述。
※ 実装に必要なフィールドコードのみ記載しています。
4. 実装
(function () { 'use strict'; //期間計算の関数 function list_all_months(params_start,params_end){ var start = moment(params_start).startOf('month'), end = moment(params_end).startOf('month'), contract_ary = []; start.subtract(1, 'months'); while((start.diff(end) +1) <= 0){ start.add(1, 'months'); contract_ary.push(start.format('YYYY年MM月')); } var contract_months_str = contract_ary.join(','); return contract_months_str; } //新規レコード追加画面表示のイベントハンドラー kintone.events.on('app.record.create.show', function(event){ var rec = event.record; //本貸し出し期間(検索用)をdisabled処理で記入できないようにする rec['rental_months']['disabled'] = true; return event; }); //新規レコード追加のイベントハンドラー kintone.events.on('app.record.create.submit', function(event){ var rec = event.record; /*-月別検索の処理-*/ var rent_start = rec['rental_start']['value'], rent_end = rec['rental_end']['value']; return new kintone.Promise(function(resolve, reject) { //関数使用 rec['rental_months'].value = list_all_months(rent_start,rent_end); resolve(event); }, function(error){ reject('データの取得に失敗しました。'); return; }); return event; }); })();
5. 注意点
▼ 検索時の注意点
今回のjsカスタマイズでは「YYYY年MM月」で日付登録する設定ですので、 条件絞り込みの際には「2016年06月」のように月には「0」を入れて検索してください。
6. TIPS
▼ 日付の条件絞り込みの現状
このように、日付のフィールドでは「今日」「今月」「先月」「今年」の絞り込みはできますが、開始〜終了の期間の場合は今回のカスタムが便利です!
▼ グループにアクセス制限
また、アプリの設定でフィールドのアクセス権を以下のように制限することで、
「KUNISADA」以外のユーザーにグループ自体を非表示にすることができるので、 入力時の混乱を避ける意味でも、用途に合わせて設定してみるといいかもしれません。
6. まとめ
開始日と終了日があるようなアプリで、月別絞り込みをしたい場合は、 このようにカスタムすることで、月別の集計データを取ることも可能です。 今回は図書貸し出しアプリを想定しましたが、契約関係のアプリなどで、契約期間の絞り込みをする場合などにも使えるので、やり方次第ではとても便利なカスタマイズです!