Eine VisualForce Page stellt diverse statische und dynamische Informationen dar.
Mit statisch bezeichne ich Daten, die vom Controller beim Laden der Page berechnet werden. "Dynamisch" impliziert den Einsatz von Benutzerinteraktionen. Dabei werden Abfragen gegen die Datenbank gesendet, um aktuelle Content-bezogene Informationen zu erhalten.
Die Abfragen sind in Form von Methoden und Funktionen im Controller integriert. Einige davon sind
Mit statisch bezeichne ich Daten, die vom Controller beim Laden der Page berechnet werden. "Dynamisch" impliziert den Einsatz von Benutzerinteraktionen. Dabei werden Abfragen gegen die Datenbank gesendet, um aktuelle Content-bezogene Informationen zu erhalten.
Die Abfragen sind in Form von Methoden und Funktionen im Controller integriert. Einige davon sind
public, die Anderen sind static .
Ziel: sowohl public als auch static führen teilweise dieseleben Operationen durch. Ein guter Entwickler verzichtet auf die Redundanz des Codes und entwickelt eine neue Funktion, die von den beiden oben genannten Funktionen aufgerufen wird.
Problem: eine neue Funktion zu entwickeln und den Code auszulagern stellt noch kein Problem dar. Erst beim Versuch, die neue Funktion aufzurufen, wird die Divergenz der beiden Typen public und static deutlich. Ein Zugriff auf die neue Funktion scheitert.
Lösung: anstatt einer neuen Funktion wird eine neue Klasse eingesetzt, deren Konstruktor die ganze Arbeit übernimmt.
Beispiel:
public
String getContent(){
objCase ist eine Klassenvariable und bereits vom Construktor initiiert
String
sContent = 'ein sehr langer Text mit vielen Platzhaltern, die ersetzt werden müssen';
ReplacePlaceholder
rp = new
ReplacePlaceholder(sContent, objCase);
return
rp.replacedString;
}
@RemoteAction
global
static
String replaceString(String sTextBlock, String sCaseID) {
//
Get Fields
String searchCase = 'SELECT Subjec__c, Body__c FROM Case WHERE
ID
=:sCaseID limit
1';
List<Case>
listCase = database.query(searchCase);
Case
obj = listCase[0];
ReplacePlaceholder
rp = new
ReplacePlaceholder(sTextBlock, obj);
return
rp.replacedString;
}
/**********************************
GLOBAL
CLASS ReplacePlaceholder
***********************************/
global
class
ReplacePlaceholder{
public
String replacedString;
// Constructor
public
ReplacePlaceholder(String sText, Case
obj){
replacedString
= sText;
//
Find place holders in text
list<String>
lstPlaceholder = new
list<String>();
for
(String txt : replacedString.split('\\{!Case.')){
String
fieldName = txt.contains('}')
? txt.substringBefore('}')
: '';
if(fieldName
!= ''){
String
fieldValue = obj.get(fieldName)
== null
? '' :
String.valueOf(obj.get(fieldName));
replacedString
= replacedString.replaceAll('\\{!Case.'
+ fieldName + '\\}',
fieldValue);
}
}
}
Kommentare
Kommentar veröffentlichen