Crystal Reports最佳实践

时间:2009-04-07 13:57:15

标签: c# sql-server sql-server-2005 crystal-reports

我没有太多管理报告的经验,但我的工作方式是这样的:

用户可以从报告列表中选择要查看的报告。此列表由数据库中的报告表填充,该报告表包含报告名称,文件名以及报告所采用的参数等信息。

这些报告中有几个常见参数 - 它们是范围或排序 - 因此用户可以提取有关编号为200到4000的所有小部件的报告,按Foo分组。

现在,一个人同时开发存储过程和报告文件。它们将它传递给我,我必须通过在生产中运行sproc脚本并将.rpt文件移动到正确的目录来部署它。然后,我必须使用名称,文件名和参数将记录插入到报告表中。

这是一个后勤方面的挑战,因为没有很好的方法来跟踪哪些报告已部署到哪些系统上(仅因为它们存在,并不意味着它们已更新,理想情况下总共有4个系统应该匹配) ,有几个可能的失败点:

1)sproc中的参数与.rpt文件中的参数不匹配 2)报告表中的参数与.rpt或sproc中的参数不匹配 3)更新sproc而.rpt文件不是出于任何原因 4)当新报告需要参数页面中尚未编码的参数时会发生什么?

这一切归结为系统不够动态。就像我说的,我不知道报道,但我有一种感觉,报告的人也没有。似乎必须有一种更好的方法来保持sproc和.rpt文件同步,并通过像Reflection这样的东西动态地询问它所需的参数。

这通常如何处理?

2 个答案:

答案 0 :(得分:1)

我们只使用默认的晶体参数提示引擎。否则,我们的报告解决方案与您描述的解决方案基本相同。

将参数放入表中没有意义。可以通过加载ReportDocument并读取参数集合来检索这些内容。您的提示引擎应该在此处查看,然后生成提示。否则,保持同步就太多了。

答案 1 :(得分:0)

我不知道“正常”,但我们的应用程序将报告与存储过程SQL和可配置参数绑定在一个文件中。然后,我们的报告生成器应用程序可以从单个包中反序序化运行报告所需的所有内容。所需的索引仅限于知道要显示给用户的有效文件名列表和相关的友好报告标题。

使用库存MFC序列化在C ++ / MFC中完成;我相信,正如你所说,通过反射和XML序列化,在C#/ .NET环境中可以实现更加流畅的解决方案。