091502CC8D7F487BA52A08145ED03720
  • Thomas Pollinger
  • 29.06.2018
  • DE/EN

Root Cause Analysis: "Index was outside the bounds of the array"

RenderTags sind so eine Sache, vorallem wenn man nicht alle System- und Seitenzustände berücksichtigt. Dann kann es gerne mal zu Fehlermeldungen im wsms.log kommen, bei denen man eine Weile verzweifeln kann. Jedoch wenn man dann die Ursache gefunden hat, ist es auch dann wieder klar warum es dazu kommen konnte. Wie in diesem Fall...


Regel 43

Deine Freunde und Familie haben ein völlig falsches Bild von deiner Arbeit im Kopf. (Entwicklerweisheit)


Verhalten

Diese nachfolgenden Fehlermeldung kommt aus dem wsms.log:

Locals: Project: {GUID}; ProjectVariant: {GUID}; Language(Page): {GUID}; Page(ID/UUID): {ID}; ContenClass: {GUID}; RenderMode: SmartEdit; RequestId: {ID}; 
System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.Array.InternalGetReference(Void* elemRef, Int32 rank, Int32* pIndices)
   at System.Array.GetValue(Int32[] indices)
   at Reddot.CMS.Rendering.Objects.ObjectReflector.GetObject(String[]& objectArray, Int32 startDepth, Object value, IObjectLoadManager objectLoadManager)

Ursache

Wenn man im SmartEdit die unterschiedlichen Modi wie "SmartEdit-Modus, Seite offenen und Seite geschlossen" nutzt. Muss man im Hinterkopf behalten, dass z.B. solche Abfrage in eine Fehlermeldung laufen können:

<%!! Escape:HtmlEncode(CurrentPage.GetElementById(text)) !!%>

da noch nicht alle Elemente befüllt sind - und der SmartEdit-OpenPage-Mode grundsätzlich alle Elemente in der Seite für die Bearbeitung darstellt. Das kann zu unvorhergesehenen Zuständen im System führen und dann in den o.g. Fehlermeldungen resultieren. Vorallem bei Kontrollstrukturen (if/else) bzw. wenn man auf Elemente, Indixes oder Objekte zugreifen möchte, welche einfach noch nicht den erwarteten Zustand haben. ;)


Lösung

Die Lösung ist einfach und leicht zu implementieren. Dazu müssen sich alle Abfragen bzw. Elemente in einen kontrollierbaren und definierten Zustand befinden - und dies je Modus:

  • Seitenvorschau
  • SmartEdit-Modus
  • SmartEdit-Modus Seite offen
  • SmartEdit-Modus Seite geschlossen

Über den Autor:
Thomas Pollinger

... 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.

       

Downloads

 

QuickLinks

 

Channel