arkaetsc
I'm new here

DB Select in ValueService

Jump to solution

Hallo zusammen,

ich habe hier gerade ein kleines Problem mit einem ValueService bei dem ich etwas Hilfe gebrauchen könnte.

Ziel ist es bei der Eingabe eines neuen Datensatzes zu prüfen ob der eingetragene Name im Feld "cs_name" bereits in der Datenbank vorhanden ist. Wenn der Name bereits in der Datenbank vorhanden ist soll das Speichern verhindert werden.

Der ValueService läuft grundsätzlich und gibt mir auch entsprechende Werte zurück, wenn er nicht versucht auf die Datenbank zu gehen. Sobald ich "session.executeQuery(select)" aufrufe fliegt er raus. Ich habe den Code mal über die Beanshell getestet und hier funktioniert er wie erwartet.

Vielleicht hat ja jemand einen Tipp für mich, ich hab keine Ahnung was das Problem sein könnte.

Das Formular:

<CMS_MODULE> 

<CMS_INPUT_TEXT name="cs_name" hFill="yes" singleLine="no" useLanguages="no"> 

  <LANGINFOS>  

    <LANGINFO lang="*" label="Name" description="Name"/> 

   </LANGINFOS> 

</CMS_INPUT_TEXT>

</CMS_MODULE>

Die Regel:

<RULE>
  <SCHEDULE delay="1000" id="NC1" service="NameCheck">   
   <PARAM name="name">
<PROPERTY name="VALUE" source="cs_name"/>
</PARAM>
</SCHEDULE>
<DO>
<VALIDATION scope="SAVE"> 
<PROPERTY name="VALID" source="cs_name"/>
  <MESSAGE lang="*" text="Name bereits vorhanden!"/>
</VALIDATION>
</DO>
</RULE>

Der ValueService:

@Override
     public Object getValue(SpecialistsBroker broker, Map  parameters) {
          boolean isValidName = true;

          String name = (String) parameters.get("name");
          if(StringUtils.isNotBlank(name)) {
               StoreAgent storeAgent = broker.requestSpecialist(StoreAgent.TYPE);
               Store store = storeAgent.getStore(Type.TEMPLATESTORE);
               Schema schema = (Schema) store.getStoreElement("Datenbank", UidType.TEMPLATESTORE);
               
               Session session = schema.getSession();
               Select select = session.createSelect("Namen");
               select.setConstraint(new Equal("name", name));
               
                                                   // Letzter sichtbarer Log-Eintrag
               Logging.logInfo("SelectStatement: " + select.toString(), NameCheckValueService.class);
               EntityList results = session.executeQuery(select);
               
               String message = String.format("Query returned with size=%2, isEmpty=%s and the following values %s.", results.size(), results.isEmpty(), results.toString());
               Logging.logInfo(message, NameCheckValueService.class);
               
               isValidName = results.isEmpty();
          }
          
          Logging.logInfo("NameCheckValueService returning: " + isValidName, NameCheckValueService.class);
          return isValidName;
     }

Fehlermeldung (wenn er "session.executeQuery(select)" ausführt)

