我使用 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 服务来返回数据的不同层次部分?