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)
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>