はじめに
プリザンターの機能の一つであるダッシュボード。ダッシュボードには様々なパーツが配置可能ですが、その中の1つに一覧を埋め込むパーツがあります。
このパーツに表示される一覧は「既定のビュー」がセットされている状態ではそれが、されていない状態では更新日時の降順がソートキーとして設定されます。今回は、これ以外のフィルタやソータを提供させる方法を紹介します。
実装してみる
方法としては簡単です。サーバスクリプトのviewを使用します。サーバスクリプトのview
はAPIや画面表示など、どのようなデータの取得経路をたどったとしても適用された状態で取得されます。そこを活用します。
view
を設定するのは一覧として表示するサイトに対してで、条件としては「ビュー処理時」を使用します。
どこからデータを取得したかを判断するためにcontext
を使用します。context
にはデータの取得元がどこだったかを示すデータが格納されています。ダッシュボードからアクセスした場合は、次の様なデータがセットされます。
-
context.Controller
...items
-
context.Action
...dashboardpart
-
context.Id
...ダッシュボードのサイトID
これらを使用して、ダッシュボード経由でデータが取得されたときだけにview
が適用されるようにします。
コード例
if (context.Id == 3659528) /*ダッシュボードのサイトID*/ {
view.ClearFilters();
switch (context.UserId) {
case 3:
view.Filters.ClassA = '["野菜"]'
break;
case 7:
view.Filters.ClassA = '["フルーツ"]'
break;
default:
break;
}
}
view
の詳しい使い方はマニュアルを参照してください。ここでポイントとなるのはcontext.Id
にダッシュボードのサイトIDを指定していることとview.ClearFilters
でフィルタをリセットしていることです。これを指定することで、ダッシュボード経由でデータが取得されたときだけにview
が適用されるようになり、「既定のビュー」がセットされている場合に、それの影響を取り除くことが出来ます。
これを使うに当たって1つ注意することがあります。それは、1つのダッシュボードに同一のサイトの一覧を配置する場合はこの方法が使用出来ないということです。アクセス元の判断はサイトIDでしか行えていないため全ての一覧に同じview
がセットされてしまいます。これを防ぐにはダッシュボードパーツのIDであるdashboardPartId
を取得可能にする必要がありますが、現状では取れないため対応が出来ません。これは今後に期待ですね1。
まとめ
今回はダッシュボードの一覧パーツに任意のフィルタ・ソータを適用させる方法を紹介しました。ログインユーザや日時などに連動した動的な制御がダッシュボードでも可能になるので是非試して見てください。
-
コントリビューターでコード書きするかもしれません。 ↩