1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

プリザンターのダッシュボードの一覧にフィルタ・ソータを適用する方法

Posted at

はじめに

プリザンターの機能の一つであるダッシュボード。ダッシュボードには様々なパーツが配置可能ですが、その中の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

まとめ

今回はダッシュボードの一覧パーツに任意のフィルタ・ソータを適用させる方法を紹介しました。ログインユーザや日時などに連動した動的な制御がダッシュボードでも可能になるので是非試して見てください。

  1. コントリビューターでコード書きするかもしれません。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?