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