Hallo Zusammen,
ich habe hier ein Beanshell Script, das auf dem Server läuft.
Es soll bei uns im Projekt das Löschen von Seiten in Abhängigkeit von einem vorgegebenen Zeitraum ermöglichen.
Über den Metadatenreiter für eine Seitenreferenz kann ein "Verfallsdatum" für die Seitenreferenz angegeben werden.
Das Delete Sript ist eine Aktion eines Publizierungsauftrags und wird vor dem "generate" ausgeführt. Bei Ausführung eines Auftrages wird über das Script das "Verfallsdatum" in den Metadaten ausgelesen und mit dem jetztigen Datum verglichen. Liegt das "Verfallsdatum" vor dem Auftragsdatum, soll die PageRef aus dem Sitestore gelöscht werden und der geänderte Sitestore Grundlage für die Publizierung werden.
Das Löschen aus dem Sitestore klappt auch prima, da aber nach dem Löschen der Status des ParentFolders der gelöschten PageRef auf "nicht freigegeben" wechselt, wird die publizierte Seite auf dem FS Server und damit auf unserem Staging Server nicht gelöscht. Erst wenn ich danach manuell den Ordner freigebe, wird bei der nächsten Publizierung die Löschung der publizierten Seite durchgeführt.
Ich habe daher versucht den Ordner nach dem Löschen der PageRef freizugeben (s.u. "ordner.setLock(false,false);"). Leider klappt das noch nicht.
Ich muss irgendwie an den Order der zu löschenden PageRef kommen und diesen nach dem Löschen der PageRef aus dem Sitestore freigeben.
Über sachdienliche Hinweise würde ich mich freuen 🙂
Grüße
Petra Hewera-Harz
Der Code des "Delete-Scriptes":
//!Beanshell
import java.util.*;
import java.lang.Long;
import de.espirit.firstspirit.access.ReferenceEntry;
import de.espirit.firstspirit.storage.*;
import de.espirit.firstspirit.access.*;
import de.espirit.firstspirit.access.project.*;
import de.espirit.firstspirit.agency.StoreAgent;
import de.espirit.firstspirit.access.store.*;
import de.espirit.firstspirit.access.store.Store.Type;
import de.espirit.firstspirit.access.store.sitestore.*;
import de.espirit.firstspirit.access.store.pagestore.*;
connection.getProjectById(context.getProject().getId()).getUserService();
today = new Date();
storeAgent = context.requestSpecialist(StoreAgent.TYPE);
siteStore = (SiteStoreRoot)storeAgent.getStore(Type.SITESTORE);
List<StoreElement> children = siteStore.getChildren(StoreElement.class, true).toList();
for (StoreElement child : children) {
//Erstmal nur für PageRefs!
if (child instanceof PageRef) {
metaEnd = child.getMetaFormData().get(null, "pt_metaend").get();
ordner = child.getParent(); //soll den ParentFolder der PageRef liefern
if(metaEnd == null) {
//Nichts soll passieren -> keine Frist gesetzt
} else if (metaEnd.before(today)) {
child.delete();
ordner.setLock(false,false); // soll den ParentFodler der gelöschten PageRef freigeben
//damit die Änderungen im Sitestore bei der jetzt laufenden Publizierung berücksichtigt werden, wird die Startzeit neu gesetzt
// sonst würden die Änderungen erst bei der nächsten Publizierung wirksam
context.setStartTime(new Date());
} else if (metaEnd.after(today)) {
//Nichts soll passieren -> Frist noch nicht erreicht
}
}
}