繰り返し予定&曜日条件でキントーンレコード登録
2017年5月に職場でkintoneを契約して、kintoneを使い始めて、すぐに実現したいことが1つありました。標準機能を知れば知るほどに難しいと感じる自分が実現したい内容。予定を繰り返してキントーンにレコード登録したい。
今回サイボウズデイズ2019大阪でセッションを担当することになり、折角ブログもしているのだから残るものを1つ!!と考えてセッション終了後にセッションに関連する記事を公開することにしました。
なぜ繰り返し&条件付きが必要なのか
例えばデイサービスの利用が決まって契約をします。月水金の利用を契約するとしましょう。
もしくは、訪問リハビリテーションの利用が決まって契約をします。
月水金の10:00~10:40利用を契約する
契約が決まったから次の介護保険更新日までとりあえず予定登録しておきたい。
だって、利用回数の増回がない限りは決まった曜日に訪問することが原則。もちろん利用日の変更やキャンセルもあります。ショートステイの予定が入ったから来週はキャンセルとかもあります
契約された曜日の条件に合ったレコードを登録することで空の帳票として利用したい。カレンダーアプリだとよくある機能ですよね?
1月1日から12月31日まで毎週木曜日の10時〜11時に予定を入れるということです!!
通常機能では実現できなかった、条件付き繰り返し予定
- kintoneアプリにレコード追加
- アプリアクションで別アプリにレコードデータコピー
どちらも1つずつレコード登録していく為、月水金の利用を1年間と考えると日が暮れてしまいます。そんなことに時間を割いてはいられない(だって変更するかもしれないのにそんな時間勿体無い)
一旦ExcelやCSVで空レコードの元となるデータを作成し、kintoneアプリにインポートすることで複数のレコードを登録することは可能ですから、それでいい
そんなこと言われたことはないんですが、レコード一覧画面に表示されているレコードを別アプリに必要なフィールドだけコピーするってことを実際利用している場面もあります。
でもこれは1日分の記録を準備するだけ
繰り返し登録&曜日条件でkintoneレコードを登録できる方法がないか検討しました。
前置きが長くなりましたが、このやりたいことをCustomineとカレンダPlusで実現できたのでご紹介します。
【kintone予定繰り返し登録 くりかえしPlus】YouTube
繰り返し&曜日条件をCustomineで実現
まず繰り返し予定を登録することは簡単で、Customineのテンプレートとして紹介されています。
10月1日〜10月31日を指定すると31日分のレコードが作成されます。
今回はそこに曜日と言う条件を加えたいので、テンプレートを少し改変してカスタマイズしました。
改変部分を中心に解説します〜
レコードを追加する前に範囲で指定した「日付から曜日を取得する」をやることにセットします。
ループ判定同様に文字列で曜日判定というフィールドを配置しておき、セット先のフィールドに指定しておきます。
レコード追加も少し変更しています。
曜日を条件として加えたいので、月火水木金土日とチェックボックスをフィールドとして配置し、チェックの入った曜日に該当する日付のみレコードを作成します。
最後の「フィールドに値をセットする」を追加します。
アクショングラフが以下の図のようになっていればOKです。
最後の「フィールドに値をセットする」が2つあるのは曜日条件を加えたので、「日付から曜日を取得するで分岐する」でテンプレートとは動きが変わってますから(とチャットサポートで教えてもらった)
これで曜日を条件として、範囲指定した日付を別アプリにレコード作成することが可能となります。
ここからが大変でした・・・
カレンダPlusを使って予定管理を楽にしたいと思っていたんですけど・・・
カレンダPlusでは繰り返し予定登録は使えない
日付しかレコード作成時にデータを入れていないので、◯時〜◯時という訪問予定を繰り返し予定登録したい際は上記に書いたCustomineのカスタマイズだけでは実現しません・・・
日時フィールドを作成する
まず、Aアプリの情報をレコード追加でBアプリのレコード作成をする
その際、範囲指定したい日付フィールドの他に、開始時刻と終了時刻を入力する時刻フィールドを配置し、レコード追加時にマッピングしておきます。
それだけだとBアプリでも時刻扱いになります。
次に文字列1行の自動計算を使ってBアプリで日付と時刻合体(結合)させます。
計算式は
- 提供日+開始時刻-32400
- 提供日+終了時刻-32400
なぜ32400を引くのか?
Cybozu.comの東京タイムゾーンはUTC+9:00ということで、計算式のままだと9時間分余分に足されてしまいます。
そこで、60秒✖️60分✖️9時間=32400秒を引くとOK
ただここまでだと日時フィールドではなく文字列1行フィールドに情報が入っているので、Customineで先ほど計算した内容を日時フィールドに値をセットします。
条件としては、日時フィールドが空の時に値をセットするようにしておきます。
それは、カレンダーPlusでもレコード編集でも日時を変更する際は日時フィールドの値を変更します。
空欄を条件としてやることを実行するようにしないと、日時フィールドを値を変更しても、一覧画面を表示した瞬間に日付と時刻を結合させた文字列1行の自動計算結果が日時フィールドにセットされる
簡単に言えば値を変更しても元に戻ってしまうので、一度日時フィールドに値が入った時点でこのカスタマイズは有効とならないようにしておく必要があるのです。
ルックアップを有効化
カレンダーPlusのPro版にはリソースとして利用するフィールドを設定することが可能です。
例えば職員毎の予定を見たり、利用者毎の予定を見たりすることが可能なのです。
リソースとして利用可能なフィールドは 「ラジオボタン、ドロップダウン、チェックボックス、複数選択、ユーザー選択、ルックアップフィールド」
職員はユーザー選択で良いでしょう。Aアプリでユーザー選択しておいてBアプリにコピーしておけば自動的にBアプリのユーザー選択フィールドの値がセットされますし、カレンダPlusでドラッグして担当を変更することも容易です。
では利用者さんの情報をどうリソースとして扱うのか?
新規追加や利用終了時にドロップダウンのリストを追加削除することは現実的ではないですし、ラジオボタンやチャックボックスだと登録者が増えると選択するだけで時間を消費してしまいます。
ルックアップフィールドが一番適していると判断しました。
カレンダー Plusでルックアップフィールドをリソースとして選択可能にするには、「コピー元のフィールド」に指定したフィールドの設定で「値の重複を禁止する」を指定する必要があります。
氏名ではなくID&氏名
ルックアップする情報は氏名だけではダメだと考えました。
なぜならば、同姓同名が必ずと言っていいほど存在します。
田中太郎さんが2名利用しているとして、値の重複を禁止してしまうとアプリで作成可能な田中太郎さんは1人だけとなってしまいます。
今回IDを利用者毎に振る仮定し、IDという文字列1行フィールドを配置しています。
文字列1行の自動計算を使って
氏名&ID
で「コピー元のフィールド」に指定したフィールドの設定で「値の重複を禁止する」を指定できるフィールドには・・・まだなりません
なぜならば、文字列1行の自動計算にチェックを入れると「値の重複を禁止する」のチェックができなくなるからです・・・
方法は色々とありますが、既にCustomineのアプリスロットを追加しているのでカスタマイズを追加しておきます。
IDルックアップ(文字列1行)が空欄の場合、ID名(ID&利用者名)の値をIDルックアップにセットさせます。
Aアプリから追加する際は氏名もIDもCsutomineのレコード追加するでフィールドに値が入った状態です。
また、カレンダーPlusから新規追加する場合はリソースを利用者として表示し、追加したい日付や時間帯を指定して予定を追加するとルックアップフィールドが活かせると思います。
検索窓をつけておくことで、利用者が多い場合の作業効率につながると思いますし、日付から曜日を計算させたら曜日だけで抽出も可能ですので色々と発展もできますね〜
動作確認(YOTUBE)
まとめ
kintoneに加えて
- Customine
- カレンダーPlus
というkintone連携サービスを活用して予定の繰り返し登録と管理をやれるか検証してみました。
「連携サービスの費用が高い」
そう感じる人もいるかもしれません
カレンダーPlusは買い切りで、100個アプリに使えば数百円の投資で使い放題
Customineも繰り返し登録するためのサービスではありません
自動年齢計算や、複数のアプリ集計など活用方法は様々です
ここで僕が声を大にして言いたいことは
レッツトライ!!
ちなみに、サイボウズデイズ2019大阪ではもう1つkintoneデモを行いました。
若干違いますが、方法としては以下の記事を参考にCusotmineで設定したアプリです