Bonjour,
Je me demandais si c'est moi ou si c'est une véritable régression de BIRT.
Mes états sont composés exclusivement de ScriptedDataSet mais apparement il y a un problèmes de reconnaissance des variables quand il s'agit de remplir mon DataSet via le script.
Disons que j'ai un DataSet Personne avec id, nom, prenom, age.
Je passe en paramètres "personnes" une ArrayList remplie d'objets de type Personne.
Dans le open du DataSet Personne je fais :
Code javascript :
1 2 3 4 5
| personnes = params["personnes"];
nbLignes = 0;
if (personnes != null)
nbLignes = personnes.size();
ligneEnCours = 0; |
fetch :
Code javascript :
1 2 3 4 5 6 7 8 9 10
| if (ligneEnCours >= nbLignes)
return false;
var personne = personnes.get(ligneEnCours);
row["Id"] = personne.getId();
row["Nom"] = personne.getNom();
row["Prenom"] = personne.getPrenom();
row["Age"] = personne.getAge();
ligneEnCours++;
return true; |
close :
Code javascript :
personnes = null;
Seulement, une exception est générée :
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
| 14 mars 2007 11:36:44 org.eclipse.birt.report.engine.script.internal.DtEScriptExecutor handleJS
ATTENTION: A BIRT exception occurred: Error evaluating Javascript expression. Script engine error: ReferenceError: "ligneEnCours" n'est pas défini (DataSet[Personne].__bm_FETCH#2)
Script source: DataSet[Personne].__bm_FETCH, line: 1, text:
__bm_FETCH(). See next exception for more information.
Error evaluating Javascript expression. Script engine error: ReferenceError: "ligneEnCours" n'est pas défini (DataSet[Personne].__bm_FETCH#2)
Script source: DataSet[Personne].__bm_FETCH, line: 1, text:
__bm_FETCH()
org.eclipse.birt.data.engine.core.DataException: A BIRT exception occurred: Error evaluating Javascript expression. Script engine error: ReferenceError: "ligneEnCours" n'est pas défini (DataSet[Personne].__bm_FETCH#2)
Script source: DataSet[Personne].__bm_FETCH, line: 1, text:
__bm_FETCH(). See next exception for more information.
Error evaluating Javascript expression. Script engine error: ReferenceError: "ligneEnCours" n'est pas défini (DataSet[Personne].__bm_FETCH#2)
Script source: DataSet[Personne].__bm_FETCH, line: 1, text:
__bm_FETCH()
at org.eclipse.birt.data.engine.core.DataException.wrap(DataException.java:118)
at org.eclipse.birt.data.engine.script.ScriptEvalUtil.evaluateJSAsExpr(ScriptEvalUtil.java:552)
at org.eclipse.birt.data.engine.script.JSMethodRunner.runScript(JSMethodRunner.java:79)
at org.eclipse.birt.report.engine.script.internal.DtEScriptExecutor.handleJS(DtEScriptExecutor.java:71)
at org.eclipse.birt.report.engine.script.internal.DataSetScriptExecutor.handleJS(DataSetScriptExecutor.java:159)
at org.eclipse.birt.report.engine.script.internal.ScriptDataSetScriptExecutor.handleFetch(ScriptDataSetScriptExecutor.java:100)
at org.eclipse.birt.data.engine.impl.ScriptDataSetRuntime.fetch(ScriptDataSetRuntime.java:84)
at org.eclipse.birt.data.engine.impl.PreparedScriptDSQuery$ScriptDSQueryExecutor$CustomDataSet.fetch(PreparedScriptDSQuery.java:247)
at org.eclipse.birt.data.engine.executor.cache.OdiAdapter.fetch(OdiAdapter.java:148)
at org.eclipse.birt.data.engine.executor.cache.RowResultSet.next(RowResultSet.java:91)
at org.eclipse.birt.data.engine.executor.cache.ExpandableRowResultSet.next(ExpandableRowResultSet.java:62)
at org.eclipse.birt.data.engine.executor.cache.SmartCacheHelper.populateData(SmartCacheHelper.java:275)
at org.eclipse.birt.data.engine.executor.cache.SmartCacheHelper.initInstance(SmartCacheHelper.java:250)
at org.eclipse.birt.data.engine.executor.cache.SmartCacheHelper.getResultSetCache(SmartCacheHelper.java:213)
at org.eclipse.birt.data.engine.executor.cache.SmartCache.<init>(SmartCache.java:66)
at org.eclipse.birt.data.engine.executor.transform.pass.PassUtil.populateOdiResultSet(PassUtil.java:111)
at org.eclipse.birt.data.engine.executor.transform.pass.PassUtil.pass(PassUtil.java:66)
at org.eclipse.birt.data.engine.executor.transform.pass.PassManager.doSinglePass(PassManager.java:123)
at org.eclipse.birt.data.engine.executor.transform.pass.PassManager.pass(PassManager.java:83)
at org.eclipse.birt.data.engine.executor.transform.pass.PassManager.populateResultSet(PassManager.java:65)
at org.eclipse.birt.data.engine.executor.transform.ResultSetPopulator.populateResultSet(ResultSetPopulator.java:210)
at org.eclipse.birt.data.engine.executor.transform.CachedResultSet.<init>(CachedResultSet.java:124)
at org.eclipse.birt.data.engine.executor.CandidateQuery.execute(CandidateQuery.java:106)
at org.eclipse.birt.data.engine.impl.PreparedScriptDSQuery$ScriptDSQueryExecutor.executeOdiQuery(PreparedScriptDSQuery.java:213)
at org.eclipse.birt.data.engine.impl.QueryExecutor.execute(QueryExecutor.java:743)
at org.eclipse.birt.data.engine.impl.ServiceForQueryResults.executeQuery(ServiceForQueryResults.java:183)
at org.eclipse.birt.data.engine.impl.QueryResults.getResultIterator(QueryResults.java:148)
at org.eclipse.birt.report.engine.data.dte.DteResultSet.<init>(DteResultSet.java:85)
at org.eclipse.birt.report.engine.data.dte.DteDataEngine.doExecuteQuery(DteDataEngine.java:120)
at org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.execute(AbstractDataEngine.java:210)
at org.eclipse.birt.report.engine.executor.ExecutionContext.executeQuery(ExecutionContext.java:1641)
at org.eclipse.birt.report.engine.executor.QueryItemExecutor.executeQuery(QueryItemExecutor.java:62)
at org.eclipse.birt.report.engine.executor.TableItemExecutor.execute(TableItemExecutor.java:73)
at org.eclipse.birt.report.engine.internal.executor.l18n.LocalizedReportItemExecutor.execute(LocalizedReportItemExecutor.java:35)
at org.eclipse.birt.report.engine.layout.content.BlockStackingExecutor.getNextChild(BlockStackingExecutor.java:47)
at org.eclipse.birt.report.engine.layout.pdf.PDFBlockStackingLM.traverseChildren(PDFBlockStackingLM.java:69)
at org.eclipse.birt.report.engine.layout.pdf.PDFStackingLM.layoutChildren(PDFStackingLM.java:120)
at org.eclipse.birt.report.engine.layout.pdf.PDFPageLM.layout(PDFPageLM.java:210)
at org.eclipse.birt.report.engine.layout.pdf.PDFReportLayoutEngine.layoutReport(PDFReportLayoutEngine.java:60)
at org.eclipse.birt.report.engine.layout.pdf.PDFReportLayoutEngine.layout(PDFReportLayoutEngine.java:97)
at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:205)
at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.run(RunAndRenderTask.java:142)
[... J'enlève ce morceau pour raisons professionnelles :) Comprenez que l'erreur se fait bien à partir du run(); ...]
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.holydis.quark.common.filter.SecurityFilter.doFilter(SecurityFilter.java:92)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:534)
Caused by: org.eclipse.birt.core.exception.CoreException: Error evaluating Javascript expression. Script engine error: ReferenceError: "ligneEnCours" n'est pas défini (DataSet[Personne].__bm_FETCH#2)
Script source: DataSet[Personne].__bm_FETCH, line: 1, text:
__bm_FETCH()
at org.eclipse.birt.core.script.JavascriptEvalUtil.wrapRhinoException(JavascriptEvalUtil.java:281)
at org.eclipse.birt.core.script.JavascriptEvalUtil.evaluateRawScript(JavascriptEvalUtil.java:105)
at org.eclipse.birt.core.script.JavascriptEvalUtil.evaluateScript(JavascriptEvalUtil.java:137)
at org.eclipse.birt.data.engine.script.ScriptEvalUtil.evaluateJSAsExpr(ScriptEvalUtil.java:548)
... 73 more
Caused by: org.mozilla.javascript.EcmaError: ReferenceError: "ligneEnCours" n'est pas défini (DataSet[Personne].__bm_FETCH#2)
at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3240)
at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3230)
at org.mozilla.javascript.ScriptRuntime.notFoundError(ScriptRuntime.java:3303)
at org.mozilla.javascript.ScriptRuntime.nameOrFunction(ScriptRuntime.java:1632)
at org.mozilla.javascript.ScriptRuntime.name(ScriptRuntime.java:1571)
at org.mozilla.javascript.gen.c17._c1(DataSet[Personne].__bm_FETCH:2)
at org.mozilla.javascript.gen.c17.call(DataSet[Personne].__bm_FETCH)
at org.mozilla.javascript.optimizer.OptRuntime.callName0(OptRuntime.java:105)
at org.mozilla.javascript.gen.c13._c0(DataSet[Structure].__bm_FETCH:1)
at org.mozilla.javascript.gen.c13.call(DataSet[Structure].__bm_FETCH)
at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:304)
at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:2769)
at org.mozilla.javascript.gen.c13.call(DataSet[Structure].__bm_FETCH)
at org.mozilla.javascript.gen.c13.exec(DataSet[Structure].__bm_FETCH)
at org.eclipse.birt.core.script.JavascriptEvalUtil.evaluateRawScript(JavascriptEvalUtil.java:98)
... 75 more
14 mars 2007 11:36:44 org.eclipse.birt.report.engine.script.internal.ScriptExecutor addException
ATTENTION: data.engine.BadFetchScriptReturnType
org.eclipse.birt.data.engine.core.DataException: data.engine.BadFetchScriptReturnType
at org.eclipse.birt.report.engine.script.internal.ScriptDataSetScriptExecutor.handleFetch(ScriptDataSetScriptExecutor.java:109)
at org.eclipse.birt.data.engine.impl.ScriptDataSetRuntime.fetch(ScriptDataSetRuntime.java:84)
at org.eclipse.birt.data.engine.impl.PreparedScriptDSQuery$ScriptDSQueryExecutor$CustomDataSet.fetch(PreparedScriptDSQuery.java:247)
at org.eclipse.birt.data.engine.executor.cache.OdiAdapter.fetch(OdiAdapter.java:148)
at org.eclipse.birt.data.engine.executor.cache.RowResultSet.next(RowResultSet.java:91)
at org.eclipse.birt.data.engine.executor.cache.ExpandableRowResultSet.next(ExpandableRowResultSet.java:62)
at org.eclipse.birt.data.engine.executor.cache.SmartCacheHelper.populateData(SmartCacheHelper.java:275)
at org.eclipse.birt.data.engine.executor.cache.SmartCacheHelper.initInstance(SmartCacheHelper.java:250)
at org.eclipse.birt.data.engine.executor.cache.SmartCacheHelper.getResultSetCache(SmartCacheHelper.java:213)
at org.eclipse.birt.data.engine.executor.cache.SmartCache.<init>(SmartCache.java:66)
at org.eclipse.birt.data.engine.executor.transform.pass.PassUtil.populateOdiResultSet(PassUtil.java:111)
at org.eclipse.birt.data.engine.executor.transform.pass.PassUtil.pass(PassUtil.java:66)
at org.eclipse.birt.data.engine.executor.transform.pass.PassManager.doSinglePass(PassManager.java:123)
at org.eclipse.birt.data.engine.executor.transform.pass.PassManager.pass(PassManager.java:83)
at org.eclipse.birt.data.engine.executor.transform.pass.PassManager.populateResultSet(PassManager.java:65)
at org.eclipse.birt.data.engine.executor.transform.ResultSetPopulator.populateResultSet(ResultSetPopulator.java:210)
at org.eclipse.birt.data.engine.executor.transform.CachedResultSet.<init>(CachedResultSet.java:124)
at org.eclipse.birt.data.engine.executor.CandidateQuery.execute(CandidateQuery.java:106)
at org.eclipse.birt.data.engine.impl.PreparedScriptDSQuery$ScriptDSQueryExecutor.executeOdiQuery(PreparedScriptDSQuery.java:213)
at org.eclipse.birt.data.engine.impl.QueryExecutor.execute(QueryExecutor.java:743)
at org.eclipse.birt.data.engine.impl.ServiceForQueryResults.executeQuery(ServiceForQueryResults.java:183)
at org.eclipse.birt.data.engine.impl.QueryResults.getResultIterator(QueryResults.java:148)
at org.eclipse.birt.report.engine.data.dte.DteResultSet.<init>(DteResultSet.java:85)
at org.eclipse.birt.report.engine.data.dte.DteDataEngine.doExecuteQuery(DteDataEngine.java:120)
at org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.execute(AbstractDataEngine.java:210)
at org.eclipse.birt.report.engine.executor.ExecutionContext.executeQuery(ExecutionContext.java:1641)
at org.eclipse.birt.report.engine.executor.QueryItemExecutor.executeQuery(QueryItemExecutor.java:62)
at org.eclipse.birt.report.engine.executor.TableItemExecutor.execute(TableItemExecutor.java:73)
at org.eclipse.birt.report.engine.internal.executor.l18n.LocalizedReportItemExecutor.execute(LocalizedReportItemExecutor.java:35)
at org.eclipse.birt.report.engine.layout.content.BlockStackingExecutor.getNextChild(BlockStackingExecutor.java:47)
at org.eclipse.birt.report.engine.layout.pdf.PDFBlockStackingLM.traverseChildren(PDFBlockStackingLM.java:69)
at org.eclipse.birt.report.engine.layout.pdf.PDFStackingLM.layoutChildren(PDFStackingLM.java:120)
at org.eclipse.birt.report.engine.layout.pdf.PDFPageLM.layout(PDFPageLM.java:210)
at org.eclipse.birt.report.engine.layout.pdf.PDFReportLayoutEngine.layoutReport(PDFReportLayoutEngine.java:60)
at org.eclipse.birt.report.engine.layout.pdf.PDFReportLayoutEngine.layout(PDFReportLayoutEngine.java:97)
at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:205)
at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.run(RunAndRenderTask.java:142)
[... J'enlève ce morceau pour raisons professionnelles :) Comprenez que l'erreur se fait bien à partir du run(); ...]
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.holydis.quark.common.filter.SecurityFilter.doFilter(SecurityFilter.java:92)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:534)
14 mars 2007 11:36:44 org.eclipse.birt.data.engine.executor.cache.SmartCacheHelper populateData
INFO: MemoryCache is used |
En gros, cette exception nous explique gentillement que ligneEnCours n'a pas été initialisé !!
J'ai regardé dans les rapports de bugs, cette erreur avait déjà été signalée en 2005 puis corrigée mais apparement, elle est de retour !
Est-ce que quelqu'un arrive à utiliser les Scripted DataSet avec BIRT 2.1.2 ?
Merci
PS : C'est depuis que je suis passée de la version 2.1.0 à 2.1.2.