Questions & Answers

SOLVED
JohannesSpeckma
I'm new here

Release Status

Jump to solution

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

0 Kudos
23 Replies

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 Kudos

Woher holst Du Dir denn den rootFolder? Bzw. in welchem Context wird Dein Script aufgerufen?

0 Kudos

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 Kudos

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

Peter
0 Kudos
christian_vogel
Returning Observer

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 Kudos

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 Kudos

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 Kudos

Wie wรคre es mit IdProvider.getReleaseRevision(); ?

http://www.e-spirit.com/odfs42/access/de/espirit/firstspirit/access/store/IDProvider.html#getRelease...

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 Kudos

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

Peter
0 Kudos

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 Kudos

Type a product name