#1 2021-08-15 13:44:56

cochems
Member
Registered: 2021-08-15

Keine Pivot-Ansicht in Report mit Script Datasource ohne Cache

Ich betreibe seit kurzem einen ReportServer 3.7.0-6044 (Enterprise Edition) und habe noch nicht viel Erfahrung mit der Applikation.
Es ist eine tolle Anwendung, die mir sehr gut gefällt und sehr viel Spaß macht. Jetzt bin ich aber auf ein Problem gestoßen.

Bei Reports mit Script Datasource funktioniert die Pivot-Ansicht nicht, wenn der Database Cache in der Datasource-Definition auf 0 steht.
Normale Ansicht (Liste) funktioniert.
Wie ich es verstanden habe, wird nur bei Database Cache 0 die Datasource aktualisiert.

Bei Database Cache -1 funktioniert die Pivot-Ansicht problemlos, wird aber nie aktualisiert. Bei Database Cache > 0 funkioniert sie nur in den Minuten, so lange die Datasource gecacht ist.

Die Fehlermeldung bei Database Cache 0 (Pivot-Ansicht) ist so:

Error
Could not generate mondrian schema: Error in Script Datasource. The script returned an object of type class
net.datenwerke.rs.base.service.reportengines.table.output.object.RSTableModel but no appropriate ScriptDatasourceResultTransformer was found.


Error Details:

java.lang.IllegalStateException: Could not generate mondrian schema: Error in Script Datasource. The script returned an object of type class net.datenwerke.rs.base.service.reportengines.table.output.object.RSTableModel but no appropriate ScriptDatasourceResultTransformer was found.<br>    at net.datenwerke.rs.saikupivot.server.SaikuPivotRpcServiceImpl.stashReport(SaikuPivotRpcServiceImpl.java:89)<br>    at net.datenwerke.rsenterprise.license.service.EnterpriseCheckInterceptor.invoke(EnterpriseCheckInterceptor.java:35)<br>    at net.datenwerke.security.service.security.aop.SecurityCheckInterceptor.invoke(SecurityCheckInterceptor.java:109)<br>    at net.datenwerke.gf.service.gwtstacktrace.CatchStacktraceInterceptor.invoke(CatchStacktraceInterceptor.java:38)<br>    at jdk.internal.reflect.GeneratedMethodAccessor467.invoke(Unknown Source)<br>    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br>    at java.base/java.lang.reflect.Method.invoke(Method.java:566)<br>    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:587)<br>    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:333)<br>    at net.datenwerke.rsenterprise.license.service.EnterpriseCheckInterceptor.invoke(EnterpriseCheckInterceptor.java:35)<br>    at net.datenwerke.security.service.security.aop.SecurityCheckInterceptor.invoke(SecurityCheckInterceptor.java:109)<br>    at net.datenwerke.gf.service.gwtstacktrace.CatchStacktraceInterceptor.invoke(CatchStacktraceInterceptor.java:38)<br>    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:303)<br>    at net.datenwerke.rsenterprise.license.service.EnterpriseCheckInterceptor.invoke(EnterpriseCheckInterceptor.java:35)<br>    at net.datenwerke.security.service.security.aop.SecurityCheckInterceptor.invoke(SecurityCheckInterceptor.java:109)<br>    at net.datenwerke.gf.service.gwtstacktrace.CatchStacktraceInterceptor.invoke(CatchStacktraceInterceptor.java:38)<br>    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:373)<br>    at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)<br>    at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)<br>    at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)<br>    at net.datenwerke.rsenterprise.license.service.EnterpriseCheckInterceptor.invoke(EnterpriseCheckInterceptor.java:35)<br>    at net.datenwerke.security.service.security.aop.SecurityCheckInterceptor.invoke(SecurityCheckInterceptor.java:109)<br>    at net.datenwerke.gf.service.gwtstacktrace.CatchStacktraceInterceptor.invoke(CatchStacktraceInterceptor.java:38)<br>    at com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:290)<br>    at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:280)<br>    at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:184)<br>    at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:89)<br>    at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:85)<br>    at com.google.inject.persist.PersistFilter.doFilter(PersistFilter.java:94)<br>    at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)<br>    at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:121)<br>    at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:133)<br>    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)<br>    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)<br>    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)<br>    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)<br>    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)<br>    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)<br>    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)<br>    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)<br>    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)<br>    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)<br>    at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:433)<br>    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)<br>    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)<br>    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)<br>    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)<br>    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)<br>    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)<br>    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)<br>    at java.base/java.lang.Thread.run(Thread.java:829)<br>Caused by: java.lang.IllegalArgumentException: Error in Script Datasource. The script returned an object of type class net.datenwerke.rs.base.service.reportengines.table.output.object.RSTableModel but no appropriate ScriptDatasourceResultTransformer was found.<br>    at net.datenwerke.rs.base.service.datasources.transformers.script.ScriptDatasourceTransformer.transformResultAndCast(ScriptDatasourceTransformer.java:185)<br>    at net.datenwerke.rs.base.service.datasources.transformers.script.ScriptDatasourceTransformer.transform(ScriptDatasourceTransformer.java:121)<br>    at net.datenwerke.rs.base.service.datasources.transformers.DatasourceTransformationServiceImpl.transform(DatasourceTransformationServiceImpl.java:29)<br>    at net.datenwerke.rs.saikupivot.service.SaikuPivotServiceImpl.extractMondrianSchema(SaikuPivotServiceImpl.java:365)<br>    at net.datenwerke.rs.saikupivot.service.SaikuPivotServiceImpl.createSaikuFrom(SaikuPivotServiceImpl.java:133)<br>    at net.datenwerke.rsenterprise.license.service.EnterpriseCheckInterceptor.invoke(EnterpriseCheckInterceptor.java:35)<br>    at net.datenwerke.rs.saikupivot.server.SaikuPivotRpcServiceImpl.stashReport(SaikuPivotRpcServiceImpl.java:85)<br>    ... 50 more<br>

