我遇到了一个反复出现的 SSRS 问题,即向客户发送“不良”报告。问题是我们有包含多个子报表的报表,一个或多个子报表将无法处理。当子报表处理失败时,报表会发送一条错误消息来代替子报表,并且没有实际数据。
我的问题是,如果子报告失败,是否有办法阻止报告发送?
理想情况下,我希望外部报告只返回一个错误。有没有办法让 SSRS 报告中的错误状态升级到外部范围?是否有我们可以强制执行的编码标准来防止此问题?
我们目前同时使用 SSRS 2008r2 和 SSRS 2016。
我遇到了一个反复出现的 SSRS 问题,即向客户发送“不良”报告。问题是我们有包含多个子报表的报表,一个或多个子报表将无法处理。当子报表处理失败时,报表会发送一条错误消息来代替子报表,并且没有实际数据。
我的问题是,如果子报告失败,是否有办法阻止报告发送?
理想情况下,我希望外部报告只返回一个错误。有没有办法让 SSRS 报告中的错误状态升级到外部范围?是否有我们可以强制执行的编码标准来防止此问题?
我们目前同时使用 SSRS 2008r2 和 SSRS 2016。
正如billinkc在他的评论中指出的那样,没有办法将子报表错误传播到主报表。
正如这篇MSDN 帖子中所证明的那样,您可以尝试使用数据驱动的订阅来驱动订阅,但如果真正快速涉及任何复杂性,这可能会变得混乱。
如果您查看使用 SSRS 订阅的服务器的 SQL 代理作业,您将看到一堆名称为 GUID 的 SQL 代理作业,您可以修改这些作业以包括在实际运行报告失败之前运行一些数据验证步骤的额外步骤发送报告之前的作业(冒着您的作业定义被 SSRS 覆盖的风险)或在验证数据逻辑后从另一个作业调用该作业。
您可以使用以下查询识别与报告关联的 GUID:
(取自这里)
TL/DR:没有干净的解决方案,但你可以逃避一些黑客攻击,你需要在数据驱动订阅中实现逻辑或创建额外的作业/修改生成的作业
PS:我没有测试任何这些方法