lobanova
Elite Observer

Section mittels Skript ersetzen

Jump to solution

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.

0 Kudos
1 Solution

Accepted Solutions

Ein expliziter Aufruf von section.delete() hat das Problem gelöst.

View solution in original post

0 Kudos
4 Replies
lobanova
Elite Observer

Hallo FS Entwickler,

wie meint ihr, geht es hier um ein FS Bug oder mache ich was in meinem Skript falsch?

Danke.

0 Kudos

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

0 Kudos

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

0 Kudos

Ein expliziter Aufruf von section.delete() hat das Problem gelöst.

0 Kudos