Mein Script für die Script Datasource arbeitet mit einem user-abhängigen Parameter (der Personalnummer; sie wird bei Login ermittelt und als User-Variable gesetzt). Deshalb kommt ein dauerhaftes Caching (-1) natürlich nicht in Frage.

Das Script verarbeitet die Variable auch korrekt; der erste Aufruf (bei Caching -1) funktioniert. Danach funktioniert die Pivot-Ansicht mit der gecachten Version, aber dann sieht jeder User das gleiche.

Kann mir jemand helfen? Muss ich etwas anders definieren?
Wenn Infos gebraucht werden (Script, Definition der Datasource, etc.) bitte nachfragen.

Vielen Dank im voraus für Eure Hilfe.

Offline

#2 2021-08-23 12:38:31

eduardo
Administrator
Registered: 2016-11-01
Website

Re: Keine Pivot-Ansicht in Report mit Script Datasource ohne Cache

Hallo cochems,

könntest Du bitte ein *minimales* Skript (DataSource) erstellen womit wir das Problem reproduzieren können?

Grüße,
Eduardo

Offline

#3 2021-09-12 19:23:54

cochems
Member
Registered: 2021-08-15

Re: Keine Pivot-Ansicht in Report mit Script Datasource ohne Cache

Hallo Edoardo,

Entschuldigung für die späte Antwort; ich hatte nach einigen Tagen nicht mehr täglich geschaut, ob der Beitrag beantwortet war. Für mein aktuelles Problem habe ich mir anders geholfen, aber grundsätzlich brauche ich schon auch Pivot-Analysen mit gescripteten Datenquellen.

Ich habe ein simples Script test_for_forum.groovy erstellt:

import net.datenwerke.rs.base.service.reportengines.table.output.object.*
import net.datenwerke.rs.base.service.reportengines.table.entities.*

td = new TableDefinition()
table = new RSTableModel(td)


td.addColumn("eins", String);
td.addColumn("zwei", String);
td.addColumn("drei", String);

for (i = 1; i < 11; i++) {  
  table.addDataRow(["eins_" + i, "zwei_" + i, "drei_" + i]);
}


return table

script.png

Damit habe ich eine Datenquelle Test for Forum erstellt, zunächst ohne Caching (also Cache -1):

datasource-ohne-cache.png

Mit dieser Datenquelle habe ich eine dynamische Liste erzeugt:

dynamic-list.png

Hier die Datenvorschau:

data.png

Pivot-Analysen sind problemlos möglich:

pivot-config.png
pivot.png

Setzt man aber die Datenquelle auf Caching (zB. Caching 0):

datasource-mit-cache.png

Dann kommt es zu dem beschriebenen Fehler in der Pivot-Analyse-Ansicht (und auch beim Ausführen des Reports):

pivot-error.png

Setzt man den Cache auf eine Zahl > 0, funktioniert die Pivot-Ansicht und der Report so lange, wie der Cache eingestellt ist, danach kommt es zum gleichen Fehler.

Ich hatte auch versucht, statt eines Scripts bei der Datenquelle die Option Define script at target anzuhaken und das Script dann im Report erst definiert, aber der Effekt ist der gleiche.

Last edited by cochems (2021-09-12 19:34:01)

Offline

#4 2021-10-14 13:51:23

eduardo
Administrator
Registered: 2016-11-01
Website

Re: Keine Pivot-Ansicht in Report mit Script Datasource ohne Cache

Hallo cochems,

danke für das Beispiel, wir schauen uns das Problem im Ticket RS-5061 an.

Grüße
Eduardo

Offline

Board footer

Powered by FluxBB