Seit Release 11.2 SP2 HF3 (11.2.2.725) gibt es eine Menge an neuen Escape RenderTags, die einen bei der Erstellung von Content-Klassen und Projekten unterstützen.
Hier ein Auszug aus den Release Notes:
Element values and strings can be transformed via RenderTag. The following transformations are available:
Example UrlEncode:
If the headline of the current page is "My homepage", the following expression results in the string "My homepage":
<%!! Context:CurrentPage.Headline.UrlEncode() !!%>
Please note that some elements have the option “Do not convert characters to HTML”. If this option is not checked, element values are converted to HTML. If using the HtmlEncode method as described above on those element values, the value will be encoded twice.
Mein Kollege hat rausbekommen, dass wenn man diesen RenderTag nutzt:
<%!! Context.CurrentPage.GetElementByName(elementName).Value.JavaScriptEncode() !!%>
wird für JavaScript korrekt encodiert. Verwendet werden die Notationen \xHH (ASCII Hex) und \uHHHH (Unicode Hex) (H= hexadezimalers Zeichen). Für JSON allerdings nicht, da in JSON kein \x notiert werden darf. Nur \u ist ein gültig encodiertes Zeichen.
Man kann dies aber einfach ersetzen, da die ersten 255 Zeichen in der \u00HH Notation gleich sind. Somit muss für einen JSON kompatiblen String noch ein .Replace(Str:\x, Str:\u00) angefügt werden:
<%!! Context.CurrentPage.GetElementByName(elementName).Value.JavaScriptEncode().Replace(Str:\x,Str:\u00) !!%>
Hinweis: In der Online-Hilfe und den PDF-Unterlagen wird immer noch die alte Notation des Encodings verwendet z.B. <%!! Escape:HtmlEncode(...) !!%>. Diese bringt aber Risiken, vor allem wenn man z.B. mit Standardfeldern in Content-Klassen arbeitet, welche nicht immer befüllt werden müssen - sprich leer sind. Dann erzeugt die alte Notation des Escape-Providers im wsms.log Fehler. Da ein Encoding auf "NULL" nicht zulässig ist. Es empfiehlt sich auf jeden Fall, nur noch die neue Schreibweise zu verwenden. Da diese in den geschilderten Fehlerfall nicht reinlaufen kann.
Siehe dazu den Artikel: Root Cause Analysis: "EscapeLoader.OnGetObject ... Object reference not set to an instance of an object."
Die neuen Ecoding-Funktion sind sehr hilfreich und ergänzen sich sehr gut. Jedoch sind diese noch nicht vollständig für die heutigen bzw. aktuellen Ansprüche. Ein z.B. Base64Encode/Decode, MD5Encode/Decode (also ein Encrypt/Decrypt, mit bekanntem SharedSecretKey oder ähnlichem) oder ein JSONEncode/Decode wären noch eine sinnvolle Ergänzung :)
... ist Senior Site Reliability Engineer bei der Vodafone GmbH in Düsseldorf. Seit dem Jahr 2007 betreut er zusammen mit seinen Kollegen die OpenText- (vormals RedDot-) Plattform Web Site Management für die deutsche Konzernzentrale.
Er entwickelt Erweiterungen in Form von Plug-Ins und PowerShell Skripten. Seit den Anfängen in 2001 (RedDot CMS 4.0) kennt er sich speziell mit der Arbeitweise und den Funktionen des Management Server aus.