2014-05-16 28 views
2

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

} 
+0

如果您使用的是SQL 2008 R2,則可以使用[SQL跟蹤](http://technet.microsoft.com/zh-cn/library/ms191006%28v=sql.105%29.aspx)查看是否查詢在數據庫中運行。當我這樣做時,我在SQL中添加了一個唯一字符串的註釋,以便在跟蹤中查找(即BirtSQLTrace1) –

回答

4

你讀什麼是正確的。由於執行管道,隱藏表的數據選擇仍將被執行。首先獲取數據,然後表格被渲染(隱藏的地方,但在獲取之前沒有檢查可見性)。如果表被刪除,查詢將不會被執行,因爲數據只在使用之前被提取。

要檢查選擇是否被執行,您可以將以下內容添加到您的報告中(並將其刪除以供產品使用)。

在數據資源管理器中選擇您的Data Set - >點擊Script - >選擇onFetch腳本 - >添加follwoing行成紙條區域:

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

添加Dynamic Text已場內您的報告最後一個與內容相關的元素:

reportContext.getPersistentGlobalVariable("tag") 

如果執行查詢,文本字段顯示「已執行」。如果未執行,則表示「null」或僅爲空白。

+0

謝謝我今天會試一試。 Gr8回答 – Richie

+0

關於您的測試方式以確認的問題。你所建議的與以不同的方式命名錶中的列是不同的。例如,如果我有四個表,我將分別命名每個表a,b,c,d中的第一列。那麼如果只有一個出現,我知道其餘的都沒有執行?這是我一直在測試可見性的方式 – Richie