Search the FirstSpirit Knowledge Base
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
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 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
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
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
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.
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
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
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
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