rbitdd
Returning Responder

Re: Scripting-Frage

Jump to solution

Wäre hier nicht ein NotEqual("flag_current", true) einfacher? Dann würde auch das Or entfallen.

Okay, ein Argument, über das es nachzudenken gilt. Smiley Wink

Wenn Sie den Code noch haben können Sie dann bitte mal nach dem "select_new_current.setConstraint(or);" ein select_new_current.getXML() als Logausgabe ausgeben und posten?

Hier die Ausgabe:

ERROR 20.06.2012 22:12:06.421 (de.espirit.firstspirit.client.AbstractGuiHost): Fehler bei der Skriptausführung in Zeile 69.

FSVersion=4.2.453.46978#2467;JDK=1.6.0_31 32bit Sun Microsystems Inc.;OS=Windows 7 6.1 x86;Date=20.06.2012 22:12:06

de.espirit.firstspirit.access.script.ExecutionException: Method Invocation select_new_current.getXML at line 69

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

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

    at de.espirit.firstspirit.common.ScriptUtil.execute(ScriptUtil.java:88)

    at de.espirit.firstspirit.client.action.StartScriptAction.actionPerformed(StartScriptAction.java:97)

    at de.espirit.firstspirit.client.keymap.KeyEventDispatcher.processAction(KeyEventDispatcher.java:282)

    at de.espirit.firstspirit.client.keymap.KeyEventDispatcher.inInitState(KeyEventDispatcher.java:223)

    at de.espirit.firstspirit.client.keymap.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:176)

    at de.espirit.firstspirit.client.AWTDispatchingEventQueue._dispatchEvent(AWTDispatchingEventQueue.java:118)

    at de.espirit.firstspirit.client.AWTDispatchingEventQueue.dispatchEvent(AWTDispatchingEventQueue.java:108)

    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.NullPointerException

    at de.espirit.or.impl.query.XMLConstraintSerializer._visit(XMLConstraintSerializer.java:192)

    at de.espirit.or.impl.query.XMLConstraintSerializer.visit(XMLConstraintSerializer.java:56)

    at de.espirit.or.query.Equal.accept(Equal.java:28)

    at de.espirit.or.impl.query.XMLConstraintSerializer._visit(XMLConstraintSerializer.java:164)

    at de.espirit.or.impl.query.XMLConstraintSerializer.visit(XMLConstraintSerializer.java:46)

    at de.espirit.or.query.And.accept(And.java:27)

    at de.espirit.or.impl.query.XMLConstraintSerializer._visit(XMLConstraintSerializer.java:164)

    at de.espirit.or.impl.query.XMLConstraintSerializer.visit(XMLConstraintSerializer.java:51)

    at de.espirit.or.query.Or.accept(Or.java:17)

    at de.espirit.or.impl.query.SelectSerializer.write(SelectSerializer.java:66)

    at de.espirit.or.impl.SelectImpl.getXML(SelectImpl.java:229)

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

    at bsh.Reflect.invokeObjectMethod(Unknown Source)

    at bsh.Name.invokeMethod(Unknown Source)

    at bsh.BSHMethodInvocation.eval(Unknown Source)

    at bsh.BSHPrimaryExpression.eval(Unknown Source)

    at bsh.BSHPrimaryExpression.eval(Unknown Source)

    at bsh.BSHArguments.getArguments(Unknown Source)

    at bsh.BSHMethodInvocation.eval(Unknown Source)

    at bsh.BSHPrimaryExpression.eval(Unknown Source)

    at bsh.BSHPrimaryExpression.eval(Unknown Source)

    at bsh.BSHBlock.evalBlock(Unknown Source)

    at bsh.BSHBlock.eval(Unknown Source)

    at bsh.BshMethod.invokeImpl(Unknown Source)

    at bsh.BshMethod.invoke(Unknown Source)

    at bsh.BshMethod.invoke(Unknown Source)

    at bsh.This.invokeMethod(Unknown Source)

    at bsh.This.invokeMethod(Unknown Source)

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

    ... 14 more

In der Release-Session sind ja die freigegeben Daten, diese sind read-only. Wenn Sie also änderungen durchführen wollen muss hier wieder die current-Session benutzt werden. Das bei Verwendung der release-Session alte Datensätze auftauchen, lag daran, dass Sie nur im current Stand gelöscht wurden. Gelöscht werden muss - wie auch im JavaClient - immer in beiden.

Die Datensätze waren in beiden Ständen gelöscht...

0 Kudos
rbitdd
Returning Responder

Re: Scripting-Frage

Jump to solution

Hallo,

das funktioniert im ersten Test super.

Ich werde gleich mal mein "finales" Skript dahingehend ändern und dort noch ein paar Tests machen.

Vielen Dank für den echt coolen Tip. Smiley Happy

0 Kudos
Peter_Jodeleit
Crownpeak employee
Crownpeak employee

Re: Scripting-Frage

Jump to solution

Die NPE bei "getXML()" kommt, weil ein "Equal" mit "null" eingehangen wurde, das ist nicht valide (für Leer-Tests muss "IsNull" oder "IsNotNull" verwendet werden). Wahrscheinlich funktioniert auch deswegen die Abfrage nicht...

[EDIT]

Noch ein Tipp: Über "session.xml2Select(String)" ist es eventuell einfacher, sich eine Abfrage zu erstellen. Das XML kann man sich dann (wie in einem anderem Posting vorgeschlagen) über den Wizard im Java-Client erstellen. Dann muss man über die API nur noch die aktuellen Parameter-Werte setzen.

Peter
0 Kudos
gockel
Crownpeak employee
Crownpeak employee

Re: Scripting-Frage

Jump to solution

Natürlich können sie bei dieser Lösung dann auch Parameter im Wizard vergeben, die dann später im Skript gesetzt werden.

import de.espirit.firstspirit.access.store.templatestore.Query;

TemplateStoreRoot templateStore = ....

query = templateStore.getStoreElement("mySpecialQueryUID", Query.UID_TYPE);

select = query.getSelectStatement();

select.setParameter("newsStartingAt", myDate);

EntityList entityList = session.executeQuery(select);

rbitdd
Returning Responder

Re: Scripting-Frage

Jump to solution

Diana Dohr schrieb:

Wäre hier nicht ein NotEqual("flag_current", true) einfacher? Dann würde auch das Or entfallen.

Okay, ein Argument, über das es nachzudenken gilt. Smiley Wink

Habe darüber nachgedacht und es eigentlich für gut befunden.

In Kombination mit dem Vorschlag die Abfragen in externen Querys zu definieren, habe dies auch versucht.

Mein Query sieht entsprechend wie folgt aus:

<QUERY entityType="test_db">

    <NEQ attribute="flag_used" datatype="java.lang.Boolean" value="true"/>

</QUERY>

Leider führt dies nicht dazu, dass die Elemente mit "NULL" im Feld "flag_used" ebenfalls ausgewählt werden. Lediglich die Einträge mit "false" werden an dieser Stelle ausgewählt. Smiley Sad

[EDIT]

Eine Anpassung der Prüfung auf "false" und "not null" hat leider auch nicht geholfen.

<QUERY entityType="test_db">

    <OR>

        <EQ attribute="flag_used" datatype="java.lang.Boolean" value="false"/>

        <NOTNULL attribute="flag_used"/>

    </OR>

</QUERY>

BTW: Bzgl. des "not Null" finde ich die Darstellung im Wizzard etwas gewöhnungsbedürftig... :smileyconfused:

[/EDIT]

0 Kudos