BIRT报告阻止执行隐藏的查询

时间:2014-05-16 12:47:34

标签: birt

我有一个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();

}

1 个答案:

答案 0 :(得分:4)

你读到的是正确的。由于执行pipline,仍将执行隐藏表的数据选择。首先获取数据,然后渲染表(隐藏它的地方,但在获取之前没有检查可见性)。如果删除该表,则不会执行查询,因为数据仅在使用之前被提取。

要检查是否执行了选择,您可以将以下内容添加到报告中(并将其删除以供产品使用)。

在数据资源管理器中选择Data Set - >点击Script - >选择onFetch脚本 - >将以下行添加到脚本区域:

reportContext.setPersistentGlobalVariable("tag", "executed");

在报告中添加Dynamic Text - 字段作为内容的最后一个元素:

reportContext.getPersistentGlobalVariable("tag")

如果执行查询,则文本字段显示为“已执行”。如果没有执行则表示“null”或它只是空白。