#1 2023-10-24 15:00:29

Lennart Seeger
Member
Registered: 2023-10-24

Datenquellen Parameter mit Mehrfachselektion in Dynamischer Liste

Hallo zusammen,

ich würde gerne einen Datenquellen Parameter mit einer Mehrfachselektion in einer dynamischen Liste einbauen. Sprich einfach übergeben als Parameter an ein aufgerufenes Package in der Datenbank. Ich würde erwarten, dass aus dem Parameter ein String kommt, der z.B. folgendermaßen aufgebaut ist: 'Element1, Element2, Element3'. Dies scheint nicht der Fall zu sein.

Ich konnte es leider bisher nicht erreichen herauszufinden, was bei welchen Einstellungen und Aufrufen $!{Parameter}, $P{Parameter} etc. herauskommt. Gibt es hierzu eine Auflistung/Doku etc. oder kann mir jemand beantworten, wie ich in diesem Anwendungsfall vorgehen kann?

Meine eigene bisher einzige funktionierende Lösung ist sehr unschön mithilfe einer $X{IN, column, parameterkey}-Function und einiger Interaktionen mit der Datenbank und einer Listenaggregation. Ich würde hoffen, dass es auch eine schönere Lösung gibt und freue mich, falls mir jemand weiterhelfen kann.

Viele Grüße
Lennart Seeger

Offline

#2 2024-01-11 19:21:37

Marcel Berger
InfoFabrik
Registered: 2012-03-14
Website

Re: Datenquellen Parameter mit Mehrfachselektion in Dynamischer Liste

Hallo Lennart,

Du kannst mit $X{...} den mehrfach-Parameter verwenden. Siehe dazu auch hier:
https://reportserver.net/en/guides/admi … arameters/

Alternativ kannst Du in der Abfrage

SELECT *
FROM users
WHERE id IN ($!{param})

verwenden.

Beachte die Limits der Datenbank für IN Ausdrücke.

Gruß
Marcel

Offline

#3 2024-01-17 16:46:46

Lennart Seeger
Member
Registered: 2023-10-24

Re: Datenquellen Parameter mit Mehrfachselektion in Dynamischer Liste

Hallo Marcel,

erstmal vielen Dank für die Antwort.

Ist es auch möglich, die Ausgabe einfach als String zu erhalten? Beispielsweise als kommaseparierte Liste? Ich würde gerne nur diesen String an ein Package in einer Datenbank senden, die dann nur ein Subset der Daten an den Reportserver sendet.

Ich habe eine etwas unschöne mögliche Vorgehensweise mit einer behelfsmäßigen Tabelle und einem Listagg, hoffe aber, dass ich den Parameter auch direkt als String auslesen kann. Ist das möglich?

Beste Grüße
Lennart Seeger

Offline

#4 2024-01-18 12:16:11

Marcel Berger
InfoFabrik
Registered: 2012-03-14
Website

Re: Datenquellen Parameter mit Mehrfachselektion in Dynamischer Liste

Hallo Lennart,

kannst Du das etwas genauer zeigen/beschreiben?

Du kannst den Parameter $!{PARAM} auch in einen String laufen lassen. Der ! Parameter wird vor der SQL Ausführung ins SQL eingebettet.

-- 1. Beispiel
SELECT '$!{PARAM}' PARM FROM DUAL

-- 2. Beispiel

SELECT * FROM TABLE(PCK.MY_TABLE_FUNC('$!{PARAM}'))

Viele Grüße
Marcel

Offline

#5 2024-01-22 14:51:14

Lennart Seeger
Member
Registered: 2023-10-24

Re: Datenquellen Parameter mit Mehrfachselektion in Dynamischer Liste

Hallo Marcel,

danke dir erstmal. Ich habe den Ausdruck soeben ausprobiert, bekomme jedoch den Fehler:

Query konnte nicht ausgeführt werden: ORA-00923: Schlüsselwort FROM nicht an erwarteter Stelle gefunden

Könnte es an der Version des Reportservers liegen? Bei mir handelt es sich noch um Version RS3.7.1-6052. Das Log anbei. Die Inhalte des Parameters waren 'vier' und 'zwei'. Wenn ich die Anführungszeichen entferne, bekomme ich eine Spalte mit dem Namen 'VIER' und dem Inhalt vier und eine Spalte mit dem Namen 'ZWEI' und Inhalt zwei. Dies ist aber wieder nicht direkt eine Liste.

Viele Grüße
Lennart

