aVogt
Returning Creator

Gespeicherte URL's zurücksetzen (Recht/als Script)

Jump to solution

Hallo,

an welches Recht ist die Aktion "gescpeicherte URL's zurücksetzen" gekoppelt (siehe Anhang)?

Hintergrund:

Es wird gewünscht, dass bei einigen Medien das Datum der Erstellung im Dateinamen mit angegeben werden soll. Beim Hochladen einer neuen Datei muss dann der Dateiname angepasst werden. Dieser wird aber erst verwendet, wenn die gespeicherte URL zurückgesetzt wurde.

Kann man das zurücksetzen der gespeicherten URL's auch per Script vor der Veröffentlichung durchführen?

Danke für Tipps.

Grüße

Andreas

FS5.2R4

1 Solution

Accepted Solutions
thomas_ritter
I'm new here

Hallo Andreas,

soweit ich weiß muss dazu Admin sein.

Kann man das zurücksetzen der gespeicherten URL's auch per Script vor der Veröffentlichung durchführen?

Ja kann man. Hier ein Skript dazu:

import de.espirit.firstspirit.access.*;

import de.espirit.firstspirit.access.store.Store;

import de.espirit.firstspirit.access.store.ContentProducer;

/* GLOBAL VARIABLES */

projectId       = context.getProject().getId();

project         = connection.getProjectById(projectId);

userService     = project.getUserService();

languages       = project.getLanguages();

templateSets     = project.getTemplateSets();

globalStore     = userService.getStore(Store.Type.GLOBALSTORE);

urlProperties     = globalStore.getUrlProperties();

/* #### reset all stored urls of the project #### */

boolean resetStoredUrls() {

    int counter = 0;

    try {

       

        urlProperties.setLock(true);

        e       = context.getUserService().getStore(Store.Type.SITESTORE, true, false);

        amountOfResets = urlProperties.resetStoredUrls(e);

       

        for (int j = 0; j < languages.size(); j++) {

            currentLang = languages.get(j);

           

            for (int i = 0; i < templateSets.size(); i++) {

                currentSet = templateSets.get(i);

                if (e instanceof ContentProducer) {

                    urlString = e.getStoredUrl(currentLang, currentSet, null);

                    context.logInfo("Resetting " + urlString);

                } else {

                    urlString = e.getStoredUrl(currentLang, currentSet);

                }

                if (urlString != null) {

                    urlProperties.setStoredUrl(null, e, currentLang, currentSet, null);

                    counter++;

                }

            }

        }

        urlProperties.save();

        urlProperties.setLock(false);

        //set current revision

        revision = urlProperties.getRevision();

        context.setStartTime(new Date(revision.getCommitOrCreationTime()));

        counter = counter + amountOfResets;

        context.logInfo(counter + " URLs successfully deleted for revision " + revision.getId());

        return true;

    } catch (Exception e) {

        context.logError("Problem resetting URLs " + e);

        return false;

    }

}

/* Start programm*/

resetStoredUrls();

Damit das Skript funktioniert, muss unter "Eigenschaften" eine eigene Verbindung aufgebaut werden.

LG Thomas

View solution in original post

14 Replies
thomas_ritter
I'm new here

Hallo Andreas,

soweit ich weiß muss dazu Admin sein.

Kann man das zurücksetzen der gespeicherten URL's auch per Script vor der Veröffentlichung durchführen?

Ja kann man. Hier ein Skript dazu:

import de.espirit.firstspirit.access.*;

import de.espirit.firstspirit.access.store.Store;

import de.espirit.firstspirit.access.store.ContentProducer;

/* GLOBAL VARIABLES */

projectId       = context.getProject().getId();

project         = connection.getProjectById(projectId);

userService     = project.getUserService();

languages       = project.getLanguages();

templateSets     = project.getTemplateSets();

globalStore     = userService.getStore(Store.Type.GLOBALSTORE);

urlProperties     = globalStore.getUrlProperties();

/* #### reset all stored urls of the project #### */

