091502CC8D7F487BA52A08145ED03720
  • Thomas Pollinger
  • 29.12.2017
  • DE/EN

Root Cause Analysis: "Unrecognized Guid format"

Es gibt immer wieder Überraschungen, welche Fehlermeldungen hervorbringen, bei denen man sich erstmal eine Weile beschäftigen muss. Wenn man der Meinung ist, man hätte alle Varianten berücksichtigt. Dann wird man meist von den Anwendern mit einer neuen bzw. weiteren Variante im Projektbau überrascht ;)


Regel 19

Der Com-PUTER - Man fragt sich oft, was tut er, so ein Bürocomputer. Doch ist man ein Genie, kennt man sogar das Wie. (Erhard Horst Bellermann)


Meldungen

Severity: Error
Component: Navigation
Category: Application
Source: Reddot.CMS.Rendering.Objects.ObjectLoadManager.GetObject (:0)
Message:
Locals: Project: {GUID}; ProjectVariant: {GUID}; Language(Page): {GUID}; Page(ID/UUID): {ID}; ContentClass: {GUID}; RenderMode: Publish; RequestId: {ID}; 
Reddot.CMS.Rendering.RenderException: Navigation:OutputArea --> Parameter 3 is null
   at Reddot.CMS.Rendering.Objects.NavigationLoader.TryParseParameters(IObjectLoadManager objectLoadManager, IPageRenderingContext context, ObjectItem item, String& areaName, Boolean& useHiddenIndexes, IPage& selectedPage, Boolean& useParallelRenderThreadsForNavigationLevels)
   at Reddot.CMS.Rendering.Objects.NavigationLoader.OnGetObject(String[] objectArray, IObjectLoadManager objectLoadManager, IPageRenderingContext context)
   at Reddot.CMS.Rendering.Objects.ObjectLoadManager.GetObject(String command)
 
------
 
Severity: Warning
Component: Navigation
Category: Application
Source: Reddot.CMS.Rendering.Objects.NavigationLoader.OnGetObject (:0)
Message:
Locals: Project: {GUID}; ProjectVariant: {GUID}; Language(Page): {GUID}; Page(ID/UUID): {ID}; ContentClass: {GUID}; RenderMode: Publish; RequestId: {ID}; 
Reddot.CMS.Rendering.RenderException: Navigation:OutputArea --> Parameter 3 is null
   at Reddot.CMS.Rendering.Objects.NavigationLoader.TryParseParameters(IObjectLoadManager objectLoadManager, IPageRenderingContext context, ObjectItem item, String& areaName, Boolean& useHiddenIndexes, IPage& selectedPage, Boolean& useParallelRenderThreadsForNavigationLevels)
   at Reddot.CMS.Rendering.Objects.NavigationLoader.OnGetObject(String[] objectArray, IObjectLoadManager objectLoadManager, IPageRenderingContext context)
 
------
 
Severity: Error
Component: Navigation
Category: Application
Source: Reddot.CMS.Rendering.Objects.NavigationLoader.OnGetObject (:0)
Message:
Locals: Project: {GUID}; ProjectVariant: {GUID}; Language(Page): {GUID}; Page(ID/UUID): {ID}; ContentClass: {GUID}; RenderMode: Publish; RequestId: {ID}; 
System.FormatException: Unrecognized Guid format.
   at System.Guid.GuidResult.SetFailure(ParseFailureKind failure, String failureMessageID, Object failureMessageFormatArgument, String failureArgumentName, Exception innerException)
   at System.Guid.TryParseGuid(String g, GuidStyles flags, GuidResult& result)
   at System.Guid..ctor(String g)
   at Reddot.CMS.Rendering.Objects.GuidLoader.OnGetObject(String[] objectArray, IObjectLoadManager objectLoadManager, IPageRenderingContext context)

Ursache

Die Ursache für diese Fehlermeldung ist recht einfach. Es wurde auf eine nicht korrekte GUID (bzw. das Format der GUID war fehlerhaft) an einen Rendertag (bei Guid:...) übergeben. In diesem Fall war es eine einfache Sache, nachdem man es gefunden hatte. Es wurde per Listenelement die GUID, auf die verwiesen wurde, hochgereicht. Doch in diesem Fall war das Ziel (also die Seite), zum Zeitpunkt der Publizierung nicht gültig (Verlinkungs- und Erscheinungszeitraum abgelaufen). Somit wurde leer als GUID übermittelt und damit ist das Format nicht korrekt und der Parameter 3 leer. Da es um den ganzen Block keinen Konditional gab, der normalerweise dafür sorgt das solche Probleme nicht auftreten können, wurden die o.g. Fehlermeldungen im wsms.log dokumentiert:

