tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:DashboardとStandardController

今まで試したことが無かったのですがDiscussionForumに気になる質問があったので、対応できるか確認してみました。StandardControllerにDashboardオブジェクトを指定できるかについてです。

Salesforce Developer Community

やりたいことはchatterタグにDashboardIDをセットできるかということです。次のコードで試してみました。

<apex:page standardController="Dashboard" showHeader="true" sidebar="false" tabStyle="Dashboard">
    <chatter:followers entityId="{!Dashboard.Id}"></chatter:followers>
    <chatter:follow entityId="{!Dashboard.Id}"></chatter:follow>
    <chatter:feed entityId="{!Dashboard.Id}"></chatter:feed>
</apex:page>


まずDashboardのChatterフィードを有効化します。
f:id:tyoshikawa1106:20160220224232p:plain


これでうまくいくか確認してみると、無事にChatter情報を表示することができました。
f:id:tyoshikawa1106:20160220224339p:plain


StandardControllerにDashboardオブジェクトを指定して利用することはできるみたいです。あとはDashboardにVisualforceを埋め込む機能があるので、それで対応できるかなと考えました。


ところがDashboardにVisualforceを埋め込んで表示するとStandardControllerのIDが取得できませんでした。

<apex:page standardController="Dashboard" showHeader="false" sidebar="false" tabStyle="Dashboard">
    <div>
        <apex:outputText value="ID = " />
        <apex:outputText value="{!Dashboard.Id}" />
    </div>
    <chatter:followers entityId="01Zi0000000MyuF"></chatter:followers>
    <chatter:follow entityId="01Zi0000000MyuF"></chatter:follow>
    <chatter:feed entityId="01Zi0000000MyuF"></chatter:feed>
</apex:page>

f:id:tyoshikawa1106:20160220230812p:plain

f:id:tyoshikawa1106:20160220230835p:plain


entityIdを固定値で指定したとき、きちんと認識されたので、chatterタグの利用自体はできるみたいです。


standardControllerではなくControllerを用意して値を渡すことはできるか確認してみました。

<apex:page controller="VFDashboardController" showHeader="false" sidebar="false" tabStyle="Dashboard">
    <div>
        <apex:outputText value="{!label}" />
        <apex:outputText value="{!dashboardId}" />
    </div>
    <chatter:followers entityId="{!dashboardId}"></chatter:followers>
    <chatter:follow entityId="{!dashboardId}"></chatter:follow>
    <chatter:feed entityId="01Zi0000000MyuF"></chatter:feed>
</apex:page>
public with sharing class VFDashboardController {
    
    public Id dashboardId {get; set;}
    public String label {get; set;}
    
    public VFDashboardController() {
        this.label = 'Dashboard ID = ';
        this.dashboardId = System.currentPageReference().getParameters().get('id');
    }
}

コントローラ側で定義した文字列を表示することはできましたが、URLパラメータからIDを取得するようなことはできないみたいです。
f:id:tyoshikawa1106:20160220231450p:plain


VFページを埋め込む際にダッシュボードIDを利用するのちょっとむずかしそうでした。(ちなみにapex:detailタグはダッシュボードページの情報を取得できないみたいです。)