跨数据集或子报表重用 Web 服务响应
Posted
技术标签:
【中文标题】跨数据集或子报表重用 Web 服务响应【英文标题】:Re-use web service response across datasets or subreports 【发布时间】:2012-12-28 10:29:22 【问题描述】:我使用 Web 服务作为我的 XML 数据源,它返回的实体包括多个分层数据,如下所示(为项目隐私而修改的代码);
public class UserData
// some scalar properties
public string Id ...
public string Name ...
public string Surname ...
// some navigational properties
public Address address ...
public CourseInfo[] courses ...
public AwardInfo[] awards ...
要在同一个报表中显示所有实体信息,我可以在报表中创建不同的数据集来调用我的网络服务并过滤返回的服务响应的首选部分。
仅获取 UserData 属性:
<Query>
<Method Name="GetUserData" Namespace="UserApp.ReportingServices"/>
<SoapAction>UserApp.ReportingServices/IReportingService/GetUserData</SoapAction>
<ElementPath IgnoreNamespaces="true">GetUserDataResponse/UserData</ElementPath>
</Query>
获取地址信息和 UserData 属性:
<Query>
<Method Name="GetUserData" Namespace="UserApp.ReportingServices"/>
<SoapAction>UserApp.ReportingServices/IReportingService/GetUserData</SoapAction>
<ElementPath IgnoreNamespaces="true">GetUserDataResponse/UserData/Address</ElementPath>
</Query>
获取课程信息和 UserData 属性:
<Query>
<Method Name="GetUserData" Namespace="UserApp.ReportingServices"/>
<SoapAction>UserApp.ReportingServices/IReportingService/GetUserData</SoapAction>
<ElementPath IgnoreNamespaces="true">GetUserDataResponse/UserData/Courses/CourseInfo</ElementPath>
</Query>
我的问题就在这里提出:如果我像上面那样使用多个数据集查询,我的报告将 对每个数据集进行 Web 服务调用,尽管我的服务总是返回相同的 XML 响应,其中包括所有以上三个数据集所需的数据。
有没有办法重用返回的 XML 响应查询其他数据集?如果可能的话,我的报告将只调用一次 Web 服务,并且数据集将过滤该 XML 响应的不同部分,而无需一次又一次地调用 Web 服务。
如果这是不可能的,那么在同一个报告中显示多个分层数据的最佳做法是什么?我是否必须创建不同的 Web 服务来返回数据的不同层次结构?
【问题讨论】:
【参考方案1】:Reporting Services 数据集仅限于包含行和列的简单表格 - 它们无法处理您所描述的具有多个层次结构的数据。
我会重新设计您的 Web 服务以反映这一点,可能会将其分成您描述的三组数据。然后会有三个 Web 服务调用,但没有重复内容。它们还将并行执行,总体上可能比您当前的设计更有效。
【讨论】:
你是对的,迈克。我无法将分层数据设置到报告服务数据集。 但是,我可以将分层数据发送到报表,作为仅一个服务调用的响应。问题是;我可以在不同的数据集中使用这个 xml 数据的不同部分(通过数据集重复使用相同的 xml 响应,而不是为每个数据集进行新的 Web 服务调用)? 这不是 s-s-rS 数据集的工作方式——每个数据集都是独立执行的。 感谢迈克的澄清。工作方法似乎是为每个数据集调用我的网络服务。以上是关于跨数据集或子报表重用 Web 服务响应的主要内容,如果未能解决你的问题,请参考以下文章