<html>
    <head>
        <title>GeneratorPage</title>
    </head>
    <body>
        <%!! Store:Set(wasPageFound,Str:no) !!%>
        <%!! Store:Set(SelectedPageId,Guid:<!IoRangeList><%infoPageGUID%><!IoRangeDynLink><%listNavigation%><!/IoRangeDynLink><!/IoRangeList>) !!%>
        <%!! Navigation:OutputArea(String:navigationPublishGeneratorPage-Position, Bool:True, Guid:<!IoRangeList><%infoPageGUID%><!IoRangeDynLink><%listNavigation%><!/IoRangeDynLink><!/IoRangeList>, Bool:True, Bool:False) !!%>
        <reddot:cms>
            <if>
                <query valuea="Store:Get(wasPageFound)" operator="==" valueb="Str:yes">
                    <htmltext><%!! Store:Get(SelectedDepth) !!%>-<%!! Store:Get(SelectedLevelCount) !!%> / <%!! Store:Get(SelectedDepth).ToString().Insert(Int:0,navigationPublishGeneratorPage-StartLevel) !!%><br/><br/></htmltext>
                    <htmltext><%!! Navigation:OutputArea(Store:Get(SelectedDepth).ToString().Insert(Int:0,navigationPublishGeneratorPage-StartLevel), Bool:True, Guid:<!IoRangeList><%infoPageGUID%><!IoRangeDynLink><%listNavigation%><!/IoRangeDynLink><!/IoRangeList>, Bool:True, Bool:False) !!%></htmltext>
                </query>
                <query type="else">
                    <htmltext>Startpage (Guid:<!IoRangeList><%infoPageGUID%><!IoRangeDynLink><%listNavigation%><!/IoRangeDynLink><!/IoRangeList>) was not found or is not visible/valid!<br>Nothing will be published!</htmltext>
                </query>
            </if>
        </reddot:cms>
    </body>
</html>

Lösung

Einfach um den kompletten Block einen <!IoRangeConditional>...<!/IoRangeConditional> setzen: 

<html>
    <head>
        <title>GeneratorPage</title>
    </head>
    <body><!IoRangeConditional>
        <%!! Store:Set(wasPageFound,Str:no) !!%>
        <%!! Store:Set(SelectedPageId,Guid:<!IoRangeList><%infoPageGUID%><!IoRangeDynLink><%listNavigation%><!/IoRangeDynLink><!/IoRangeList>) !!%>
        <%!! Navigation:OutputArea(String:navigationPublishGeneratorPage-Position, Bool:True, Guid:<!IoRangeList><%infoPageGUID%><!IoRangeDynLink><%listNavigation%><!/IoRangeDynLink><!/IoRangeList>, Bool:True, Bool:False) !!%>
        <reddot:cms>
            <if>
                <query valuea="Store:Get(wasPageFound)" operator="==" valueb="Str:yes">
                    <htmltext><%!! Store:Get(SelectedDepth) !!%>-<%!! Store:Get(SelectedLevelCount) !!%> / <%!! Store:Get(SelectedDepth).ToString().Insert(Int:0,navigationPublishGeneratorPage-StartLevel) !!%><br/><br/></htmltext>
                    <htmltext><%!! Navigation:OutputArea(Store:Get(SelectedDepth).ToString().Insert(Int:0,navigationPublishGeneratorPage-StartLevel), Bool:True, Guid:<!IoRangeList><%infoPageGUID%><!IoRangeDynLink><%listNavigation%><!/IoRangeDynLink><!/IoRangeList>, Bool:True, Bool:False) !!%></htmltext>
                </query>
                <query type="else">
                    <htmltext>Startpage (Guid:<!IoRangeList><%infoPageGUID%><!IoRangeDynLink><%listNavigation%><!/IoRangeDynLink><!/IoRangeList>) was not found or is not visible/valid!<br>Nothing will be published!</htmltext>
                </query>
            </if>
        </reddot:cms>
    </body><!/IoRangeConditional>
</html>

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