はじめに
プリザンターのダッシュボード機能、いろいろと便利なのですが、標準機能でカバーできないところがちらほらと・・・。
例えば、タイムライン。1つのパーツに複数のサイトを設定する場合は、ダッシュボードの管理画面からの設定は全てのサイトに一律適用されます。また、各サイトにサーバースクリプトでview.Filters
を設定していたとしても基準サイトに設定してあるものが他のサイトにも適用されてしまいます(他のサイトに設定してあるフィルターは無視される)。これだと、サイトごとにフィルターを設定したいときに困る・・・。
解決法
管理画面からでは小技は使えないので、サーバースクリプトを使います。基準サイトのview.Filters
が全てのサイトに適用されるので、基準サイトのview.Filters
に全部書いてしまいます。
サーバースクリプト例
2つのサイト、サイトIDが100と200のものをタイムラインに設定するとして、100を基準サイトに設定する場合の例です。基準サイトにフィルターを制御するためのサーバースクリプトを設定します。
フィルター条件は、サイトID:100では状況が100(吊しだと未着手)、サイトID:200では状況が900(吊しだと完了)を表示させるとします。論理式としてまとめると(SiteId:100 & Status:[100]) · (SiteId:200 & Status:[900])
ですね。
if (context.Action === 'dashboardpart') {
let data = {};
data.and_Filter1 = JSON.stringify({
SiteId: 100,
Status: '[100]'
});
data.and_Filter2 = JSON.stringify({
SiteId: 200,
Status: '[900]'
});
view.Filters.or_Filter = JSON.stringify(data);
}
例としてはこのようなコードになります。フィルターのOR/AND機能を使います。
タイムラインで全てのサイトに基準サイトのフィルターが適用されることを逆手にとって、サイトIDを条件に加えることで、サイトごとに条件を与えることを可能にしています。また、context.Action
がdashboardpart
の場合のみ実行されるようにすることで、一覧表示などのダッシュボード表示以外の場合に、フィルターが実行されることを防いでいます。
まとめ
ダッシュボードのタイムライン、サイトを複数設定するときは管理画面からの設定だと、基準サイトの設定が全てに適用されるためサイトごとの個別制御が出来ないという弱点があります。サーバースクリプトを使用することで、この弱点はカバーできるので、是非活用してみてください!