为什么 crystal 报表引擎在使用 QueueBackgroundWorkItem 启动的后台任务中使用时表现不同?

Why does the crystal reports engine appear to behave differently when used in a background task started using QueueBackgroundWorkItem?

在 Web 应用程序中,我有使用 crystal 报告以及 ReportDocument.ExportToDisk 和 ReportDocument.ExportToStream 方法生成 PDF 文件的代码。我使用的是 64 位 crystal 运行time v13 SP31。使用 SetDataSource 方法将所有数据库数据直接推送到每个报表。

当我从网页的代码隐藏中调用代码时,它完美地执行并生成了可用的 pdf。

对于应用程序中的一些(不是全部)报告,当我从使用 QueueBackgroundWorkItem 生成的后台任务调用完全相同的代码时,它的行为不同并生成异常。到目前为止,我得到的异常类型要么是与报告中的公式字段相关的虚假“此处需要字符串”异常,要么是与所有子报告参数相关的“缺少参数”异常(尽管所有子报告参数都是链接到等效的主要报告参数)。

个别报告的问题似乎是一致的(即每次报告在后台 运行 时都会出现相同的错误)- 但并非应用程序中的每个报告都受到影响。在目前确定的每种情况下,如果 运行 从代码隐藏或在报表设计器中预览,报表将完美运行,但只有在后台环境中生成报表时才会失败。

公式字段异常似乎只影响包含使用条件语句(“if”或“iif”)的公式字段的报告,其中条件涉及数字字段但结果是字符串 - 类似于“[=11” =]" 例如。调整公式以包含数字条件(例如“IIF (TOTEXT({NumericField}) = '0', 'Zero', 'Non-Zero')”)并不能解决问题。

同样,我尝试添加额外的代码来直接设置子报表参数(而不是让它们从链接的主报表参数中过滤掉),但无论我使用什么技术,也会产生异常(似乎crystal 不喜欢你试图绕过参数链接)。

据我所知,crystal 报告引擎在后台设置中的行为有所不同。有没有人知道后台任务环境与正常代码隐藏的物理差异可以解释这些行为差异,有没有人有任何补救建议?

这可能与用于提供数据的过程有关。

要验证该理论,请使用静态数据源(或仅使用保存的数据)进行测试。