Visualforce Seiten können als Dashboard-Komponenten benutzt werden. Entwicklung einer Dashboard-Komponente ist mit der folgenden Einschränkung verbunden: keine Benutzung von Standard Controllern möglich. Hier ein Auszug aus dem Visualforce Developer's guide:
Visualforce pages that use the Standard Controller can’t be used in dashboards. To be included in a dashboard, a Visualforce page must have either no controller, use a custom controller, or reference a page bound to the StandardSetController Class.
If a Visualforce page does not meet these requirements, it does not appear as an option in the dashboard componentVisualforce Page drop-down list.
Die im Dashboard eingebundene Visualforce Seite hat keine Verknüpfung zum Dashboard. Sie ist abgekoppelt von der im Dashboard konfigurierten Logik. Bedeutet wiederum, habe ich mehrere gleiche Dashboards im Einsatz, die sich nur durch Filtereinstellungen unterscheiden, brauche ich
entweder die gleiche Anzahl der Visualforce Seiten, oder ich setze eine "schlaue" Visualforce Seite ein, die "weiss", welches Dashboard gerade geöffnet ist.
Ich habe mich für die 2. Variante entschieden. Um die ID des geöffneten Dashboard zu bekommen, setze ich eine JavaScript Funktion ein (document.referrer), die anschließend die berechnete ID an den Controller übergibt.
Die Filterkriterien sind in einem Custom Setting pro Dashboard ID definiert. Anhand der Dashboard ID und den Einstellungen aus dem Custom Setting kann der Controller relevante Daten berechnen und auf der Visualforce Seite zur Anzeige bringen.
Beispiel mit Berechnung der Dashboard ID:
Visualforce pages that use the Standard Controller can’t be used in dashboards. To be included in a dashboard, a Visualforce page must have either no controller, use a custom controller, or reference a page bound to the StandardSetController Class.
If a Visualforce page does not meet these requirements, it does not appear as an option in the dashboard componentVisualforce Page drop-down list.
Die im Dashboard eingebundene Visualforce Seite hat keine Verknüpfung zum Dashboard. Sie ist abgekoppelt von der im Dashboard konfigurierten Logik. Bedeutet wiederum, habe ich mehrere gleiche Dashboards im Einsatz, die sich nur durch Filtereinstellungen unterscheiden, brauche ich
entweder die gleiche Anzahl der Visualforce Seiten, oder ich setze eine "schlaue" Visualforce Seite ein, die "weiss", welches Dashboard gerade geöffnet ist.
Ich habe mich für die 2. Variante entschieden. Um die ID des geöffneten Dashboard zu bekommen, setze ich eine JavaScript Funktion ein (document.referrer), die anschließend die berechnete ID an den Controller übergibt.
Die Filterkriterien sind in einem Custom Setting pro Dashboard ID definiert. Anhand der Dashboard ID und den Einstellungen aus dem Custom Setting kann der Controller relevante Daten berechnen und auf der Visualforce Seite zur Anzeige bringen.
Beispiel mit Berechnung der Dashboard ID:
<apex:page
controller="customController"
showHeader="false"
sidebar="false">
<apex:includeScript
value="{!URLFOR($Resource.jQuery,
'jquery-1.10.2.js')}" />
<script
type="text/javascript">
var
j$ = jQuery.noConflict();
j$(document).ready(function(){
var
urlTop = document.referrer;
var
idDBoard = urlTop.substring(urlTop.lastIndexOf('/') + 1);
loadContentForDashboardApex(idDBoard);
});
</script>
<style>
.textBlockInner{
display:block;
border-radius:
5px;
border:1px
solid #d3d3d3;
box-shadow:
inset 0px 0px 5px 0px #fff, inset 0px
20px 10px -10px #D6D6D6;
}
.titleOuter{
border-bottom:1px
solid #d3d3d3;
}
.titleOuter,
.textOuter{
padding:4px;
}
</style>
<apex:form
>
<apex:pageMessages
id="msg"
/>
<!--
--------------------------------------------------------------------
-->
<!--
APEX FUNCTIONS -->
<!--
Getting the Daschboard ID find the corresponding Monthly Review
-->
<apex:actionFunction
name="loadContentForDashboardApex"
action="{!findMonthlyReview}"
rerender="textBlock">
<apex:param
name="idDashboard"
assignTo="{!idDashboard}"
value=""
/>
</apex:actionFunction>
<!--
--------------------------------------------------------------------
-->
<apex:outputPanel
id="textBlock">
<!--
Display Text -->
<!--
-------------- -->
<div
class="textBlockInner">
<div
class="titleOuter">
<h2
class="mainTitle">{!fieldLabelTrends}</h2>
<div
style="float:right;"><img
src="/img/icon/telescope32.png"
/></div>
</div>
<div
class="textOuter">
<apex:outputText
value="{!textTrends}"
escape="false"/>
</div>
</div>
</apex:outputPanel>
</apex:form>
</apex:page>
Kommentare
Kommentar veröffentlichen