📘 hkob-astro-notion-blog

これまではてなブログにて情報発信をしていましたが、令和5年3月22日より、こちらでの情報発信を始めました。2019年以前の古い記事は過去の Middleman 時代のものなので、情報が古いです。記録のためだけに残しています。

親タスクのステータスを自動設定するボタンの設置

1. はじめに

昨日の 📄 親タスクのステータスを自動設定するボタンの設置 という記事で、以下のような形でサブタスクの時間範囲を自動的に設定し、さらに進捗を自動計算してくれるシステムを構築しました。

残念ながら完了の部分はフォーミュラでチェックボックスを使ってしまっています。せっかくステータスという欄があるのにもったいないことです。実は、昨日もう一つの新機能として、アクションを伴うことができるボタンが公開されました。せっかくなので、このボタンを使って親のステータスを自動設定してくれるように改修したいと思います。

2. 進捗率フォーミュラの変更

昨日は、進捗率のフォーミュラを次のように記述していました。

round(((prop("ステータス") != "Not started") ? toNumber(prop("ステータス") == "Done") : prop("_子の進捗率")) * 1000) / 1000

やっていることは以下のとおりです。

  • 末端のタスクが Not started でなくなったら、Done の時だけ 1 にする
  • 親のタスクはこの進捗率をそのまま設定する

今回、親のステータスも更新してしまうので、条件を_子の進捗率 が存在したらという形に変更します。

round((empty(prop("_子の進捗率")) ? toNumber(prop("ステータス") == "Done") : prop("_子の進捗率")) * 1000) / 1000

この変更でも値が変わらないことを確認しました。

3. ボタンの設置

ボタンは以下の二つのことができればいいです。

  1. ステータスが Done ではなく、_子の進捗率 の進捗率が未入力でなく、0より大きい時にはステータスを In progress に設定
  2. ステータスが Done ではなく、_子の進捗率 の進捗率が未入力でなく、1と等しい時にはステータスを Done に設定

まず 1 を実施します。サブタスクデータベースに対して、以下のフィルタを適用します。

そのフィルタを満たすすべてのタスクに対して、ステータスを In progress にします。

次は2です。同じくフィルタは以下のようになります。

同じくフィルタを満たすタスクをすべて Done にします。

4. テスト実行

作成できたので実行してみましょう。ステータスの更新は一番上に置いてみました。ボタンを押す前はこんな感じになっていて、親のステータスはすべて Not started になっています。

実行後の画面はこんな感じです。ちゃんと必要な項目が更新されています。完璧ですね。もう完了フォーミュラはいらないですね。消しましょう。

5. おわりに

改めてボタンの強力さを感じました。API だとレート制限でかなり待たされますが、ボタンだと一瞬で終わるので感動しますね。昼休みの時間に完成してしまったのがすごいな。