我有一个BIRT报告,其中有许多表根据传递给报告的参数设置为不可见。
我在互联网上读到,除非我在beforeFactory脚本中删除表,否则绑定到这些表的查询仍将执行。除了删除表之外,我还需要删除查询吗?或者正在删除查询绑定到足以使查询不被执行的表?
无论如何,我可以判断这些隐藏的查询是否已被执行?
这是我的beforeFactory脚本,它显示了我如何删除表....
var tblPriceOverrideDetailDesc = reportContext.getReportRunnable().designHandle.getDesignHandle().findElement("tblPriceOverrideDetailDesc");
var tblPriceOverrideDetailAsc = reportContext.getReportRunnable().designHandle.getDesignHandle().findElement("tblPriceOverrideDetailAsc");
var tblPriceOverrideDetailExclConcessionDesc = reportContext.getReportRunnable().designHandle.getDesignHandle().findElement("tblPriceOverrideDetailExclConcessionDesc");
var tblPriceOverrideDetailExclConcessionAsc = reportContext.getReportRunnable().designHandle.getDesignHandle().findElement("tblPriceOverrideDetailExclConcessionAsc");
if ( ((params["bp_sortType"].value).equals("DESC") && params["bp_excludeConcessionInd"].value != null)
|| (params["bp_sortType"].value).equals("ASC") ){
tblPriceOverrideDetailDesc.drop();
} else if( ((params["bp_sortType"].value).equals("ASC") && params["bp_excludeConcessionInd"].value != null)
|| (params["bp_sortType"].value).equals("DESC") ){
tblPriceOverrideDetailAsc.drop();
} else if( ((params["bp_sortType"].value).equals("DESC") && params["bp_excludeConcessionInd"].value == null)
|| (params["bp_sortType"].value).equals("ASC") ){
tblPriceOverrideDetailExclConcessionDesc.drop();
}else if( ((params["bp_sortType"].value).equals("ASC") && params["bp_excludeConcessionInd"].value == null)
|| (params["bp_sortType"].value).equals("DESC") ){
tblPriceOverrideDetailExclConcessionAsc.drop();
}
答案 0 :(得分:4)
你读到的是正确的。由于执行pipline,仍将执行隐藏表的数据选择。首先获取数据,然后渲染表(隐藏它的地方,但在获取之前没有检查可见性)。如果删除该表,则不会执行查询,因为数据仅在使用之前被提取。
要检查是否执行了选择,您可以将以下内容添加到报告中(并将其删除以供产品使用)。
在数据资源管理器中选择Data Set
- >点击Script
- >选择onFetch
脚本 - >将以下行添加到脚本区域:
reportContext.setPersistentGlobalVariable("tag", "executed");
在报告中添加Dynamic Text
- 字段作为内容的最后一个元素:
reportContext.getPersistentGlobalVariable("tag")
如果执行查询,则文本字段显示为“已执行”。如果没有执行则表示“null”或它只是空白。