森高千里データベースの再構築(41) : hkob の雑記録 (310)

はじめに

hkob の雑記録の第310回目は、昨日アナウンスした Activities データベースの Years への自動登録の仕組み作りです。

自動リレーションの設定

動的なリレーションは、先月のたいがさんのポストから話題になり、Notion 座談会でも動画で紹介したところです。

元々のネタが去年の12月でしたので、最近の方はあまり知らないかもしれないですね。せっかくなので久しぶりに詳しく解説してみましょう。

hkob.hatenablog.com

Activities に Years へのリレーションを追加

まずは追加したい Years へのリレーションを追加します。日付が範囲の場合でも、開始日の Year へリレーションを貼ることにするとし、制限は1ページとします。そのため、プロパティ名は単数の Year としました。実際には Year から複数の Activities を取得することが目的なので、双方向リレーションとして複数形の Activities を同時に作成します。

Activities に Years へのリレーションを追加

Activities に Map へのリレーションを追加

次に Map へのリレーションを追加します。Map は singleton で1ページしか存在しないので、制限も1ページです。Map から Activities を参照することはないので、双方向リレーションは設定しません。

Activities に Map へのリレーションを追加

`Set all to Activities' automation の設定

新規に Activities が作成された時、Map relation には自動的に all が設定されることが望まれます。ここは Automation で対応します。

`Set all to Activities' automation

`Set Year to Activities' automation の設定

ページが追加されたあと、日付が設定された時に対応する Year が設定されるようにします。ここも automation で実現します。本来は日付の設定でトリガをかければいいのですが、次の作業のために「いづれかのプロパティの編集」としております。

`Set Year to Activities' automation

設定した値の Year は以下のように Map から取得します。

Year を取得する数式

数式もこちらに記載しておきます。

lets(
    year, context("トリガーページ").prop("Start date").dateStart().year(),
    context("トリガーページ").prop("Map").first().prop("Years").filter(current.prop("名前").toNumber() == year).first()
)

既存ページに Map を設定 → Year の自動設定確認

先ほどいづれかのプロパティの編集でトリガをかけたので、既存のものに Map を設定することでも automation が発火します。これを一気に実現するために、少しレイアウトに工夫をしてみます。まず、Map と Year を一番左側に配置します。

レイアウトの変更

この状態でテーブル左端のチェックボックスをクリックすると、したまですべてのページが選択された状態になります。ここで「182 件選択済み」となっている右側に最初のプロパティである Map が表示されています。

全ページを選択

ここで Map の部分をクリックすると、1ページしか存在しない all が表示されています。この all を選択することで、すべてのページが更新されたこととなり、上で定義した automaion が駆動するはずです。

Map の設定画面

結果として数秒も経たずに、一気に Year の値が更新されました。

Year の値更新

おわりに

今回、Map データベースを使うことで、日付情報から自動的に Years へのリンクを簡単に張ることができました。やはり Map は偉大です。

hkob.notion.site