3

我使用 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 ...
}

为了在同一个报表中显示所有实体信息,我可以在报表中创建不同的数据集来调用我的 Web 服务并过滤返回的服务响应的首选部分。

仅获取 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 服务来返回数据的不同层次部分?

4

1 回答 1

1

Reporting Services 数据集仅限于包含行和列的简单表格 - 它们无法处理您所描述的具有多个层次结构的数据。

我会重新设计您的 Web 服务以反映这一点,可能会将其拆分为您描述的三组数据。然后会有三个 Web 服务调用,但没有重复内容。它们也将并行执行,总体上可能比您当前的设计更有效。

于 2013-01-07T05:01:50.733 回答