Search the FirstSpirit Knowledge Base
Hallo Community,
ich suche aktuell die Möglichkeit per Script oder Modul die Reihenfolge von Absätzen zu verändern. Mit folgende Schnipsel bekomme ich die aktuelle Position eines Absatzelementes im Body
body.getChildIndex(section);
Gibt es bereits eine Möglichkeit, die Reihenfolge zu beinflussen?
Viele Grüße,
Jörn
Hallo Jan Tilo,
das war jetzt der Ergebnissbringende Hinweis 🙂 Vielen Lieben Dank!
In der Map habe ich das Element gehabt, welches ich wiederherstellen wollte. Das Element habe ich dann zur Verschiebung verwendet. Leider lag an der Stelle das Element in einer falschen Revision vor. D.h. ich hatte im Prinzip nicht "exakt" das Element, welches ich verschieben wollte, sondern ein veraltetes Objekt.
D.h. nach dem Wiederherstellen des Elements muss ich mir dieses erst erneut aus dem Body suchen um es dann verschieben zu können.
Viele Grüße,
Jörn
Alles klar... Augenauf beim API-Lesen... Es gibt eine Methode moveChild... Sorry für's stören 😉
So... Neues Problem 😉
wenn ich jetzt die oben genannte Methode verwende, dann erhalte ich eine SecurityException.
java.lang.SecurityException: read only store
at de.espirit.firstspirit.store.access.ReadOnlySecurityManager.checkAccess(ReadOnlySecurityManager.java:26)
at de.espirit.firstspirit.store.access.AbstractStoreElement.checkAccess(AbstractStoreElement.java:1404)
Woran kann es wohl liegen, dass ich den Absatz nicht verschieben kann? Das Element ist nicht gesperrt und der Benutzer ist Admin.
Viele Grüße,
Jörn
In welchem Context versuchst du das? Eventuell in einer Generierung oder in einem Skript nach einer Generierung? Dann sind die Stores im Read-only Modus.
Hi,
Wir haben ein Module gebaut, welches das installieren von Features übernimmt. Wenn die Inhaltsseite bereits exisiterte, dann werden vom ContentTransport gelöschte Absätze wieder hergestellt. Die Absätze sollen dann wieder an die korrekte Stelle geschoben werden.
Das herstellen funktioniert super. Nur das verschieben leider nicht.
Viele Grüße
Jörn
Vielleicht arbeitest du auch versehentlich im Freigabestand? Ist so schwer zu sagen. Komplette Stacktraces und etwas mehr Informationen (Was für eine Art von Modul ist das und wo wird das aufgerufen (Workflow, per Skript, im Auftrag etc.) könnte helfen. Die relevanten Codezeilen aus dem Modul vielleicht auch.
Hallo Christoph,
sorry, dass ich jetzt erst wieder antworte.
Das Modul ist eine Context-Menu-Plugin. Mit folgenden Codezeilen versuche ich nach dem wiederherstellen eines Absatzes eben auch diesen wieder zu verschieben:
try {
this.pageStore.restore(elementInfo, null);
Body body = storeElement.getBodyByName(bodyName);
body.refresh();
body.moveChild((IDProvider) elementMap.get(elementInfo)[0], (Integer) elementMap.get(elementInfo)[1]);
} catch (LockException e) {
Logging.logError("Element locked: " + e.getMessage(), LOGGER);
} catch (ElementMovedException e) {
Logging.logError("Element cannot be moved: " + e.getMessage(), LOGGER);
}
In der "elementMap" findet sich die vorherige Position des Elements. D.h ich versuche mit dem ElementInfo-Objekt aus der Historie das Element an seine ursprüngliche Position zu verschieben.
Viele Grüße
Jörn
Hier noch der Stacktrace:
java.lang.SecurityException: read only store
at de.espirit.firstspirit.store.access.ReadOnlySecurityManager.checkAccess(ReadOnlySecurityManager.java:26)
at de.espirit.firstspirit.store.access.AbstractStoreElement.checkAccess(AbstractStoreElement.java:1404)
at de.espirit.firstspirit.store.access.pagestore.SectionImpl.checkAccess(SectionImpl.java:599)
at de.espirit.firstspirit.store.access.AbstractStoreElement.checkDeletePermission(AbstractStoreElement.java:1445)
at de.espirit.firstspirit.store.access.DefaultStoreElement.moveChild(DefaultStoreElement.java:3057)
at de.XXX.XXX.fs.plugins.RolloutItem.execute(RolloutItem.java:98)
at de.espirit.firstspirit.client.plugin.contextmenu.JavaClientContextMenuItemFactory$1.actionPerformed(JavaClientContextMenuItemFactory.java:44)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at de.espirit.firstspirit.client.AWTDispatchingEventQueue.defaultDispatchEvent(AWTDispatchingEventQueue.java:133)
at de.espirit.firstspirit.client.AWTDispatchingEventQueue._dispatchEvent(AWTDispatchingEventQueue.java:117)
at de.espirit.firstspirit.client.AWTDispatchingEventQueue.dispatchEvent(AWTDispatchingEventQueue.java:110)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Hallo Jörn,
interessant wäre es zu sehen wie Du Dir den pageStore besorgst.
Wie Christoph bereits geschrieben hat, könnte es sein, dass Du auf dem Release Stand des Stores arbeitest. Dann kommt es zu dem genannten Problem.
Schau mal in der API bei UserService:
getStore(Store.Type storeType, boolean release)
Viele Grüße
Jan Tilo
Hallo Jan Tilo,
ich hole mir direkt über das IDProvider den Store. Mit "IDProvider.getStore()". In meinem ContextMenu-Plugin bekomme ich leider immer den Fehler, dass der UserService nicht gestartet sei.
Viele Grüße,
Jörn