jst
New Responder

Absatz-Reihenfolge in Body festlegen

Jump to solution

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

0 Kudos
1 Solution

Accepted Solutions

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

View solution in original post

0 Kudos
11 Replies
jst
New Responder

Alles klar... Augenauf beim API-Lesen... Es gibt eine Methode moveChild... Sorry für's stören 😉

0 Kudos
jst
New Responder

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

0 Kudos
feddersen
Community Manager

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.

0 Kudos

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

0 Kudos
feddersen
Community Manager

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.

0 Kudos

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

0 Kudos
jst
New Responder

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)

0 Kudos

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

0 Kudos