在 Web 應用程式中,我有使用水晶報表以及 ReportDocument.ExportToDisk 和 ReportDocument.ExportToStream 方法生成 PDF 檔案的代碼。我正在使用 64 位晶體運行時 v13 SP31。使用 SetDataSource 方法將所有資料庫資料直接推送到每個報表。
當我從網頁的代碼隱藏中呼叫代碼時,它會完美執行并生成可用的 pdf。
對于應用程式中的某些(不是全部)報告,當我從使用 QueueBackgroundWorkItem 生成的后臺任務中呼叫完全相同的代碼時,它的行為會有所不同并生成例外。到目前為止,我得到的例外型別要么是與報表中的公式欄位相關的虛假“此處需要一個字串”例外,要么是與所有子報表引數相關的“缺少引數”例外(盡管所有子報表引數都是鏈接到等效的主要報告引數)。
各個報告的問題似乎是一致的(即,每次在后臺運行該報告時都會發生相同的錯誤) - 但并非應用程式中的每個報告都受到影響。到目前為止,在每種情況下,如果從代碼隱藏運行或在報表設計器中預覽,報表都可以完美運行,但只有在后臺環境中生成報表時才會失敗。
公式欄位例外似乎只影響包含使用條件陳述句(“if”或“iif”)的公式欄位的報告,其中條件涉及數字欄位但結果是字串 - 例如“ IIF ({NumericField} = 0, 'Zero', 'Non-Zero')”。調整公式以包裝數字條件(例如“ IIF (TOTEXT({NumericField}) = '0', 'Zero', 'Non-Zero')”)并不能解決問題。
同樣,我嘗試添加額外的代碼來直接設定子報告引數(而不是允許它們從鏈接的主報告引數中過濾掉),但是無論我使用什么技術,這也會產生例外(似乎水晶不喜歡您試圖繞過引數鏈接)。
據我所見,水晶報表引擎在后臺設定中的行為有所不同。是否有人知道后臺任務環境與正常代碼隱藏相比存在物理差異,可以解釋這些行為差異,是否有人對補救措施有任何建議?
uj5u.com熱心網友回復:
這可能與用于提供資料的程序有關。
要測驗該理論,請使用靜態資料源(或僅使用保存的資料)進行測驗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/466780.html
