A87D320B838E48D8A2E9D2AEC5AEC1E5
  • Mirka Santur
  • 30.08.2019
  • DE

RenderTags: Komma im Replace - "Bug"?

Fließkomma-Zahlen in Beträge umformatieren ist eine kleine Herausforderung, wenn man dies mit einem RenderTag durchführen möchte. Hier der Trick und das Warum…

Wir müssten für ein Formular Geldbeträge im CMS pflegbar machen und mit diesen dann aber auch im JavaScript Summen berechnen. JavaScript erwartet fürs Rechnen eine Fließkommazahl, welches mit einem Punkt angegeben werden müssen, dargestellt wird das Ganze aber mit einem Komma. Somit haben wir uns mit dem Kunden drauf geeinigt, dass im Platzhaltern Fließkommazahl eingetragen werden. Und via CMS an den Stellen, wo der Betrag ausgegeben wird, wollten wir "einfach" den Punkt durch ein Komma ersetzen.

Da wir kein PreExecute verwenden und das Ganze aber schon direkt bei der Publizierung rendern wollten, fiel die Entscheidung auf RenderTags. Ein Replace ist schnell geschrieben:

<%!! Context:CurrentPage.Elements.GetElement(String:wert).GetHtml().Replace(String:., String:,) !!%>

Leider wird dieses Replace einfach nicht ausgeführt. Sobald nach dem String: ein Komma steht, passiert einfach nichts.

Ähnliches Verhalten wurde in der Community schon bei den CustomRenderTags beobachtet. Hier der Grund:

Beim Parsen der RenderTags wird alles zwischen den Klammern mit .Split(',') zerteilt, um die einzelnen Parameter zu bestimmen. Was bei dem oben aufgeführten Replacement dazu führt, dass drei Parameter gefunden werden (String:., String: und NULL). Die Replace-Funktion, die im Nachgang ausgeführt wird, erwartet aber zwei Übegabeparametern und wird somit nicht ausgeführt.

Man kann das Ganze umgehen, wenn man das Komma im Replace maskiert:

<%!! Context:CurrentPage.Elements.GetElement(String:wert).GetHtml().Replace(String:., Escape:HtmlDecode(&#44;)) !!%>

&#44; ist ein Komma als HTML-Entität. 


Über den Autor:
Mirka Santur

... ist Senior Developer und technischer Projektleiter bei der I-D Media AG in Köln. Seit 1999 betreut sie zusammen mit ihrem Team OpenText- (vormals RedDot-) basierte Webseiten nationaler und internationaler Kunden.
Neben dem klassischem Content-Klassen und Projektbau entwickelt sie Erweiterungen in Form von Plug-Ins und führt Proof of Concepts durch um neue Technologien und Wege im CMS zu etablieren.