marcfr
Elite Observer

Gespeicherte URLs per Skript zurücksetzen

Jump to solution

Kann man über die API gespeicherte URLs zu einer Seite mittels eines Skripts zurücksetzen?

Falls ja, wie?

0 Kudos
1 Solution

Accepted Solutions
Hendrik
New Responder

Hallo Marc,

schau mal in die Access-API, dort gibt es eine Klasse URLProperties mit dessen Methode resetStoredUrls(IDProvider node) dies möglich ist:

...

StoreAgent storeAgent = ...;

URLProperties urlProperties = storeAgent.getStore(Type.GLOBALSTORE).getChildren(URLProperties.class).getFirst();

...

Gruß, Hendrik

View solution in original post

0 Kudos
6 Replies
Hendrik
New Responder

Hallo Marc,

schau mal in die Access-API, dort gibt es eine Klasse URLProperties mit dessen Methode resetStoredUrls(IDProvider node) dies möglich ist:

...

StoreAgent storeAgent = ...;

URLProperties urlProperties = storeAgent.getStore(Type.GLOBALSTORE).getChildren(URLProperties.class).getFirst();

...

Gruß, Hendrik

0 Kudos

Hallo Marc,

wurde deine Frage von Hendrik ausreichend beantwortet oder gibt es noch weitere Fragen?

Grüße

Jan

0 Kudos

Wurde ausreichend beantwortet 🙂

0 Kudos

Kann ich damit aber auch wirklich die vom CMS gespeicherten URLs und nicht nur die in den URL Einstellungen der Globalen Einstellungen definierten URLs zurücksetzen?

Es wird ja hier explizit nur der Type GLOBALSTORE angefragt.

Mein Problem ist nämlich, dass ich ein Skript geschrieben habe, dass eine Seite in der Struktur löscht und danach alle URLs des Elternkontens zurücksetzen soll. Das Löschen ist ja kein Problem, aber beim zurücksetzen erhalte ich immer die Fehlermeldung, dass der Knoten nicht gelocked wäre. Dabei habe ich ihn zuvor explzit gelocked.

...

StoreAgent storeAgent = context.requireSpecialist(StoreAgent.TYPE);

        parentFolder.setLock(true,true);

        context.logInfo("Lock: "+parentFolder.isLocked());

        URLProperties urlProperties = storeAgent.getStore(Type.GLOBALSTORE).getChildren(URLProperties.class).getFirst();

        urlProperties.resetStoredUrls(parentFolder);

        parentFolder.setLock(false,true);

...

Muss ich hier noch was anderes machen oder verstehe ich das gerade einfach nicht richtig?

Hier noch die entsprechende Fehlermeldung:

Target exception: java.lang.IllegalStateException: not locked

at line 56

    at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:108)

    at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:83)

    at de.espirit.firstspirit.client.gui.applications.ApplicationTabRegistry$IdentifiableExecutable.execute(ApplicationTabRegistry.java:119)

    at de.espirit.firstspirit.server.taskmanagement.TaskImpl.doTransition(TaskImpl.java:1081)

    at de.espirit.firstspirit.server.taskmanagement.TaskImpl.doTransition(TaskImpl.java:1017)

    at de.espirit.firstspirit.client.action.WorkflowAction.startWorkflow(WorkflowAction.java:471)

    at de.espirit.firstspirit.client.action.WorkflowAction.startWorkflow(WorkflowAction.java:85)

    at de.espirit.firstspirit.client.action.WorkflowAction.startWorkflow(WorkflowAction.java:94)

    at de.espirit.firstspirit.client.action.WorkflowUtil.startWorkflow(WorkflowUtil.java:66)

    at de.espirit.firstspirit.client.action.WorkflowMenuAction$WFStartAction.actionPerformed(WorkflowMenuAction.java:271)

    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

    at javax.swing.AbstractButton.doClick(Unknown Source)

    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)

    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)

    at java.awt.Component.processMouseEvent(Unknown Source)

    at javax.swing.JComponent.processMouseEvent(Unknown Source)

    at java.awt.Component.processEvent(Unknown Source)

    at java.awt.Container.processEvent(Unknown Source)

    at java.awt.Component.dispatchEventImpl(Unknown Source)

    at java.awt.Container.dispatchEventImpl(Unknown Source)

    at java.awt.Component.dispatchEvent(Unknown Source)

    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

    at java.awt.Container.dispatchEventImpl(Unknown Source)

    at java.awt.Window.dispatchEventImpl(Unknown Source)

    at java.awt.Component.dispatchEvent(Unknown Source)

    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)

    at java.awt.EventQueue.access$200(Unknown Source)

    at java.awt.EventQueue$3.run(Unknown Source)

    at java.awt.EventQueue$3.run(Unknown Source)

    at java.security.AccessController.doPrivileged(Native Method)

    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)

    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)

    at java.awt.EventQueue$4.run(Unknown Source)

    at java.awt.EventQueue$4.run(Unknown Source)

    at java.security.AccessController.doPrivileged(Native Method)

    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)

    at java.awt.EventQueue.dispatchEvent(Unknown Source)

    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(Unknown Source)

    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

    at java.awt.EventDispatchThread.run(Unknown Source)

