Questions & Answers

SOLVED
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

Type a product name