Home
Designing Analytics Reports
BIRT, MongoDB and variable which sometimes does not exist
Migrateduser
<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
There are no comments yet