我正在使用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服务来返回数据的不同层次结构部分?
答案 0 :(得分:1)
Reporting Services数据集仅限于一个简单的行和列表 - 它们无法处理具有多个层次结构的数据,如您所述。
我会重新设计您的网络服务以反映这一点,可能会将其分为您描述的三组数据。然后将有三个Web服务调用,但没有重复的内容。它们也将并行执行,这可能比您当前的设计更有效。