Discussions
Categories
Groups
Community Home
Categories
INTERNAL ENABLEMENT
POPULAR
PUBLIC CLOUD
PRIVATE CLOUD
Quick Links
MY LINKS
HELPFUL TIPS
Back to website
Home
Intelligence (Analytics)
BIRT, MongoDB and variable which sometimes does not exist
storoge
<p>I use BIRT Designer Version 4.5.0.v201506092134 Build and MongoDB 3.2.<br>
I use FindQuery for my query expression:<br>
</p>
<pre class="_prettyXprint _lang-js">
{
$and: [ {"creatorDeptId": {$exists: true}},
{"claimCreate" : {$exists: true}},
{"customClaimNumber" : {$exists: true}},
{ "currStatus.statusCode" : {$exists: true}},
{ "service.name" : {$exists: true}},
{"daysToDeadline" : {$exists: true}},
{"service.srguServicePassportId" : {$exists: true}},
{"service.srguDepartmentName" : {$exists: true}},
{"oktmo": { $regex: "^46" }},
{"creatorDeptId": { $regex: "mfc-" }},
{"claimCreate" : { $lte: { $date: "2016-10-07T23:59:59Z" }, $gte: { $date: "2016-10-01T00:00:00Z" } }}]
}
</pre>
<p>In MongoDB the amount of fields in the collection's record are not fixed.<br>
Some of the fields for a particular record may not exist.<br>
I need to display in the report exactly such a field.<br>
Ideally, if the field exists, it is displayed, if does not exist, it is displayed whitespace.<br><br>
When you try to display this field directly BIRT reports an error.</p>
<blockquote class="ipsBlockquote">
<p> </p>
<p>org.eclipse.birt.report.engine.api.EngineException: Column binding "Column Binding_1" has referred to a data set column "claimOperationInfo.issueOperatorFio" which does not exist.<br>
at org.eclipse.birt.report.engine.executor.ExecutionContext.addException(ExecutionContext.java:1245)<br>
at org.eclipse.birt.report.engine.executor.ExecutionContext.addException(ExecutionContext.java:1224)<br>
at org.eclipse.birt.report.engine.executor.QueryItemExecutor.executeQuery(QueryItemExecutor.java:96)<br>
at org.eclipse.birt.report.engine.executor.TableItemExecutor.execute(TableItemExecutor.java:62)<br>
at org.eclipse.birt.report.engine.internal.executor.dup.SuppressDuplicateItemExecutor.execute(SuppressDuplicateItemExecutor.java:43)<br>
at org.eclipse.birt.report.engine.internal.executor.wrap.WrappedReportItemExecutor.execute(WrappedReportItemExecutor.java:46)<br>
at org.eclipse.birt.report.engine.internal.executor.l18n.LocalizedReportItemExecutor.execute(LocalizedReportItemExecutor.java:34)<br>
at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:65)<br>
at org.eclipse.birt.report.engine.layout.html.HTMLPageLM.layout(HTMLPageLM.java:92)<br>
at org.eclipse.birt.report.engine.layout.html.HTMLReportLayoutEngine.layout(HTMLReportLayoutEngine.java:100)<br>
at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:181)<br>
at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.run(RunAndRenderTask.java:77)<br>
at org.eclipse.birt.report.service.ReportEngineService.runAndRenderReport(ReportEngineService.java:937)<br>
at org.eclipse.birt.report.service.BirtViewerReportService.runAndRenderReport(BirtViewerReportService.java:973)<br>
at org.eclipse.birt.report.service.actionhandler.BirtRunAndRenderActionHandler.__execute(BirtRunAndRenderActionHandler.java:76)<br>
at org.eclipse.birt.report.service.actionhandler.AbstractBaseActionHandler.execute(AbstractBaseActionHandler.java:90)<br>
at org.eclipse.birt.report.presentation.aggregation.layout.EngineFragment.doService(EngineFragment.java:318)<br>
at org.eclipse.birt.report.presentation.aggregation.AbstractBaseFragment.service(AbstractBaseFragment.java:76)<br>
at org.eclipse.birt.report.servlet.BirtEngineServlet.__doGet(BirtEngineServlet.java:116)<br>
at org.eclipse.birt.report.servlet.BaseReportEngineServlet.doGet(BaseReportEngineServlet.java:185)<br>
at org.eclipse.birt.report.servlet.BaseReportEngineServlet.doPost(BaseReportEngineServlet.java:224)<br>
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)<br>
at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)<br>
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)<br>
at org.eclipse.birt.report.servlet.BaseReportEngineServlet.service(BaseReportEngineServlet.java:116)<br>
at org.eclipse.equinox.http.registry.internal.ServletManager$ServletWrapper.service(ServletManager.java:180)<br>
at org.eclipse.equinox.http.servlet.internal.HttpServiceRuntimeImpl$LegacyServlet.service(HttpServiceRuntimeImpl.java:1232)<br>
at org.eclipse.equinox.http.servlet.internal.registration.EndpointRegistration.service(EndpointRegistration.java:153)<br>
at org.eclipse.equinox.http.servlet.internal.servlet.ResponseStateHandler.processRequest(ResponseStateHandler.java:63)<br>
at org.eclipse.equinox.http.servlet.internal.context.DispatchTargets.doDispatch(DispatchTargets.java:98)<br>
at org.eclipse.equinox.http.servlet.internal.HttpServiceRuntimeImpl.doDispatch(HttpServiceRuntimeImpl.java:372)<br>
at org.eclipse.equinox.http.servlet.internal.servlet.ProxyServlet.service(ProxyServlet.java:70)<br>
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)<br>
at org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet.service(HttpServerManager.java:363)<br>
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808)<br>
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)<br>
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221)<br>
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)<br>
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)<br>
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)<br>
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)<br>
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)<br>
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)<br>
at org.eclipse.jetty.server.Server.handle(Server.java:499)<br>
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)<br>
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)<br>
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)<br>
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)<br>
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)<br>
at java.lang.Thread.run(Unknown Source)<br>
Caused by: org.eclipse.birt.data.engine.core.DataException: Column binding "Column Binding_1" has referred to a data set column "claimOperationInfo.issueOperatorFio" which does not exist.<br>
at org.eclipse.birt.data.engine.impl.ResultIterator.validateManualBindingExpressions(ResultIterator.java:380)<br>
at org.eclipse.birt.data.engine.impl.ResultIterator.<init>(ResultIterator.java:148)<br>
at org.eclipse.birt.data.engine.impl.QueryResults.getResultIterator(QueryResults.java:222)<br>
at org.eclipse.birt.report.engine.data.dte.QueryResultSet.<init>(QueryResultSet.java:98)<br>
at org.eclipse.birt.report.engine.data.dte.DteDataEngine.doExecuteQuery(DteDataEngine.java:168)<br>
at org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.execute(AbstractDataEngine.java:285)<br>
at org.eclipse.birt.report.engine.executor.ExecutionContext.executeQuery(ExecutionContext.java:1947)<br>
at org.eclipse.birt.report.engine.executor.QueryItemExecutor.executeQuery(QueryItemExecutor.java:80)<br>
... 47 more</p>
</blockquote>
<p>
I have tried to use a different design for cut-off non-existent in "computed columns" or directly in expression builder.<br>
For example,</p>
<pre class="_prettyXprint">
if (typeof(row["claimOperationInfo.issueOperatorFio"])!=='undefined') {row["claimOperationInfo.issueOperatorFio"]}
else {""}</pre>
<p>
or</p>
<pre class="_prettyXprint">
new String(dataSetRow["claimOperationInfo.issueOperatorFio"]) + " "</pre>
<p>All attempts were unsuccessful.</p>
<blockquote class="ipsBlockquote">org.eclipse.birt.report.engine.api.EngineException: Fail to compute value for computed column "Oper". A BIRT exception occurred. See next exception for more information. There are errors evaluating script "if ( typeof(row["claimOperationInfo.issueOperatorFio"])!=='undefined') {row["claimOperationInfo.issueOperatorFio"]} else {""}": Invalid field name: claimOperationInfo.issueOperatorFio.
<p> </p>
</blockquote>
<p> </p>
<p><br>
How can I output in the BIRT report in the form of table fields that are not present in all records of a MongoDB collection?</p>
Find more posts tagged with
Comments
Paul Arkell
<p>Hi, I'm dealing with the same types of issues..... report fails with '<b>Column binding "****" has referred to a data set column "****" which does not exist' </b>errors within the report when there is no data returned in the dataset. </p>
<p> </p>
<p>Is there a solution to this problem?</p>
Diljeet
<p>Hi, I am also getting similar kind of error when I try to deploy my report on apache tomcat server.</p>
<p>Exception : <b><span>org.eclipse.birt.report.engine.api.EngineException: Column binding "newstartsate" has referred to a data set column "newstartsate" which does not exist.</span></b></p>
<p>I have not used <b><span>newstartsate column anywhere in my report. </span></b></p>
<p><b><span>Below is the full stacktrace:</span></b></p>
<p> </p>
<div>
<div>
<div style="font-size:8pt;">
<div><span style="font-family:monospace;">org.eclipse.birt.report.engine.api.EngineException: Column binding "newstartsate" has referred to a data set column "newstartsate" which does not exist.<br>
at org.eclipse.birt.report.engine.executor.ExecutionContext.addException(ExecutionContext.java:1239)<br>
at org.eclipse.birt.report.engine.executor.ExecutionContext.addException(ExecutionContext.java:1218)<br>
at org.eclipse.birt.report.engine.executor.QueryItemExecutor.executeQuery(QueryItemExecutor.java:96)<br>
at org.eclipse.birt.report.engine.executor.TableItemExecutor.execute(TableItemExecutor.java:62)<br>
at org.eclipse.birt.report.engine.internal.executor.wrap.WrappedReportItemExecutor.execute(WrappedReportItemExecutor.java:46)<br>
at org.eclipse.birt.report.engine.internal.executor.emitter.ReportItemEmitterExecutor.execute(ReportItemEmitterExecutor.java:46)<br>
at org.eclipse.birt.report.engine.internal.executor.dup.SuppressDuplicateItemExecutor.execute(SuppressDuplicateItemExecutor.java:43)<br>
at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:65)<br>
at org.eclipse.birt.report.engine.layout.html.HTMLPageLM.layout(HTMLPageLM.java:92)<br>
at org.eclipse.birt.report.engine.layout.html.HTMLReportLayoutEngine.layout(HTMLReportLayoutEngine.java:100)<br>
at org.eclipse.birt.report.engine.presentation.ReportDocumentBuilder.build(ReportDocumentBuilder.java:258)<br>
at org.eclipse.birt.report.engine.api.impl.RunTask.doRun(RunTask.java:269)<br>
at org.eclipse.birt.report.engine.api.impl.RunTask.run(RunTask.java:86)<br>
at org.eclipse.birt.report.service.ReportEngineService.runReport(ReportEngineService.java:1325)<br>
at org.eclipse.birt.report.service.BirtViewerReportService.runReport(BirtViewerReportService.java:158)<br>
at org.eclipse.birt.report.service.actionhandler.BirtRunReportActionHandler.__execute(BirtRunReportActionHandler.java:81)<br>
at org.eclipse.birt.report.service.actionhandler.BirtChangeParameterActionHandler.runReport(BirtChangeParameterActionHandler.java:58)<br>
at org.eclipse.birt.report.service.actionhandler.AbstractChangeParameterActionHandler.__execute(AbstractChangeParameterActionHandler.java:53)<br>
at org.eclipse.birt.report.service.actionhandler.AbstractBaseActionHandler.execute(AbstractBaseActionHandler.java:90)<br>
at org.eclipse.birt.report.soapengine.processor.AbstractBaseDocumentProcessor.__executeAction(AbstractBaseDocumentProcessor.java:47)<br>
at org.eclipse.birt.report.soapengine.processor.AbstractBaseComponentProcessor.executeAction(AbstractBaseComponentProcessor.java:143)<br>
at org.eclipse.birt.report.soapengine.processor.BirtDocumentProcessor.handleChangeParameter(BirtDocumentProcessor.java:100)<br>
at sun.reflect.GeneratedMethodAccessor53.invoke(Unknown Source)<br>
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br>
at java.lang.reflect.Method.invoke(Method.java:498)<br>
at org.eclipse.birt.report.soapengine.processor.AbstractBaseComponentProcessor.process(AbstractBaseComponentProcessor.java:112)<br>
at org.eclipse.birt.report.soapengine.endpoint.BirtSoapBindingImpl.getUpdatedObjects(BirtSoapBindingImpl.java:66)<br>
at sun.reflect.GeneratedMethodAccessor52.invoke(Unknown Source)<br>
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br>
at java.lang.reflect.Method.invoke(Method.java:498)<br>
at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)<br>
at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)<br>
at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)<br>
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)<br>
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)<br>
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)<br>
at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454)<br>
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)<br>
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)<br>
at org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherServlet.doPost(BirtSoapMessageDispatcherServlet.java:265)<br>
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)<br>
at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)<br>
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)<br>
at org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherServlet.service(BirtSoapMessageDispatcherServlet.java:122)<br>
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)<br>
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)<br>
at org.eclipse.birt.report.filter.ViewerFilter.doFilter(ViewerFilter.java:68)<br>
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)<br>
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)<br>
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)<br>
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)<br>
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)<br>
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)<br>
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)<br>
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)<br>
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)<br>
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)<br>
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)<br>
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)<br>
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)<br>
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)<br>
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)<br>
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)<br>
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)<br>
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)<br>
at java.lang.Thread.run(Thread.java:745)<br>
Caused by: org.eclipse.birt.data.engine.core.DataException: Column binding "newstartsate" has referred to a data set column "newstartsate" which does not exist.<br>
at org.eclipse.birt.data.engine.impl.ResultIterator.validateManualBindingExpressions(ResultIterator.java:380)<br>
at org.eclipse.birt.data.engine.impl.ResultIterator.(ResultIterator.java:148)<br>
at org.eclipse.birt.data.engine.impl.QueryResults.getResultIterator(QueryResults.java:215)<br>
at org.eclipse.birt.report.engine.data.dte.QueryResultSet.(QueryResultSet.java:98)<br>
at org.eclipse.birt.report.engine.data.dte.DteDataEngine.doExecuteQuery(DteDataEngine.java:168)<br>
at org.eclipse.birt.report.engine.data.dte.DataGenerationEngine.doExecuteQuery(DataGenerationEngine.java:83)<br>
at org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.execute(AbstractDataEngine.java:267)<br>
at org.eclipse.birt.report.engine.executor.ExecutionContext.executeQuery(ExecutionContext.java:1941)<br>
at org.eclipse.birt.report.engine.executor.QueryItemExecutor.executeQuery(QueryItemExecutor.java:80)<br>
... 63 more</span></div>
</div>
</div>
<p> </p>
<p> </p>
</div>
<div style="text-align:center;">
<div>
<div style="background-color:#808080;"> </div>
<div style="background-color:rgb(254,254,254);"> </div>
</div>
<div style="text-align:right;">
<div style="margin:6px 0px 7px auto;">
<div style="color:#000000;">
<div style="background-color:rgb(156,156,156);font-family:'Times New Roman';font-size:medium;"> </div>
</div>
</div>
</div>
</div>
paularkell
<p>Hopefully this will be of use...</p>
<p>For fields which may or may not exist, I've found that I can force a value, null or empty string into a field using $ifNull in $project. eg.</p>
<p> </p>
<p>{$project:{</p>
<p> "newFieldName":{$ifNull:["$fieldName",""]}</p>
<p>}</p>
<p> </p>
<p>this results in an empty string in if the value is null or the fieldName if the value is not null.</p>