Search the FirstSpirit Knowledge Base
Hallo FirstSpirit Community,
mittels ein Groovy Skript möchte ich Sections von einer bestimmten Vorlage mit neu angelegten von einer anderen Vorlage in Page Bodys ersetzen:
Template oldTmpl = ...
Template newTmpl = ...
Section oldSection = ... // ermittelt via oldTmpl.getIncomingReferences()
Body body = oldSection.getParent()
Page page = body.getParent()
try {
page.setLock(true, true)
Section newSection = body.createSection("name", newTmpl)
body.removeChild(newSection)
body.replaceChild(oldSection, newSection)
page.save("removed section", true)
page.release(true)
}
finally {
page.setLock(false, true)
}
page.refresh()
Nach dem Ausführen des Skriptes stelle ich aber fest, dass obwohl die alte Section ersetzt ist (sie erscheint nicht mehr unter Page Body), "hängt" sie immer noch an der Seite, da wenn ich die Usages der alten Template im FS SiteArchitect via Ctrl+U aufrufe, erscheint die alte Section in der Auflistung, und ein Help Skript bestätigt auch, dass sie die Page immer noch als Parent hat:
storeAgent = context.requireSpecialist(StoreAgent.TYPE)
pageStore = storeAgent.getStore(Store.Type.PAGESTORE, false)
long id = ... // ID der alten Section
section = pageStore.getStoreElement(id)
println section.getParent().getParent() // hier kommt die Seite, wo eigentlich diese Section ersetzt wurde
Habe ich was vergessen in meinem Skript? Soll ich explizit für die alte Section die Methode delete() aufrufen?
Vielen Dank im voraus.
Gruß,
Olga.
Ein expliziter Aufruf von section.delete() hat das Problem gelöst.
Hallo FS Entwickler,
wie meint ihr, geht es hier um ein FS Bug oder mache ich was in meinem Skript falsch?
Danke.
Hallo Olga,
ich könnte mir vorstellen, dass removeChild nur die child-node in der XML Repräsentation des Bodys löscht.
Hast du es denn mit einem expliziten delete() auf der section schon probiert?
Viele Grüße
Felix
Hallo Felix.
Ja, expliziter Aufruf von delete() für Section löscht diese.
Aber laut FS Backend (fs-server.jar) in AbstractStoreElement.removeChild(StoreElement) sollte das Child-Element schon aus der Liste von Children entfernt werden. Deswegen ist es mir immer noch nicht klar, ob das ein korrektes FS Verhalten beim replace/removeChild() ist, oder nicht?
Gruß,
Olga
Ein expliziter Aufruf von section.delete() hat das Problem gelöst.