boolean resetStoredUrls() {

    int counter = 0;

    try {

       

        urlProperties.setLock(true);

        e       = context.getUserService().getStore(Store.Type.SITESTORE, true, false);

        amountOfResets = urlProperties.resetStoredUrls(e);

       

        for (int j = 0; j < languages.size(); j++) {

            currentLang = languages.get(j);

           

            for (int i = 0; i < templateSets.size(); i++) {

                currentSet = templateSets.get(i);

                if (e instanceof ContentProducer) {

                    urlString = e.getStoredUrl(currentLang, currentSet, null);

                    context.logInfo("Resetting " + urlString);

                } else {

                    urlString = e.getStoredUrl(currentLang, currentSet);

                }

                if (urlString != null) {

                    urlProperties.setStoredUrl(null, e, currentLang, currentSet, null);

                    counter++;

                }

            }

        }

        urlProperties.save();

        urlProperties.setLock(false);

        //set current revision

        revision = urlProperties.getRevision();

        context.setStartTime(new Date(revision.getCommitOrCreationTime()));

        counter = counter + amountOfResets;

        context.logInfo(counter + " URLs successfully deleted for revision " + revision.getId());

        return true;

    } catch (Exception e) {

        context.logError("Problem resetting URLs " + e);

        return false;

    }

}

/* Start programm*/

resetStoredUrls();

Damit das Skript funktioniert, muss unter "Eigenschaften" eine eigene Verbindung aufgebaut werden.

LG Thomas

Hallo Thomas,

Danke.

Aber bei mir ist der URLString immer null. Über die languages und templateSets wird iteriert.

Ich habe Deinen Code als Script vor der Generierung im Auftrag eingefügt. In dem generierungsscript werden  für die Pfaderzeugung "Advanced URLs" verwendet.

Grüße

Andreas

0 Kudos

Hallo Andreas,

es sind aber definitiv gespeicherte URLs vorhanden?

Zu sehen wenn du in der Struktur auf eine Seite gehst, "Alt + P" drückst und im Tab "Gespeicherte URLs" schaust.

lg thomas

0 Kudos

Sind es -> Anlage.

Ich habe Fs5.2 im Einsatz

Grüße

0 Kudos

Hm, komisch.

Hast du mal versucht das Skript direkt in FS auszuführen?

Zeile 8 ändern in:

project     = context.getProject();

Kommt irgendwann ein Fehler in Zeiel 50, aber die URLs hat er gelöscht.

Ich habe auch FS 5.2 mit der neuster Version im Einsatz und bei mir funktioniert es ohne Probleme.

Hast du auch eine eigene Verbindung aufgebaut mit dem "Admin" User oder einem User der Adminberechtigungen hat?

siehe screenshot

reseturls.jpg

0 Kudos

hm, als Script im SiteArchitekt funktioniert es (bei Alt + P ist der Reiter gesp. URL dann leer ) .

Die Verbindung sollte auch passen (mit dem Nutzer vorher hatte ich eine Permissionmeldung bekommen) ...

Werde mal suchen, bestimmt wieder ein kleiner Fehler, den ich grad übersehen habe ..

Danke, werde es (hoffentlich) schon noch hinbekommen.

Grüße

Andreas.

0 Kudos
aVogt
Returning Creator

Keine Ahnung, warum es jetzt geht. Eigenartig.

Hast Du es für Medien auch umgesetzt?

Da klappt es bei mir nur, wenn ich mir jedes medium einseln vornehme.

Grüße

Andreas

0 Kudos

Für den MediaStore haben wir es nicht umgesetzt, da wir ein DAM-System verwenden, das die Medien direkt ausliefert und nicht über FS.

Ich denke um das auch für die Medien anzupassen musst du das ändern:

e = context.getUserService().getStore(Store.Type.SITESTORE, true, false);

(SITESTORE --> MEDIASTORE)

Und dann noch die for-Schleife entsprechend anpassen.

lg thomas

0 Kudos

Oki,

für den SiteStore gibt es ja "nur"

setStoredUrl(String url, SiteStoreFolder folder, Language language, TemplateSet templateSet)

Da scheinen auch die Seiten mit zurückgesetzt zu werden

Bei

setStoredUrl(String url, MediaFolder folder, Language language)


werden die Medien in dem Ordner nicht zurückgesetzt. Deswegen gibt es wahrscheinlich auch


setStoredUrl(String url, Media node, Language language, Resolution resolution)

Alles Gut. Danke für Deine Hilfe.

Andreas

0 Kudos