Direkt zum Hauptbereich

Posts

Es werden Posts vom November, 2014 angezeigt.

Noch mehr Visualforce (Fehlermeldungen)

Wieder mal ein interessantes Phänomen in Verbindung mit Visualforce Pages. Kurze Erläuterung: * eine Visualforce Page gibt Daten einer MAP in einer Tabelle aus  * map<Integer, list<myObject>>() * falls die list<myObject> leer ist, wird die entsprechende Spalte nicht angezeigt (rendered=false)
Problem: beim Abfragen der Größe  <apex:outputPanel rendered="{!myMap[selectedYear].size > 0}>
erscheint die folgende Fehlermeldung: Incorrect parameter type for subscript. Expected Number, received Text
Lösung:
den Inhalt der MAP in eine Variable auslagern:

<apex:variable value="{!myMap[selectedYear]}"  var="listMyObjects" />
und anschließend die Größe abfragen
<apex:outputPanel rendered="{!listMyObjects.size > 0}>

Visualforce Component: DML currently not allowed

Eine Visualforce Seite enthält eine Visualforce Komponente mit eigenem Controller.  Der "Save" Button dieser Komponente soll einen neuen Datensatz erstellen. Die Erstellung des Datensatzes schlägt fehl.Fehlermeldung: Visualforce Error System.LimitException: DML currently not allowed





Lösung:

<apex:component controller="myController" allowDML="true">

Wochentagberechnung mit APEX

Das folgende Beispiel zeigt, wie man den Wochentag eines bestimmten Datums unabhängig von der Zeitzone mit APEX berechnet.

Berechnung Weihnachtstag:
Date dChristmas = date.newInstance(date.today().year(), 12, 24);
Date dStart = date.newInstance(1900, 1, 7);
Integer iWeekDayChristmas = math.mod(dStart.daysBetween(dChristmas), 7);

Ergebnis: iWeekDayChristmas = 3  --> Weihnachtstag 24.12.2014 am Mittwoch

0 = Sonntag
1 = Montag
2 = Dienstag
3 = Mittwoch
4 = Donnerstag
5 = Freitag
6 = Samstag

Nur so nebenbei, Buß und Bettag kann dann basierend auf dem Konstrukt wie folgt berechnet werden:

Date dNew = dChristmas.addDays(-32-iWeekDayChristmas);

Ergebnis: dNew = Buß und Bettag am 19.11.2014

CSS Spielereien

Um die Schaltfläche einer Dropdown-Liste zu entfernen, muss das HTML Element mit den folgenden CSS Eigenschaften ausgestattet werden.

.selectUserName{
    moz-appearance: none !important;
    text-indent: 0.01px !important;
    text-overflow: "" !important;
    -moz-appearance: window !important;
    cursor: pointer;
}



Auf der Visualforce Seite ist die Dropdown Liste wie folgt implementiert:

<apex:selectList size="1" value="{!IdUser}" styleClass="selectUserName">
<apex:selectOptions value="{!Users}"/>
</apex:selectList>

Visualforce mit Filter

Interessantes Systemverhalten stellte ich heute beim Entwickeln einer Visualforce Seite fest.
Die in die Visualforce implementierten Charts können gefiltert werden.
Der Filter enthält unter anderem eine Liste mit Checkboxen.
Werden mehrere Filtereinstellungen gleichzeitig gesetzt (wie auf dem folgenden Video zu sehen ist), wird die aufgerufene Filter-Funktion nicht ausgeführt. Keine Fehlermeldung, keine Ausgabe im Log.
Nur "rerender" aktualisiert den Chart. Wird die Filterung mit einer einzigen Einschränkung und anschließend wieder in Kombination vorgenommen, funktioniert die Filter-Funktion.


Im Controller ist die Liste wie folgt deklariert:
public list<String> ResourceTypeSelected{get; set;}

Um dieses Problem zu lösen, muss die Liste im Constructor initialisiert werden:
ResourceTypeSelected = new list<String>();

Benutzung von Tabs in Visualforce

Seit einiger Zeit beschäftige ich mich wieder etwas intensiver mit Visualforce.
Eine neue Visualforce Seite muss die Konfiguration von 10 verschiedenen Objekte ermöglichen.
Die einfachste Lösung ist die Benutzung von apex:tabPanel - was im Endeffekt eine Tabelle mit mehreren Tabs darstellt. Unter jedem Tab wird jeweils ein List View ausgegeben, was mit APEX Mitteln ebenfalls ganz einfach funktioniert.
Eine einzige große Schwachstelle in diesem Konstrukt ist das kurzzeitige Verlassen der Seite. Das passiert immer dann, wenn ein neuen Datensatz erstellt oder ein bestehender Datensatz gelöscht wird. Nach der Aktion wird zwar die Visualforce Seite automatisch geöffnet, aber der falsche Tab ist aktiv.

Mit einer kleinen Anpassung bringt man der Visualforce Seite bei, den richtigen Tab beim Öffnen der Seite zu aktivieren.
Das Ergebnis ist im folgenden Videoschnitt zu sehen. Hier sieht man einen Ausschnitt einer Visualforce Seite mit diversen Tabs und das Verhalten der Seite beim Löschen von…