- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Release Status
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
- Labels:
-
Developers
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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ร
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Woher holst Du Dir denn den rootFolder? Bzw. in welchem Context wird Dein Script aufgerufen?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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...
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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ร
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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..
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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