How To:Reporting Services のレポートをコマンドで配置する方法

森  隆博
SQL Developer Support Engineer

Reporting Services のレポートは通常、Business Intelligence Development Studio や、Report Builder のツールを使用してレポートを作成し、Reporting Services に配置します。
時々、こういった GUI ツールからのレポートの配置ではなく、コマンドからレポートの配置を行いたい、というご意見を頂戴することがあります。

ここでは、コマンドライン実行にてレポートを配置する方法をご紹介します。

前提条件
ここでご案内するスクリプトは、以下の前提条件があります。

・コマンドライン実行によるレポート配置の流れ
    ・以下を定義したスクリプトファイル(rss スクリプトファイル)を用意します。
        ・配置対象のレポート
        ・配置先の Reporting Services

    ・rs ユーティリティ (rs.exe) から、rss スクリプトファイルを実行します。

・Reporting Services バージョン
SQL Server 2008 R2 Reporting Services を対象としたスクリプトです。

・コマンドの実行権限
ユーティリティを実行の際は、管理者権限をもつユーザーアカウントにてログインし、コマンドプロンプトを管理者モードで起動してください。

・スクリプトの文字コード
rss ファイルを Unicode 文字で保存してください。

・以降でご案内するスクリプト実行例に関する前提条件

- スクリプトファイルは「PublishSample.rss」という名称です。
  - Reporting Services の「TEST」というフォルダにレポートを配置する設定です。
  - 配置する対象のレポートは「Report1.rdl」という名称です。
  - 配置するレポートファイルとそれを制御するスクリプトファイルは「C:\Sample」というフォルダに格納しています。

※もちろん、スクリプトファイル名、レポート名、配置先のパス等は任意ですが、ここでは後述の説明の都合上この名称でご説明します。

詳細手順
(1) 配置したいレポート(ここでは「Report1.rdl」)を「C:\Sample」に保存します。

(2) rss スクリプトファイルを用意します。

以下のスクリプトをコピーし、「PublishSample.rss」という名称で Unicode の文字コードで「C:\Sample」に保存します。

        Public Shared Sub Main()

            Dim rs As New ReportingService2010()
            rs.Url = "https://localhost/reportserver//ReportService2010.asmx"
            rs.Credentials = System.Net.CredentialCache.DefaultCredentials

            Dim definition As [Byte]() = Nothing
            Dim warnings As Warning() = Nothing

            '配置するレポートの名称を指定する
            Dim name As String = "Report1.rdl"

            Try
                Dim stream As FileStream = File.OpenRead("C:\Sample\" + name)
                definition = New [Byte](stream.Length-1) {}
                stream.Read(definition, 0, CInt(stream.Length))
                stream.Close()

            Catch e As IOException
                Console.WriteLine(e.Message)
            End Try

            Try
                'レポート配置先のパスを指定する
                Dim parentPath As String = "/TEST"

                'レポートを配置する
                rs.CreateCatalogItem("Report", name, parentPath, True, definition, Nothing, warnings)

                If Not (warnings Is Nothing) Then
                    Dim warning As Warning
                    For Each warning In warnings
                        Console.WriteLine(warning.Message)
                    Next warning

                Else
                    Console.WriteLine("Report: {0} created successfully with no warnings", name)
                End If

            Catch e As SoapException
                Console.WriteLine(e.Detail.InnerXml.ToString())
            End Try

        End Sub

(3) コマンドプロンプトを管理者モードで実行します。

(4) コマンドプロンプトで、rs ユーティリティが存在するパスに移動します。

既定では以下のパスになります。

C:\Program Files\Microsoft SQL Server\100\Tools\Binn

(5) rs ユーティリティに、(2) で作成したスクリプトファイルと、配置先の Reportint Serivces の URL を指定して実行します。

rs -i<スクリプトファイルのパス> -s<Report Server URL> -e Mgmt2010

実行例)
C:\Program Files\Microsoft SQL Server\100\Tools\Binn>rs -ic:\sample\PublishSample.rss -s https://localhost/reportserver -e Mgmt2010

(6) レポートサーバーの URL にアクセスし(https://MachineName/ReportServer)TEST フォルダの配下に「Report1.rdl」が配置されたことを確認します。

 

参考情報
rs ユーティリティ
https://msdn.microsoft.com/ja-jp/library/ms162839(v=sql.105).aspx