通过.NET填充动态级联参数的值列表

2020-09-27 01:32发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)伙计们,我知道之前已经把它弄乱了...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


伙计们,我知道之前已经把它弄乱了-但是我在挖掘过程中并没有找到解决办法,所以我将再次介绍这个案例……

首先,让我解释一下我的体系结构,这会引起一些限制。 我有一个用于客户案例管理(房屋和无家可归)的.NET MVC Web应用程序。 该Web应用程序无法访问数据库-而是有一个单独的应用程序.NET WCF应用程序,该应用程序承载了一系列与数据层进行交互的服务。 没什么疯狂的,只是丢掉了CRUD方法……Web应用程序专有地使用了这些Web服务。

现在,用户希望开发自己的自定义报告,因此我们选择了Crystal Reports –他们购买了完整版本的副本来构建自己的报告(他们具有用于构建报告的示例数据库)。 我们在应用程序中有一个报告模块,他们将RPT上传到系统,然后用户可以运行该报告并在Web查看器中查看它。

现在-根据我们的体系结构-您可能已经扬起了眉头...让我解释一下...

当用户运行报告时–从Web应用程序中,我们在Web服务中调用一个方法,该方法在WCF应用程序中创建CrystalDecisions.CrystalReports.Engine.ReportDocument并加载RPT。 然后,我们遍历ParameterFields并构建一个自定义的参数详细信息集合,然后将其传递回Web应用程序。 此集合用于向用户显示我们在其中填充所有报告参数的日期–日期,布尔值,字符串等。我们有一些特殊的下拉列表,如果他们根据名称和定义参数来呈现给用户 到我们提供的规范–通过这种方式,他们会获得一个下拉列表,其中包含与其登录用户相关的值(例如:过滤掉他们无权查看的选项)。 它们的工作方式是,您在报表中定义一个简单的数字参数,但是我们在收集参数的网页上显示一个下拉列表,然后在回发页面上设置参数值。 到目前为止很好–所有这些都很好。 我们将参数发布回Web应用程序–然后调用另一个具有参数值的Web服务,该Web服务再次旋转ReportDocument,填充参数,然后运行我们打包的报告(ExportToStream),并通过WCF返回到 Web应用程序。 它将其加载到ReportDocument的本地实例中,然后在查看器中显示它。

现在,我添加了对报告中定义的值列表的支持-这对于静态参数没有问题。 问题在于动态列表。 我的Web应用程序无权访问数据库-这是Web服务的域。 因此,我不能依靠Crystal Reports Viewer生成的参数对话框来显示值-它无法访问数据库以查询值。 我总是可以依靠给用户指定参数定义,然后在参数视图中编码一个特殊情况以向他们显示动态生成的值列表的list头,但这显然限制了它们只能使用我支持的下拉列表,并且 每当有人梦到一份新报告,而他们需要从动态列表中选择某项内容时,我就要负担更多的支持代码。 我想做的是让Crystal刷新数据库所在范围内的WCF服务内ReportDocument对象中的那些动态值列表,但是似乎没有任何方法可以做到这一点。 我唯一一次看到Crystal查询动态值列表的情况是,它想要在设计器预览或可访问数据库的Web查看器中显示其自己的参数对话框时。

有什么想法?!

2条回答
d56caomao
2020-09-27 02:16 .采纳回答

嗨杰森,

在下载页面上,我创建了应用程序,并将其附加为:

how-to- 视觉工作室的晶体报告中的参数

WIKI页面:

https: //wiki.scn.sap.com/wiki/display/BOBJ/Crystal+Reports%2C+Developer+for+Visual+Studio+Downloads

在其中有一个下拉列表框,用于获取参数。 它将检查Param类型,然后如果它是LOV,它将查询数据库以获取列表,需要先登录。

您应该能够在具有访问数据库权限的一项服务中执行相同的操作。

Don

一周热门 更多>