mkresse
I'm new here

Migration von Seiteninhalten zu Datensätzen

Jump to solution

Hallo zusammen,

wir wollen Sektionen, die im Body bestimmter Inhaltsseiten liegen per Skript in einen FS_CATALOG von Datensätzen überführen. Unser erster Versuch, in dem wir einfach über die Sektionen der Seite iterieren, und aus deren FormData mittels Catalog.create(section.template, section.formData) eine neue Card erstellen, führte leider zu Fehlern und nicht deterministischem Verhalten im FS Client, als ob die FormData-Objekte intern geshared werden. Muss das FormData-Objekt vor der Erstellung der Card kopiert werden, und wie sollte man das erreichen?

Oder sollte ein komplett anderer Ansatz gewählt werden?

Gruß,

Martin

1 Solution

Accepted Solutions
marro
Crownpeak employee

Hallo Martin,

Dein Skript hat auf meinem lokalen System genau das gemacht, was es tun soll. Habe dabei keine Probleme bemerkt. Beim weiteren Rumklicken innerhalb der FS_CATALOGs konnte ich dann allerdings ebenfalls "Geister-Absätze" erzeugen und teilweise waren bei mir Absätze auch nicht mehr bearbeitbar (wenn zuvor ein Absatz aus dem Catalog gelöscht wurde). Dies ist allerdings nicht auf das Skript zurückzuführen, da ich dasselbe Verhalten auch durch manuell angelegte FS_CATALOGs erzwingen konnte.

Ich habe für beide Probleme interne Tickets bei uns eingereicht. Über die IDs 198351 ("Geister-Absätze) und 198355 (nicht bearbeitbare Catalogs) kannst Du Dich beim Technical Support über den aktuellen Stand informieren.

Viele Grüße

Donato

View solution in original post

0 Kudos
5 Replies
marro
Crownpeak employee

Hallo Martin,

kannst Du die Fehler und das nicht deterministische Verhalten ein wenig konkretisieren? Ich kann mir gerade nicht ganz vorstellen, zu welchem ungewöhnlichen Verhalten dieses Vorgehen führen könnte.

Hast Du auch den folgenden Hinweis im Javadoc zur create-Methode berücksichtigt?

"Later changes to the given form data will not reflect in the data held by the card."

Welche FirstSpirit-Version verwendet ihr?

Viele Grüße

Donato

0 Kudos

Hallo Donato,

unser erster naiver Versuch war der folgende:

import de.espirit.firstspirit.access.* import de.espirit.firstspirit.access.store.* import de.espirit.firstspirit.agency.* import de.espirit.firstspirit.client.* import de.espirit.firstspirit.forms.* import de.espirit.firstspirit.access.store.pagestore.* import de.espirit.firstspirit.client.access.editor.* import de.espirit.firstspirit.client.access.editor.lists.*  GuiScriptContext context = ctx  assert e instanceof Page  storeAgent = context.requireSpecialist(StoreAgent.TYPE) pageStore = storeAgent.getStore(Store.Type.PAGESTORE)  languageAgent = context.requireSpecialist(LanguageAgent.TYPE) Language masterLang = languageAgent.getMasterLanguage()  Page targetPage = pageStore.getStoreElement("test_catalog_target", IDProvider.UidType.PAGESTORE) Body targetBody = targetPage.getBodyByName("main") Section targetSection = targetBody.getChildren(Section.class).iterator().next() FormData targetSectionForm = targetSection.getFormData() Catalog catalog = targetSectionForm.get(masterLang, "st_catalog").get()  Body sourceBody = e.getBodyByName("main") try {     targetPage.setLock(true, true)      for (section in sourceBody.getChildren(Section.class)) {         FormData sectionFormData = section.getFormData()         println "source ${section.class} with form ${sectionFormData}"         Catalog.Card card = catalog.create(section.getTemplate(), sectionFormData)         catalog.add(card)          FormData cardFormData = card.getItem()         println "card of class ${card.class} with form ${cardFormData}"     }      targetSectionForm.get(masterLang, "st_catalog").set(catalog)     targetSection.setFormData(targetSectionForm)     targetPage.save("save after add to fs_catalog", true) } finally {     targetPage.setLock(false, true) }

Da wir die FormData gar nicht (programmatisch) verändern, sollte dies ja nicht die Ursache sein.

Wir haben mit obigem Script die Sektionen aus dem main-Body der ausgewählten Seite in einen FS_CATALOG einer Zielseite ("st_catalog") überführt. Unter anderem enthielten die kopierten Sektionen wiederum einen Catalog, der Absätze mit einem INPUT_DOM ("Paragraph") enthielt. Nun ist es teilweise passiert, dass Änderungen in den kopierten INPUT_DOMs zwar im Formular angezeigt, aber nicht in die Ausgabe (Preview) gerendert wurden. Teilweise wurden hinzugefügte Cards im Catalog nicht angezeigt (erst nach einem Neustart des Clients). Teilweise erschienen nach dem Speichern der Seite nach Bearbeitung eines INPUT_DOMs "Geister-Absätze" in der Sidebar links (siehe Screenshot: der rot markierte Schnipsel gehört dort nicht hin und erscheint nach dem ersten Tastendruck im INPUT_DOM, verschwindet wieder nach Klick auf den "Paragraph"-Schnipsel). Teilweise waren einige INPUT_DOMs nicht bearbeitbar, obwohl die Seite im "Bearbeiten"-Modus war. Teilweise ist das sonderbare Verhalten auch geblieben, nachdem die Seite mit den Quell-Sektionen gelöscht wurde.

Bei uns kommt derzeit FS 5.2.608 unter Java 1.8.0_121 (Client) zum Einsatz.

marro
Crownpeak employee

Hallo Martin,

Dein Skript hat auf meinem lokalen System genau das gemacht, was es tun soll. Habe dabei keine Probleme bemerkt. Beim weiteren Rumklicken innerhalb der FS_CATALOGs konnte ich dann allerdings ebenfalls "Geister-Absätze" erzeugen und teilweise waren bei mir Absätze auch nicht mehr bearbeitbar (wenn zuvor ein Absatz aus dem Catalog gelöscht wurde). Dies ist allerdings nicht auf das Skript zurückzuführen, da ich dasselbe Verhalten auch durch manuell angelegte FS_CATALOGs erzwingen konnte.

Ich habe für beide Probleme interne Tickets bei uns eingereicht. Über die IDs 198351 ("Geister-Absätze) und 198355 (nicht bearbeitbare Catalogs) kannst Du Dich beim Technical Support über den aktuellen Stand informieren.

Viele Grüße

Donato

0 Kudos
marro
Crownpeak employee

Ich wurde von unserer Entwicklungsabteilung soeben darauf hingewiesen, dass die "Geister-Absätze" mit Version 5.2.615 behoben wurden.

0 Kudos

Hallo Martin,

benötigst Du noch weitere Hilfe oder haben Dir die Antworten von Donato 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.

Viele Grüße

Rene

0 Kudos