Notionで開始時間、終了時間を別々のプロパティで管理している場合にNotionカレンダーとの親和性を高めるオートメーション
開始日と終了日を別に持つ事は推奨されているのか?
Notionで開始日と終了日を別々のプロパティで管理する事はよくあると思います。日付プロパティは範囲を持つ事が出来ますから、一つのプロパティで管理すれば良いはずですが、私がNotionの自学を始めた早い段階で、タイムラインでもカレンダーでも、「開始日と終了日は分けてプロパティを持つ事が推奨なのかな?」と感じました。
事実、そのように管理しています。
全て終日として扱われるタスク達
Notionカレンダーが登場し、Notion上でのスケジュール管理に光が差すのか?と思ったところ、何かオカシイ。
NotionのDB上で管理していたタスクが全て「終日」として扱われます。
「Notionカレンダー上でドラッグして時間を設定しましょう♪」
…
おーい!なんじゃそりゃ!
幸か不幸か「実行日」
私のタスク管理では日付や時間に関する以下のプロパティを持っていました。
・実行日(タスクをどの日に関連付けるかを指定)
・開始時間(タスクを開始したときの時間を記録)
・終了時間(タスクを完了したときの時間を記録)
Notionカレンダーでは、この「実行日」を見ているようでした。
この実行日に範囲情報が加われば、スケジュールに降りてきます。
スケジュールを管理するのに、作業を増やすのか?
Notionカレンダー上でドラッグ、実行日に範囲を設定する。
どれも本来のタスク管理上は必要のないプロセスです。
折角手間を減らしたいのに、知らずの内に手間が増えるなんてやだ!
現在は開始時、終了時は記録をしているので、妥協案でこの時間記録を何とか利用出来ないか?と考えました。
記録はボタンをクリックする事で時間を取得する様にしています。
じゃあ、このボタンに何か細工をするか?と考えました。
でもこれは辞めました。
なぜなら、開始時間や終了時間を「手動で修正する」事があるためです。
トホホ
そうだ、オートメーションに頼ろう
では、ボタン操作などに頼らず、何かしらを「トリガー」にして「自動的に」処理を出来ないか?
当たり前に思いつくオートメーションの出番です。
なんと、幸いな事にdateRangeという関数が実装されました。
これは時間の範囲を設定することができる関数です。
「開始時間、終了時間が更新された」というトリガーで関数を実行し、開始時間終了時間をdateRangeで実行日に反映させる。それで課題は解決です。
簡単じゃ無かった…
私が組み立てた関数だと「日付プロパティを空白」にする事が出来ませんでした。
例えば開始時間が入力されていない(開始時間記録のボタンを押し忘れた)状態で、終了時間を更新したら、時間の範囲は正しく設定出来ません。
または終了時間をクリアしたらどうなるか?など、発生が想定される条件に対応するのに悩みました。ノンプログラマーなので検索と試行錯誤だけが友達です。
ヒントにさせて頂いた記事があります。
hkob’s blog さんの記事です。
これをベースに自分がしたいことを考えました。
実際の解説
私のDBのプロパティは現状こうなっています。
既に「実行日」には時間の範囲が反映されていますね。
「時間記録更新で実行日を調整」というオートメーションを作成します。
開始時間を編集 または 終了時間編集 というトリガーを設定し、実行日を「自分の値」に設定となります。
この「自分の値」というは関数を利用した場合に表示されるものです。
ここの「カスタム数式」というものを選びます。
これが私の場合の完成形です。
悩んだ事は「情報が不完全の時の処理」
・origin_date
・start_date
・end_date
という3つの変数を設定します。
origin_dateは現在実行日に入っている日付を取り出し、日付だけのデータに整形したものが格納されます。時間情報を排除した、いわば「リセット用」のデータです。
start_dateは開始時間の状態を見て、空なら現在時刻、値があればそれを格納します。本当は空なら空にしたいのですが、私にはそれが出来なかったため、ダミーとしてトリガーされた時間を選択しています。
end_dateも処理はstart_Dateと同じです。
コードはこちらです。コピペでは使用できないので、このコードを参考に自分で入力して下さい。
lets(
origin_date, parseDate(formatDate(トリガーページ.実行日, "YYYY-MM-DD")),
start_date, トリガーページ.開始時間.empty() ? トリガーされた時間:トリガーページ.開始時間,
end_date, トリガーページ.終了時間.empty() ? トリガーされた時間:トリガーページ.終了時間,
ifs(
トリガーページ.開始時間.empty()==true, origin_date,
トリガーページ.終了時間.empty()==true, start_date,
start_date.dateRange(end_date)
)
)
開始時間が設定されていない場合 > 日付だけの状態に更新
終了時間が設定されていない場合 > 日付+開始時間だけに更新
そうでなければ > 日付+開始&終了時間に更新
本当はANDで条件を組み合わせてもっと制限してあげなければならないのですが、ifsの条件判定が順番に処理されるので横着しました(笑)
この条件で実行日に開始時間、終了時間の更新に合わせて自動的に時間の範囲を設定出来ました。
それで、結局何がいいの?
終日として取り扱われてNotionカレンダー上ではゴチャゴチャと溜まるタスク郡が…
オートメーションで書き込まれた時間帯に自動的に移動します。
普段の開始/終了時間の記録をすれば(事後での移動になりますが)カレンダー上の現実と同じタイミングにスケジュールが降りてきてくれます。
まぁ…いっか!という感じです(笑)