3

以下のような複数の階層データを含むエンティティを返す XML データソースとして Web サービスを使用しています (コードはプロジェクトのプライバシーのために変更されています)。

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 プロパティとともに Address 情報を取得するには、次のようにします。

<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 サービス呼び出しを行いますが、サービスは常に上記の 3 つのデータセットに必要なすべてのデータを含む同じ XML 応答を返します。

返されたクエリの XML 応答を他のデータセットに再利用する方法はありますか? 可能であれば、私のレポートは Web サービスを 1 回だけ呼び出し、データセットは Web サービスを何度も呼び出すことなく、その XML 応答のさまざまな部分をフィルタリングします。

これが不可能な場合、同じレポート内に複数の階層データを表示するベスト プラクティスは何ですか? データのさまざまな階層部分を返すさまざまな Web サービスを作成する必要がありますか?

4

1 に答える 1

1

Reporting Servicesのデータセットは、行と列の単純なテーブルに制限されています。説明したように、複数の階層を持つデータを処理することはできません。

これを反映するようにWebサービスを再設計し、おそらく説明した3つのデータセットに分割します。次に、3つのWebサービス呼び出しがありますが、コンテンツの重複はありません。また、並行して実行されるため、現在の設計よりも全体的に効率的です。

于 2013-01-07T05:01:50.733 に答える