Caused by: java.lang.IllegalStateException: not locked

    at de.espirit.firstspirit.store.access.globalstore.URLPropertiesImpl.checkIsLocked(URLPropertiesImpl.java:251)

    at de.espirit.firstspirit.store.access.globalstore.URLPropertiesImpl.resetStoredUrls(URLPropertiesImpl.java:215)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

    at java.lang.reflect.Method.invoke(Unknown Source)

    at bsh.Reflect.invokeMethod(Reflect.java:146)

    at bsh.Reflect.invokeObjectMethod(Reflect.java:79)

    at bsh.Name.invokeMethod(Name.java:858)

    at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:75)

    at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102)

    at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47)

    at bsh.BSHBlock.evalBlock(BSHBlock.java:130)

    at bsh.BSHBlock.eval(BSHBlock.java:80)

    at bsh.BSHBlock.eval(BSHBlock.java:46)

    at bsh.BSHTryStatement.eval(BSHTryStatement.java:88)

    at bsh.BSHBlock.evalBlock(BSHBlock.java:130)

    at bsh.BSHBlock.eval(BSHBlock.java:80)

    at bsh.BshMethod.invokeImpl(BshMethod.java:362)

    at bsh.BshMethod.invoke(BshMethod.java:258)

    at bsh.BshMethod.invoke(BshMethod.java:186)

    at bsh.Name.invokeLocalMethod(Name.java:917)

    at bsh.Name.invokeMethod(Name.java:804)

    at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:75)

    at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102)

    at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47)

    at bsh.BSHBlock.evalBlock(BSHBlock.java:130)

    at bsh.BSHBlock.eval(BSHBlock.java:80)

    at bsh.BshMethod.invokeImpl(BshMethod.java:362)

    at bsh.BshMethod.invoke(BshMethod.java:258)

    at bsh.BshMethod.invoke(BshMethod.java:161)

    at bsh.PreparsedScript.invoke(PreparsedScript.java:65)

    at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:99)

    ... 50 more

0 Kudos

So, habe es gelöst. Für meine Begriffe ist in den API Docs der Methode das nicht richtig beschrieben. Denn da steht bei der Methode resetStoredUrls(@NotNull                  IDProvider node)

"Reset the stored URLs for the specified node. If the node is a folder the URLs of all child nodes are reset.

The node must be locked when this method is called."

Ich hatte jetzt gedacht, dass ich die Node, also in meinem Beispiel den parentFolder, locken müsste. Eigentlich muß aber die das URLProperties Objekt gelocked werden.

Vielleicht sollte hier mal die Erklärung überarbeitet werden. Oder ich verstehe es auch jetzt noch nicht richtig.

0 Kudos

Das ist tatsächlich missverständlich formuliert. Hier gibt es ja zwei Knoten: Den, der die Methode bereitstellt und den, welchen man als Parameter an die Methode übergibt. Gemeint ist, wie du schon gemerkt hast, der erstere.

Neuer Text: The {@link URLProperties} node must be {@link #isLocked() locked} when this method is called (the lock state of the node which is passed in does not matter).

Peter
0 Kudos