1

顧客向けの Reporting Services ソリューションを作成しています。私は自分の開発環境でこのソリューションを開発していますが、顧客のサイトにアクセスできません。Reporting Services ソリューションをパッケージ化する方法を探しています。インストール中に運用データ ソースを指定するのに役立つセットアップ展開パッケージが必要です。

4

1 に答える 1

3

組み込まれているものはありません。

  1. dll プロジェクトを作成し、カスタム インストーラー アクションを記述する必要があります。例については、チュートリアル: カスタム アクションの作成を参照してください。
  2. dll には、 http://SsrsServer.mydomain.tld/ReportServer/ReportService2005.asmxへの Web サービス参照を含める必要があります 。方法 : Web サービスへの参照を追加する を参照してください。
  3. レポート サーバーの配置場所を要求するには、カスタム ダイアログをインストーラーに追加する必要があります。カスタム ダイアログを作成して使用する方法の例については、 「チュートリアル: インストール時にカスタム アクションを使用してデータベースを作成する」を参照してください。
  4. レポートが展開されるフォルダーを取得するには、カスタム ダイアログが必要です。
  5. Web サービス参照の宛先をプログラムで変更する必要があります。
  6. DataSource を作成するには、適切な Web サービス呼び出しを行う必要があります。
  7. レポートを作成するには、適切な Web サービス呼び出しを行う必要があります。
  8. Report を DataSource にバインドする必要があります。

必要なレポート サービス Web サービスは、ReportingService2005 クラスに記載されています。操作のサンプル コードを次に示します。

    /// <summary>
    /// Gets the reporting service SOAP client with the specified report server URL.
    /// </summary>
    /// <param name="reportServerUrl">The report server URL.</param>
    /// <returns>An instance of the reporting service SOAP client.</returns>
    internal static ReportingService2005SoapClient GetReportingService2005(Uri reportServerUrl)
    {
        EndpointAddress endPoint = new EndpointAddress(reportServerUrl);
        ReportService2005.ReportingService2005SoapClient soapClient = new ReportService2005.ReportingService2005SoapClient("ReportingService2005Soap", endPoint);
        soapClient.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;

        return soapClient;
    }

    /// <summary>
    /// Creates the data source.
    /// </summary>
    /// <param name="reportServerUri">The report server URI.</param>
    /// <param name="parentPath">The parent path.</param>
    /// <param name="itemName">Name of the item.</param>
    /// <param name="dataSourceDefinition">The data source definition.</param>
    internal static void CreateDataSource(Uri reportServerUri, string parentPath, string itemName, string description, DataSourceDefinition dataSourceDefinition)
    {
        using (ReportingService2005SoapClient reportingService = GetReportingService2005(reportServerUri))
        {
            ServerInfoHeader serverInfo = null;
            try
            {
                Property[] props = CreateDescriptionProperty(description);
                serverInfo = reportingService.CreateDataSource(null, itemName, parentPath, true, dataSourceDefinition, props);
            }
            catch (FaultException ex)
            {
                Trace.WriteLine(string.Format("CreateDataSource {0}/{1}: {2}", parentPath, itemName, ex.Message));
            }
        }
    }

    /// <summary>
    /// Creates the report.
    /// </summary>
    /// <param name="reportServerUri">The report server URI.</param>
    /// <param name="parentPath">The parent path.</param>
    /// <param name="itemName">Name of the item.</param>
    /// <param name="reportDefinition">The report definition.</param>
    internal static void CreateReport(Uri reportServerUri, string parentPath, string itemName, string description, byte[] reportDefinition)
    {
        Warning[] warnings;

        using (ReportingService2005SoapClient reportingService = GetReportingService2005(reportServerUri))
        {
            ServerInfoHeader serverInfo = null;
            try
            {
                Property[] props = CreateDescriptionProperty(description);
                serverInfo = reportingService.CreateReport(null, itemName, parentPath, true, reportDefinition, props, out warnings);
            }
            catch (FaultException ex)
            {
                Trace.WriteLine(string.Format("CreateReport {0}/{1}: {2}", parentPath, itemName, ex.Message));
            }
        }
    }

    /// <summary>
    /// Set the report or model data sources on the reporting server from the provided data source map entries.
    /// </summary>
    /// <param name="reportServerUri">The report server URI.</param>
    /// <param name="itemPath"></param>
    /// <param name="dataSourceMapEntries"></param>
    internal static void SetItemDataSourceMap(Uri reportServerUri, string itemPath, Dictionary<string, string> dataSourceMapEntries)
    {
        DataSource[] dataSources = (from dataSourceMapEntry in dataSourceMapEntries
                                    where !string.IsNullOrEmpty(dataSourceMapEntry.Value)
                                    select ConvertDataSourceMapEntry(dataSourceMapEntry)).ToArray();

        using (ReportingService2005SoapClient reportingService = GetReportingService2005(reportServerUri))
        {
            ServerInfoHeader serverInfo = null;
            try
            {
                serverInfo = reportingService.SetItemDataSources(null, itemPath, dataSources);
            }
            catch (FaultException ex)
            {
                Trace.WriteLine(string.Format("SetItemDataSourceMap {0} {1}", itemPath, ex.Message));
            }
        }
    }

    /// <summary>
    /// Convert a data source map entry into a report server data source object.
    /// </summary>
    /// <param name="dataSourceMapEntry"></param>
    /// <returns></returns>
    private static DataSource ConvertDataSourceMapEntry(KeyValuePair<string, string> dataSourceMapEntry)
    {
        DataSource dataSource = new DataSource();
        DataSourceReference dataSourceReference = new DataSourceReference();
        dataSource.Name = dataSourceMapEntry.Key;
        dataSourceReference.Reference = dataSourceMapEntry.Value;
        dataSource.Item = dataSourceReference;
        return dataSource;
    }
于 2012-07-23T22:56:59.463 に答える