Discussions
Categories
Groups
Community Home
Categories
INTERNAL ENABLEMENT
POPULAR
THRUST SERVICES & TOOLS
CLOUD EDITIONS
Quick Links
MY LINKS
HELPFUL TIPS
Back to website
Home
Intelligence (Analytics)
Global Javascript variables no longer work in Property Bindings
JCEstep
I'm working on upgrading from Actuate 9 SP3 Fix 3 (BIRT 2.2.2) to Actuate 10 SP1 (BIRT 2.3.2).<br />
<br />
Many of our current reports define and initialize Javascript global variables in the beforeFactory event which are then used in the Property Bindings of various datasets. This has always worked fine in the past, but this new version of BIRT always fails, claiming that the variable is not defined. This also occurs in the non-Actuate BIRT 2.3.2 and BIRT 2.3.2.1 versions.<br />
<br />
I know this isn't a report issue because the same rptdesign works perfectly in Actuate 9 SP3 Fix 3. Also, the Javascript globals still work fine elsewhere in the report (ex: if I define and initialize a Javascript global in the beforeFactory and display it in the report body using a DynamicText element, it works fine). Something has changed with the way BIRT handles the Property Bindings, but I can't figure out what. Is this the result of a new "feature", or is this a bug?<br />
<br />
Replacing the Javascript globals with reportContext.set/getGlobalVariable() calls does work, but this change would have to be done by hand in over 150 individual reports. This is a great deal of work for something that worked fine before.<br />
<br />
These variables are defined in beforeFactory like this:<br />
<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>var testVar = "TEXT";</pre>
<br />
Stack trace from the BIRT log:<br />
<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>org.eclipse.birt.core.exception.CoreException: Error evaluating Javascript expression. Script engine error: ReferenceError: "testVar" is not defined.
...
at org.eclipse.birt.core.script.JavascriptEvalUtil.wrapRhinoException(JavascriptEvalUtil.java:299)
at org.eclipse.birt.core.script.JavascriptEvalUtil.evaluateRawScript(JavascriptEvalUtil.java:102)
at org.eclipse.birt.core.script.JavascriptEvalUtil.evaluateScript(JavascriptEvalUtil.java:134)
at org.eclipse.birt.report.engine.adapter.ModelDteApiAdapter.evaluatePropertyBindingExpr(ModelDteApiAdapter.java:362)
at org.eclipse.birt.report.engine.adapter.ModelDteApiAdapter.newOdaDataSet(ModelDteApiAdapter.java:564)
at org.eclipse.birt.report.engine.adapter.ModelDteApiAdapter.createDataSetDesign(ModelDteApiAdapter.java:216)
at org.eclipse.birt.report.engine.adapter.ModelDteApiAdapter.doDefineDataSet(ModelDteApiAdapter.java:288)
at org.eclipse.birt.report.engine.adapter.ModelDteApiAdapter.defineDataSet(ModelDteApiAdapter.java:247)
at org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.prepare(AbstractDataEngine.java:140)
at org.eclipse.birt.report.engine.executor.ReportExecutor.execute(ReportExecutor.java:118)
at org.eclipse.birt.report.engine.internal.executor.wrap.WrappedReportExecutor.execute(WrappedReportExecutor.java:59)
at org.eclipse.birt.report.engine.internal.executor.emitter.ReportEmitterExecutor.execute(ReportEmitterExecutor.java:76)
at org.eclipse.birt.report.engine.internal.executor.wrap.WrappedReportExecutor.execute(WrappedReportExecutor.java:59)
at org.eclipse.birt.report.engine.internal.executor.dup.SuppressDuplciateReportExecutor.execute(SuppressDuplciateReportExecutor.java:51)
at org.eclipse.birt.report.engine.presentation.ReportDocumentBuilder.build(ReportDocumentBuilder.java:209)
at org.eclipse.birt.report.engine.api.impl.RunTask.doRun(RunTask.java:237)
at org.eclipse.birt.report.engine.api.impl.RunTask.run(RunTask.java:90)
at com.ams.momentum.report.birt.util.BIRTUtil.runAndRenderReport(BIRTUtil.java:67)
at com.ams.momentum.server.impl.BIRTReportServer_Impl.runBIRTReportCheckSave(BIRTReportServer_Impl.java:320)
at com.ams.momentum.server.impl.BIRTReportServer_Impl.runBIRTReport(BIRTReportServer_Impl.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at com.ams.core.server.ServerProxyHandler.invoke(ServerProxyHandler.java:385)
at $Proxy82.runBIRTReport(Unknown Source)
at com.ams.momentum.server.impl.ReportServer_Impl.runReport(ReportServer_Impl.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at com.ams.core.server.ServerProxyHandler.invoke(ServerProxyHandler.java:385)
at $Proxy81.runReport(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at com.ams.core.service.LocalServiceProxyHandler.invoke(LocalServiceProxyHandler.java:166)
at com.ams.core.service.ServiceProxyHandler.invoke(ServiceProxyHandler.java:195)
at $Proxy80.runReport(Unknown Source)
at com.ams.momentum.statemachine.listener.InvokeReportServer.invokeReportServer(InvokeReportServer.java:219)
at com.ams.momentum.statemachine.listener.InvokeReportServer.fireEvent(InvokeReportServer.java:55)
at com.ams.core.statemachine.listener.AbstractStateMachineListener.__fireEvent(AbstractStateMachineListener.java:436)
at com.ams.core.statemachine.StateMachine.executeListener(StateMachine.java:1148)
at com.ams.core.statemachine.StateMachine.executeListener(StateMachine.java:1134)
at com.ams.core.statemachine.StateMachine.applyTransition(StateMachine.java:1104)
at com.ams.core.statemachine.StateMachine.applyEvent(StateMachine.java:635)
at com.ams.core.statemachine.ControllerServlet.doPost(ControllerServlet.java:224)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.ams.core.ui.filters.SecondarySessionIdFilter.doFilter(SecondarySessionIdFilter.java:94)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.ams.core.ui.filters.ExceptionHandlingFilter.doFilter(ExceptionHandlingFilter.java:55)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.ams.momentum.servlet.IPAddressFilter.doFilter(IPAddressFilter.java:52)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.ams.core.ui.filters.ClientIPAddressFilter.doFilter(ClientIPAddressFilter.java:61)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.ams.core.ui.filters.CoreSecurityFilter$1.run(CoreSecurityFilter.java:119)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(Unknown Source)
at weblogic.security.Security.runAs(Security.java:61)
at com.ams.core.appserver.WebLogicCommonUtil.doAsSubject(WebLogicCommonUtil.java:213)
at com.ams.core.appserver.enterprise.WebLogicAppServerUtil.doAsSubject(WebLogicAppServerUtil.java:192)
at com.ams.core.ui.filters.CoreSecurityFilter.performAction(CoreSecurityFilter.java:116)
at com.ams.core.ui.filters.CoreSecurityFilter.doFilter(CoreSecurityFilter.java:93)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.ams.core.ui.filters.SessionFilter.doFilter(SessionFilter.java:81)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.ams.core.ui.filters.CompressionFilter.doFilter(CompressionFilter.java:200)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3393)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(Unknown Source)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2140)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2046)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1366)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)
Caused by: org.mozilla.javascript.EcmaError: ReferenceError: "testVar" is not defined.
at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3350)
at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3340)
at org.mozilla.javascript.ScriptRuntime.notFoundError(ScriptRuntime.java:3413)
at org.mozilla.javascript.ScriptRuntime.nameOrFunction(ScriptRuntime.java:1678)
at org.mozilla.javascript.ScriptRuntime.name(ScriptRuntime.java:1617)
at org.mozilla.javascript.gen.c8._c0(<inline>:0)
at org.mozilla.javascript.gen.c8.call(<inline>)
at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:393)
at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:2834)
at org.mozilla.javascript.gen.c8.call(<inline>)
at org.mozilla.javascript.gen.c8.exec(<inline>)
at org.eclipse.birt.core.script.JavascriptEvalUtil.evaluateRawScript(JavascriptEvalUtil.java:95)
... 82 more</pre>
Find more posts tagged with
Comments
JCEstep
It appears that the Javascript global variables do work if I move them to the initialize event instead of beforeFactory. This leads me to believe that the beforeFactory event has been moved to a later position in the BIRT execution order.
Does anyone know why this was done, and if there is any way to override this change?