Questions & Answers

SOLVED
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

Type a product name