18.08.2016 16:12:40 ERROR 18.08.2016 16:12:40.858 (de.espirit.firstspirit.webedit.server.RemoteBatchLoggingServiceImpl): WebEdit client error occurred:
FSVersion=5.2.422.73933#3587
java.lang.Throwable: unexpected ',' (at line 1, column 396)
  at de.espirit.firstspirit.query.fsql.FsqlParserImpl$RealParser.parseStatement(FsqlParserImpl.java:104)
  at de.espirit.firstspirit.query.fsql.FsqlParserImpl$RealParser.access$000(FsqlParserImpl.java:88)
  at de.espirit.firstspirit.query.fsql.FsqlParserImpl.parse(FsqlParserImpl.java:50)
  at de.espirit.firstspirit.query.fsql.FsqlParserImpl.parse(FsqlParserImpl.java:42)
  at de.espirit.firstspirit.server.search.store.LucenePipelineBuilder.getPipeline(LucenePipelineBuilder.java:112)
  at de.espirit.firstspirit.server.search.store.StoreSource.createQueryPipeline(StoreSource.java:264)
  at de.espirit.firstspirit.server.search.SearchManagerImpl.createQueryPipeline(SearchManagerImpl.java:802)
  at de.espirit.firstspirit.server.search.SearchManagerImpl.queryElements(SearchManagerImpl.java:792)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:497)
  at de.espirit.firstspirit.io.DefaultServerHandler.callManager(DefaultServerHandler.java:67)
  at de.espirit.firstspirit.server.io.handler.ManagerCall.doCall(ManagerCall.java:139)
  at de.espirit.firstspirit.server.io.handler.CompactCall.handle(CompactCall.java:73)
  at de.espirit.firstspirit.server.io.MessageWorker.run(MessageWorker.java:31)
  at de.espirit.firstspirit.server.ExecutionManagerImpl$RunnableWrapper.call(ExecutionManagerImpl.java:634)
  at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:600)
  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:436)
  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
  at de.espirit.firstspirit.client.io.ServerCaller.callManager(ServerCaller.java:479)
  at de.espirit.firstspirit.io.DefaultClientHandler.callManager(DefaultClientHandler.java:58)
  at de.espirit.firstspirit.client.io.RemoteManagerCaller.invoke(RemoteManagerCaller.java:53)
  at de.espirit.firstspirit.server.$Proxy124.queryElements(Unknown Source)
  at de.espirit.firstspirit.query.BrokerBasedQueryService.queryElements(BrokerBasedQueryService.java:43)
  at de.espirit.firstspirit.agency.QueryAgentImpl$ElementIterable.iterator(QueryAgentImpl.java:113)
  at de.espirit.firstspirit.webedit.server.report.search.AbstractIteratingReportProvider$SearchRunner.(AbstractIteratingReportProvider.java:128)
  at de.espirit.firstspirit.webedit.server.report.search.AbstractIteratingReportProvider.start(AbstractIteratingReportProvider.java:46)
  at de.espirit.firstspirit.webedit.server.report.ReportProviderWrapper.start(ReportProviderWrapper.java:53)
  at de.espirit.firstspirit.webedit.server.report.HtmlReportManager.create(HtmlReportManager.java:117)
  at de.espirit.firstspirit.webedit.server.report.HtmlReportServiceImpl.create(HtmlReportServiceImpl.java:36)
  at sun.reflect.GeneratedMethodAccessor2692.invoke(Unknown Source)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:497)
  at de.espirit.firstspirit.webedit.server.control.PollSupportingWebeditService$RPCInvoke.call(PollSupportingWebeditService.java:300)
  at de.espirit.firstspirit.webedit.server.control.PollSupportingWebeditService$ServiceCallPollFeedWrapper.call(PollSupportingWebeditService.java:416)
  at de.espirit.firstspirit.webedit.server.concurrent.ExecutionManager$NamedCallable.call(ExecutionManager.java:318)
  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
  at java.lang.Thread.run(Thread.java:745)

Viele Grüße

Alex

0 Kudos
1 Solution

Accepted Solutions
StefanSchulz
I'm new here

Hallo Alex,

ich kann leider keinen Zusammenhang zwischen dem ValueService und der Exception sehen. Letztere kommt aus einem Report und hat nichts mit den Regeln zu tun. Vielleicht nur zufällig zu einem ähnlichen Zeitpunkt geloggt.

Könntest du mal deinen Code in eine try-catch-Klammer setzen und schauen, ob und welche Exception dort eventuell zu sehen ist? Zudem wäre möglicherweise hilfreich, die erzeugte Anfrage zu sehen (die dein Code mitloggt).

Beste Grüße

Stefan

View solution in original post

0 Kudos
2 Replies
StefanSchulz
I'm new here

Hallo Alex,

ich kann leider keinen Zusammenhang zwischen dem ValueService und der Exception sehen. Letztere kommt aus einem Report und hat nichts mit den Regeln zu tun. Vielleicht nur zufällig zu einem ähnlichen Zeitpunkt geloggt.

Könntest du mal deinen Code in eine try-catch-Klammer setzen und schauen, ob und welche Exception dort eventuell zu sehen ist? Zudem wäre möglicherweise hilfreich, die erzeugte Anfrage zu sehen (die dein Code mitloggt).

Beste Grüße

Stefan

0 Kudos

Danke Stefan...

Der Fehler war nicht in der Query sondern im String.format(...).

[...]returned with size=%2, [...]

Manchmal sieht man den Wald vor lauter Bäumen nicht.

Ein schönes Wochenende

Alex

0 Kudos