net.datenwerke.gxtdto.client.servercommunication.exceptions.NonFatalException: Query konnte nicht ausgeführt werden: ORA-00923: Schlüsselwort FROM nicht an erwarteter Stelle gefunden<br>
<br>	at net.datenwerke.rs.base.server.table.TableReportUtilityServiceImpl.loadColumnDefinition(TableReportUtilityServiceImpl.java:367)
<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.GeneratedMethodAccessor142.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.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.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:555)
<br>	at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
<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:178)
<br>	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
<br>	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
<br>	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
<br>	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481)
<br>	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
<br>	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
<br>	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:670)
<br>	at org.apache.catalina.valves.StuckThreadDetectionValve.invoke(StuckThreadDetectionValve.java:185)
<br>	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
<br>	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
<br>	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
<br>	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
<br>	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926)
<br>	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1790)
<br>	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
<br>	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
<br>	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
<br>	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
<br>	at java.base/java.lang.Thread.run(Thread.java:834)
<br>Caused by: net.datenwerke.rs.core.service.reportmanager.exceptions.ReportExecutorException: Query konnte nicht ausgeführt werden: ORA-00923: Schlüsselwort FROM nicht an erwarteter Stelle gefunden<br>
<br>	at net.datenwerke.rs.base.service.datasources.table.impl.TableDBDataSource.open(TableDBDataSource.java:275)
<br>	at net.datenwerke.rs.base.service.reportengines.table.TableReportEngine.createReport(TableReportEngine.java:278)
<br>	at net.datenwerke.rs.base.service.reportengines.table.TableReportEngine.doExecuteNormal(TableReportEngine.java:203)
<br>	at net.datenwerke.rs.base.service.reportengines.table.TableReportEngine.doExecuteNormal(TableReportEngine.java:158)
<br>	at net.datenwerke.rs.base.service.reportengines.table.TableReportEngine.doExecute(TableReportEngine.java:89)
<br>	at net.datenwerke.rs.core.service.reportmanager.engine.ReportEngine.execute(ReportEngine.java:143)
<br>	at net.datenwerke.rs.core.service.reportmanager.ReportExecutorServiceImpl.execute(ReportExecutorServiceImpl.java:211)
<br>	at net.datenwerke.rs.core.service.reportmanager.ReportExecutorServiceImpl.execute(ReportExecutorServiceImpl.java:144)
<br>	at net.datenwerke.rs.core.service.reportmanager.ReportExecutorServiceImpl.execute(ReportExecutorServiceImpl.java:136)
<br>	at net.datenwerke.rs.core.service.reportmanager.ReportExecutorServiceImpl.execute(ReportExecutorServiceImpl.java:131)
<br>	at net.datenwerke.rs.base.service.reportengines.table.TableReportUtilsImpl.getReturnedColumns(TableReportUtilsImpl.java:201)
<br>	at net.datenwerke.rs.base.service.reportengines.table.TableReportUtilsImpl.getReturnedPlainColumns(TableReportUtilsImpl.java:155)
<br>	at net.datenwerke.rs.base.server.table.TableReportUtilityServiceImpl.loadColumnDefinition(TableReportUtilityServiceImpl.java:363)
<br>	... 47 more
<br>Caused by: java.sql.SQLSyntaxErrorException: ORA-00923: Schlüsselwort FROM nicht an erwarteter Stelle gefunden<br>
<br>	at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:494)
<br>	at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:446)
<br>	at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1052)
<br>	at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:537)
<br>	at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:255)
<br>	at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:610)
<br>	at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:253)
<br>	at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:86)
<br>	at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:765)
<br>	at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:921)
<br>	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1099)
<br>	at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3640)
<br>	at oracle.jdbc.driver.T4CPreparedStatement.executeInternal(T4CPreparedStatement.java:1384)
<br>	at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3687)
<br>	at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1165)
<br>	at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:1418)
<br>	at net.datenwerke.rs.base.service.datasources.table.impl.TableDBDataSource.open(TableDBDataSource.java:270)
<br>	... 59 more
<br>Caused by: Error : 923, Position : 43, Sql = SELECT * FROM (SELECT * FROM (SELECT &#39;&#39;vier&#39;, &#39;zwei&#39;&#39; PARM FROM DUAL<br>) wrappedQry) limitQry WHERE ROWNUM &lt; 0   /* user: 139175210 */   /* report: 142248709 */   /* token: 3d8c6622-9112-431c-bfe1-fdaeb512b01f */   /* currentuser: 139175210 */ , OriginalSql = SELECT * FROM (SELECT * FROM (SELECT &#39;&#39;vier&#39;, &#39;zwei&#39;&#39; PARM FROM DUAL<br>) wrappedQry) limitQry WHERE ROWNUM &lt; 0   /* user: 139175210 */   /* report: 142248709 */   /* token: 3d8c6622-9112-431c-bfe1-fdaeb512b01f */   /* currentuser: 139175210 */ , Error Msg = ORA-00923: Schlüsselwort FROM nicht an erwarteter Stelle gefunden<br>
<br>	at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:498)
<br>	... 75 more
<br>

Offline

#6 2024-01-22 17:12:07

Marcel Berger
InfoFabrik
Registered: 2012-03-14
Website

Re: Datenquellen Parameter mit Mehrfachselektion in Dynamischer Liste

Hallo Lennart,

nein der Fehler bedeutet, dass im SQL ein Fehler ist.

Gruß
Marcel

Offline

#7 2024-02-02 13:46:03

Lennart Seeger
Member
Registered: 2023-10-24

Re: Datenquellen Parameter mit Mehrfachselektion in Dynamischer Liste

Hallo Marcel,

danke erstmal. Ich habe es mir gerade nochmal angeschaut. Ganz unten in der Fehlermeldung wird fehlerhaftes SQL angezeigt, welches Zeichen in XML?! Kodierung anzeigt. Die habe ich nicht selbst geschrieben. Also müsste es da doch an der Transformation der Variable liegen, oder?

Viele Grüße
Lennart

Offline

Board footer

Powered by FluxBB