Einfacher scripten mit womodo 7.5

15. November 2017

Im letzten Beitrag haben wir über Verbesserungen in der TML Template Engine im kommenden womodo 7.5 gesprochen. Heute möchten wir einige Verbesserungen in TMLScript vorstellen.

Zwar benötigt ein womodo Template Entwickler in der Regel keinerlei Java Know How. Aber bei einigen Methoden der womodo CMS API merkt man die Java-Herkunft (zu) deutlich. Lange Methodennamen und Parameterlisten sind unhandlich und erfordern bisher das Nachschlagen in der Doku.

Aufgrund des Feedbacks unserer Projektentwickler haben wir einige Methoden und Parameter nun deutlich verschlankt. Dabei haben wir darauf geachtet, daß alle bisherigen Methoden unverändert weiter zur Verfügung stehen. Bestehende Projekte müssen also für ein Update nicht geändert werden.

Datenbankabfragen

Das Absetzen einer Query an das Datenbank Backend benötigt in TMLScript nun nur noch einen Parameter:

WGA.app().query("content.contentclass = 'news'");

Für die allermeisten Abfragen ist das absolut ausreichend. Benötigt man doch einmal spezielle Optionen, können diese in einem optionalen JavaScript Config Objekt übergeben werden:

WGA.app().query("content.contentclass = :klasse", {
max: 100,
p_klasse: "news"
});

Im Config Objekt sind alle Eigenschaften erlaubt, die auch in <tml:query> möglich sind. Inklusive der p_<parameter> zur Übergabe von Query-Parametern wie im obigen Beispiel gezeigt wird.


Iteration über CollectionResult-s

Um einfacher über das Ergebnis einer Datenbankabfrage in TMLScript iterieren zu können, haben wir eine neue Methode each() am CollectionResult Objekt implementiert. Diese macht ein for( ... in ...) oder while(...hasNext()) überflüssig:

WGA.app().query("content.contentclass='news'").each(function(doc){
console.log(doc.TITLE);
})

Die als Parameter an each() übergebene Funktion wird für jedes Element der Collection einmal aufgerufen und erhält das jeweilige Element in Form eines TMLContext Objekts als Parameter.

Die gleiche Methode steht auch in Navigatoren zur Verfügung:

WGA.nav().children().each(function(doc){...})


WGA.urlBuilder() Query Parameter

Der WGA.urlBuilder() ist ein sehr wichtiges Objekt in womodo, weil damit faktische alle Urls in TMLScript berechnet werden. Um einer URL Query-Parameter zu übergeben, verwendet man die Methode setParameter(). 

Bisher mußte man setParameter() für jeden einzelnen Parameter einmal aufrufen. In womodo 7.5 akzeptiert diese Methode nun alternativ ein JavaScript Objekt, um mit einem einzelnen Aufruf alle Parameter zu setzen:

WGA.urlBuilder("/my/path").setParameter({
name: "Walter",
type: ["customer", "partner"]
}).build()

Erzeugt eine URL der Form

/my/path?name=Walter&type=customer&type=partner

Insbesondere ist es nun möglich, Mehrfachwerte als Parameter an die Url zu setzen, indem ein JavaScript Array als Wert übergeben wird.


Mail Objekt JavaScript like

Zum senden von Mails wird in womodo ein Mail-Objekt per WGA.createMail() erzeugt. Dieses Objekt benötigt eine Vielzahl von Eigenschaften, die bisher einzeln gesetzt werden mußten.

In womodo 7.5 können alle wichtigen Parameter in einem einzelnen JavaScript Config Objekt spezifiziert werden:

WGA.createMail({
to: ["user1@company.com", "user2@company.com"],
subject: "Hallo Users",
body: "Welcome ..."
}).send()


Java.Map-s

Einige womodo CMS API Methoden stellen Ergebnisse als Java.Map zur Verfügung oder erwarten eine Map als Parameter.

Eine Java.Map kann in womodo 7.5 per TMLScript wie folgt erzeugt werden:

WGA.createMap();
WGA.createMap({
my: "property"
})

Bisher mußte man zum Lesen und Setzen von Werten in Maps die Methoden get() und put() verwenden. In womodo 7.5 können Map Elemente wie in JavaScript Objekten als Property gesetzt und gelesen werden:

map.name // entspricht map.get("name")
map["name"] // entspricht ebenfalls map.get("name")
map.name="Walter" // entspricht map.put("name", "Walter")
map["name"]="Walter" // dito


Request Eigenschaften

URL Parameter am Request Objekt mußten in TMLScript bisher per WGA.request.getParameter(<name>) gelesen werden. In womodo 7.5 kann auf URL Parameter nun als JavaScript Eigenschaft des Request Objekts zugegriffen werden:

WGA.request.name // entspricht WGA.request.getParameter("name")
WGA.request["name"] // dito