Release Status
Author: JohannesSpeckma
Publication Date: 6/17/2013 11:06
Hallo,
ich versuche gerade für die Erstellung einer XML-Sitemap die Seiten auszuschließen, welche im aktuellen Stand nicht freigegeben sind. Ich dachte über PageRef.getReleaseStatus() (SiteStore) wäre dies zu realisieren, bekomme aber als Rückgabewert immer 0. Anscheinen prüft die Funktion, ob es einen allegemeinen freigegebenen Stand gibt. Ist es nun möglich eine Seite innerhalb der Struktur auf "aktuell freigegeben" zu prüfen?
Danke und Viele Grüße
Tags: release, releasestatus, sitemap, status, xml
-
Author: christian_vogel - 6/21/2013 7:50
Dann kannst du einfach über den Ordner und Seiten im Release oder Vorschau-Zustand iterieren und darauf vertrauen, dass du bei der Generierung nur freigegebene Seiten am Wickel hast.
store = context.project.getUserService().getStore(Store.SITE_STORE,context.isRelease());
Du brauchst dann die Prüfung, ob die Seite freigegeben ist, gar nicht mehr.
0 -
Author: Peter_Jodeleit - 6/17/2013 11:35
Die Prüfung soll im aktuellen Stand erfolgen?
0 -
Author: JohannesSpeckma - 6/17/2013 12:14
Hallo Herr Jodeleit,
danke erstmal für die rasche Antwort. Ja, aktueller Stand ist korrekt.
Viele Grüße
0 -
Author: Peter_Jodeleit - 6/17/2013 12:36
Dann ist "getReleaseStatus()" die korrekte Methode. Falls du den Freigabestatus der zugehörigen Inhaltsseite haben willst, musst du dir über "getPage()" diese erst holen (insgesamt also "pageRef.getPage().getReleaseStatus()" aufrufen).
0 -
Author: JohannesSpeckma - 6/19/2013 9:56
Hallo Donato,
wir verwenden zur Zeit noch die Version 4.2.461. Ist dies ein BUG in der 4er Version? Ist da etwas bekannt?
Gruß
Johannes
0 -
Author: marro - 6/19/2013 9:35
Hallo Johannes,
welche FirstSpirit-Version verwendet ihr? Ich habe es gerade mit 5.0 ausprobiert und ich bekomme bei einer in der Struktur neu angelegten Seite den korrekten Wert 3 bei der Abfrage des Freigabestands über getReleaseStatus(). Sobald ich die Seite freigabe, bekomme ich den Wert 0.
Viele Grüße
Donato
0 -
Author: JohannesSpeckma - 6/18/2013 14:05
Hallo Herr Jodeleit,
das Problem ist, dass wenn ich in der Struktur eine neue Seite anlege, der Status dieser Seite 0 ist, als "Released", obwohl ich diese weder freigegeben, noch publiziert habe. Meines Verständnisses müsste der Wert 3 sein, also "Never Released"!? Gibt es eine andere Möglichkeit eine Unterscheidung zwischen Strukturseiten, hinsichtlich Freigabestand zu bekommen?
Viele Grüße
0 -
Author: marro - 6/19/2013 10:39
Hallo Johannes,
habe es jetzt auch mal mit 4.2.461 probiert und bekomme auch dabei die richtigen Werte.
Den Status lasse ich mir über ein Skript ausgeben, welches ich im Client auf der PageRef aufrufe:
context.logInfo("Status: " + context.getStoreElement().getReleaseStatus());Gruß
Donato
0 -
Author: JohannesSpeckma - 6/19/2013 11:00
Hallo Donato,
in meinem Skript wende ich die Funktion getReleaseStatus() auf ein PageRef Object vom Typ PageRefImpl aus. Ist dies soweit korrekt? Das Problem ist aber, wenn ich diese Seite in der Struktur neu anlege, sie nicht freigebe/publiziere und mir dann mit getRevision() auf der pagref mir die Revision anzeigen lasse, dann steht der Parameter "status = 0". Also die Ausgabe ist korrekt, allerdings wird der Status beim Anlegen der Seitenreferenz falsch gesetzt...!???
Gruß
Johannes
0 -
Author: marro - 6/19/2013 11:14
Hallo Johannes,
kannst Du Dein Skript vielleicht einmal hier posten? Zumindest die relevanten Teile wie z.B. Holen der PageRef, Abfrage des Status.
Und nur um ganz sicher zu gehen: Wir Deine neu angelegte Seite im Client denn rot ( = nicht freigegeben) dargestellt?
Gruß
Donato
0 -
Author: JohannesSpeckma - 6/19/2013 11:22
Hallo Donato,
die Seite wird rot angezeigt, klar. Hier ein Ausschnitt aus dem Skript:
"rootFolder" ist vom Typ StoreElement und beinhaltet mehrere Subfolder und Unterseiten...
pagerefs = rootFolder.getChildren(PageRef.class, true);
pagerefIterator = pagerefs.iterator();
while (pagerefIterator.hasNext()) {
try {
pageref = pagerefIterator.next();
context.logInfo("ReleaseStatus: "+pageref.getReleaseStatus()+" Refname: "+pageref.getUid());
...
} catch (Exception e) {
context.logError("Exception found by iteration through the pages: ", e);
}
}
Die Referenznamen aller Seiten stimmen, d. b. dass korrekt durch die Strukturseiten iteriert wird. Allerdings bekomme ich mit pageref.getReleaseStatus() immer 0 obwohl die neu angelegte Seite (Rename "testseite" stimmt überein) noch nie freigegeben wurde.
Danke und Gruß
0 -
Author: JohannesSpeckma - 6/19/2013 12:05
Hallo,
ich muss kurz ausholen. Bei dem Projekt handelt es sich um ein altes Projekt, in dem sich mehrere Mandanten befinden, die den gleichen Vorlagensatz verwenden. Das Skript wird für EINEN Mandanten ausgeführt, d.h. ich muss mir den RootFolder eines Mandanten holen (Deutschland, Schweiz etc.) und die in diesem RootFolder befindlichen Seiten in der Sitemap ausgeben. Folgendermaßen hole ich mir den rootFolder für z.B. duie Schweiz:
Context: SiteProduction.
store = context.project.getUserService().getStore(Store.SITE_STORE,false); (holen aller Folder Schweiz, Deutschland...)
childrenList = store.getChildren().toList();
childrenIterator = childrenList.iterator();
rootFolder = null;
//iterate throug all children...
while(childrenIterator.hasNext()){
child = childrenIterator.next();
//...and save the folder equals to the actual mandant (aktuelle Mandant = Schweiz)
if(child.getName().equals(mandant)){
rootFolder = child;
break;
}
}
Gruß
Johannes
0 -
Author: marro - 6/19/2013 11:32
Woher holst Du Dir denn den rootFolder? Bzw. in welchem Context wird Dein Script aufgerufen?
0 -
Author: JohannesSpeckma - 6/20/2013 10:34
Hallo Herr Vogel,
bzgl. Ihres Kommentars:
"...Dann arbeit es genau mit einer bestimmten Revision des Sitestores, die zum Zeitpunkt des Auftragsstart gültig ist. Normalerweise arbeitet es auch nur mit der Releaseversion des Sitestores. D.h. es kennt nur freigegebene Zustände...."
Auch eine neu angelegte Seite, welche noch NIE freigegeben wurde, hat einen freigegebenen Status?? Kenne Sie eine Möglichkeit, vl. einen Workaround, wie man erkennt, ob eine Seite schonmal freigegeben wurde?
Danke und Gruß
0 -
Author: JohannesSpeckma - 6/20/2013 8:41
Hallo Herr Vogel,
das Skript wird über CMS_RENDER in einer Seitenvorlage aufgerufen und gibt mir eine Liste (schon gefilterter) PageRefs zurück über die ich in der Seitenvorlage iteriere (Die Seite -> XML-Sitemap publiziere ich um das Skript auszuführen). Die entsprechende Url baue ich mir aus der entsprechenden Domain+Dateiname zusammen. Klappt soweit auch, nur dass die Filterung eben aufgrund des fehlers beim ReleaseStatus im SKRIPT nicht wie gewünscht funktioniert.
Viele Grüße
Johannes Speckmann
0 -
Author: christian_vogel - 6/20/2013 8:28
Wird das Skript während der Generierung ausgeführt?
Dann arbeit es genau mit einer bestimmten Revision des Sitestores, die zum Zeitpunkt des Auftragsstart gültig ist. Normalerweise arbeitet es auch nur mit der Releaseversion des Sitestores. D.h. es kennt nur freigegebene Zustände.
Funktioniert das Skript in der Vorschau?
Wie arbeitest du mit dem Skript weiter, wenn du den Rootknoten für deine Sitemap bestimmt hast?
Verwendest du dann die Kindelemente zur Generierung der URLs oder nur die Referenznamen und damit evtl. doch den "ausschließlich" freigegebenen Sitestore.
Ok, das sind jetzt nur ein paar Gedanken, die vielleicht auch gar nicht weiterhelfen. Aber das sind die Überlegungen die ich ansstellen würde, wenn ich so eine Sitemap generieren müsste.
Grüße
Christian
0 -
Author: Peter_Jodeleit - 6/19/2013 14:13
Off-topic:
childrenList = store.getChildren().toList();
Das sollte auf jeden Fall vermieden werden. "store.getChildren()" ist vom Typ "java.lang.Iterable", da kann man direkt drüber iterieren, ohne die Umwandlung in eine Liste im Hauptspeicher - was dir ab einer gewissen Projekt-Größe mit einem "OutOfMemoryError" um die Ohren knallt...
0 -
Author: JohannesSpeckma - 6/20/2013 15:41
Hallo Herr Jodeleit,
Ziel ist es eine XML-Sitemap zu publizieren, welche alle Seiten ausgibt, die schon einmal freigegeben wurden. Die Seiten die neu angelegt sind und noch nicht freigegeben wurden, sollen ausgschlossen werden (Release Status). Für die Sitemap habe ich mir eine Vorlage erstellt, in welcher ich durch die Ausführung des Skriptes eine Liste der relevanten Seiten bekomme (über CMS_RENDER übergebe ich dem Skript eine Liste, welche innerhalb des Skriptes mit den entsprechenden PageRefs befüllt wird. Diese Liste werte ich in der Vorlage wiederum aus). Ich hoffe der ansatz ist korrekt...
Viele Grüße
0 -
Author: Peter_Jodeleit - 6/20/2013 12:17
Meine erste Frage war, ob du auf dem aktuellem Stand arbeitest. Die Antwort war ja. Allerdings bin ich mir nach deinen weiteren Kommentaren nicht mehr so sicher, ob das auch stimmt:
das Skript wird über CMS_RENDER in einer Seitenvorlage aufgerufen
In der Generierung arbeitet man (wie korrekt von meinen Vorrednern angemerkt) immer auf freigegebenen Daten, nur bei der Vorschau ist das variabel.
Auch eine neu angelegte Seite, welche noch NIE freigegeben wurde, hat einen freigegebenen Status??
Natürlich nicht, solche Seiten werden nicht generiert.
Anscheinend suchst du nach einer Möglichkeit, innerhalb einer Generierung solche Seiten zu erkennen, die gegenüber ihrem freigegebenem Stand geändert wurden? Wobei sich mir die Frage stellt, ob (und wenn ja wieso) das innerhalb der Generierung sein muss..
0 -
Author: christian_vogel - 6/20/2013 10:44
Wie wäre es mit IdProvider.getReleaseRevision(); ?
Diese Methode kann man auf eine Referenz aufrufen. Wenn sie Null zurückgibt, dann wurde die Referenz noch nie freigegeben.
Dann gibt es dazu noch die Methode getRevision(), die die akutelle Revision, die gerde beim Deployment gültig ist rausgibt. Wenn die aktuelle Revision größer ist als die Release-Revision, dann wurde die Referenz nach der Seite nochmal bearbeitet.
Bei einer normalen Generierung, die ja den freigegeben Zustand generiert, erwarte ich jedoch das die Referenz immer genau die Release-Revision hat.
Ich habe die Methoden noch nicht selbst ausprobiert, aber vielleicht klappt es damit.
Grüße
Christian
0 -
Author: JohannesSpeckma - 6/20/2013 17:37
Hallo,
Die Standard Navigation Function kann meines Wissens nur Seiten anzeigen, wo die ParentFolder Optionen "Im Navigationsmenü anzeigen" und "Navigationsmenü in Übersiht anzeigen" selektiert ist. Ich benötige aber auch Seiten in meiner Sitemap die innerhalb der Ordner liegen, wo die erwähnten Optionen nicht selektiert sind.
0 -
Author: christian_vogel - 6/20/2013 15:57
Reicht dann nicht die normale Generic Navigation Funktion im Header einer Vorlage komplett aus?
Diese Funktion kann nicht nur die Menus (also Ordner der Struktur) generieren sondern auch alle Seiten, sogar die Datensatzdetailseiten. Diese Funktion generierte garantiert immer nur den freigegebenen Zustand.
Oder benötigen Sie doch etwas anderes?
0 -
Author: jan-tilo - 6/20/2013 15:58
Hallo Johannes,
grundsätzlich stelle ich mir die Frage, warum die Sitemap über ein Script erzeugt werden muss und warum Du nicht die Standard NavigationFunction von FS benutzt!?
Aber bei Deinem Script holst Du Dir ja den Sitestore im nicht freigegebenen Zustand:
store = context.project.getUserService().getStore(Store.SITE_STORE,false);
Somit ist das beobachtete Verhalten erklärbar. Wenn Du Dir den freigegebenen Stand holst, sollte es gehen.
Viele Grüße
Jan Tilo
0
Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.
Kommentare
23 Kommentare