Search the FirstSpirit Knowledge Base
Kann man über die API gespeicherte URLs zu einer Seite mittels eines Skripts zurücksetzen?
Falls ja, wie?
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
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
Hallo Marc,
wurde deine Frage von Hendrik ausreichend beantwortet oder gibt es noch weitere Fragen?
Grüße
Jan
Wurde ausreichend beantwortet 🙂
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
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.
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).