Search the FirstSpirit Knowledge Base
Hallo zusammen,
ich möchte programmatisch über ein Modul eine Struktur unterhalb eines definierten Startordners anlegen bzw. updaten.
Beim Entwickeln und Testen ist mir folgendes Verhalten aufgefallen:
Ich lösche manuell im Client alle Ordner unterhalb meines Startordners und gebe diesen dann manuell frei. (Hierbei wird mir ein Fehler/Warnung angezeigt, da der Startordner in diesem Fall keinen Startknoten hat. - Sollte aber nicht weiter stören.)
Wenn ich nun in meinem Modul, oder auch zu Testzwecken über Remotedebugging die Children meines Startordners abfrage, habe ich hier bei mehreren Durchläufen verschiedene Ergebnisse.
Manchmal sind keine Children vorhanden, manchmal nur ein paar und manchmal scheint noch meine Komplette (manuell gelöschte) Struktur vorhanden zu sein.
Hier ein paar Code-Snippets:
Holen eines NEUEN Sitestores im aktuellen Arbeitsstand:
public static Store getStore(Project project, Type storeType, boolean forceRefresh, boolean release) { |
project.refresh(); | |
return project.getUserService().getStore(storeType, forceRefresh, release); | |
} |
Auf dem so zugrückgelieferten Store, mache ich dann so etwas wie:
rootFolder = (PageRefFolder) FsStoreUtil.getStore(project, Type.SITESTORE, true, false).getStoreElement(
rootFolder.getId());
Und auf dem so zurückgelieferten PageRefFolder mache ich dann folgendes:
Listable<PageRefFolder> children = rootFolder.getChildren(PageRefFolder.class, true);
Also eigentlich keine Rocket Science, dennoch wie beschrieben unterschiedliche Ergebnisse.
Auch ein .refresh() auf das Project Objekt hilft mir momentan nicht weiter. Ich wäre davon ausgegangen, dass durch das Flag "forceRefresh" beim Holen des Stores meine manuell gelöschten Elemente immer beücksichtigt, also nicht als Children aufgeführt werden.
Gibt es sonst noch Dinge, an die ich nicht gedacht habe, die aber das beschriebene Verhalten auslösen können?
Aktuell läuft das Modul auf einem Server mit der FS-Version 5.0.425.
Beste Grüße
Sandro
Hallo Sandro,
ein refresh() auf dem Projekt aktualisiert nur die Projekteigenschaften, nicht aber auch die Stores des Projekts. Darum arbeiten Deine Abfragen alle weiterhin auf gecachten Versionen Deiner StoreElemente. Das erklärt auch, wieso das Verhalten immer wieder mal ein anderes ist. Es ist abhängig davon, ob die Elemente sich noch im Cache befinden oder da schon rausgeflogen sind. Damit Du immer auf der aktuellen Version eines StoreElements arbeitest, musst Du das refresh() direkt auf dem StoreElement aufrufen, also in Deinem Fall auf dem rootFolder, bevor Du getChildren aufrufst.
Viele Grüße
Donato
Hallo Sandro,
benötigst Du noch weitere Hilfe oder hat Dir Donatos Antwort bereits geholfen? In diesem Fall wäre es super, wenn Du die "richtige Antwort" entsprechend markierst, damit auch andere Community-Teilnehmer diese auf den ersten Blick finden. Solltest Du zwischenzeitlich eine eigene Lösung gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.
Viele Grüße
Tim