SQL Serverで作成したレポートを出力する
SQL Server2008のReporting Serviceを使って固定帳票を出してる訳なんだけど、自動で帳票を作成して欲しいんだよね。まぁ、サブスクリプションでも簡単にはできるんだけど、だいたいこういった機能って、本番運用に耐えられないんだよね...200種類ぐらい帳票あるし、いろんな条件絡んでくるし...
バッチとかスケジューラとかで使えるように、Webサービスを使ってレポート出力するプログラムを作ってみた。
/* * SharpDevelopによって生成 * ユーザ: hoge * 日付: 2014/02/18 * 時刻: 00:10 * * このテンプレートを変更する場合「ツール→オプション→コーディング→標準ヘッダの編集」 */ using System; using System.IO; using System.Web.Services.Protocols; using hoge.hoge; namespace hoge { class ReportWriter { private ReportExecutionService rs = new ReportExecutionService(); public string ServerName { get; set; } public string ReportName { get; set; } public string OutputName { get; set; } public string Params { get; set; } public string ExportType { get; set; } public ReportWriter(string pServerName) { rs.Credentials = System.Net.CredentialCache.DefaultCredentials; ServerName = pServerName; rs.Url = "http://" + ServerName + "/reportserver/ReportExecution2005.asmx"; } public bool Write() { byte[] result = null; string historyID = null; string devInfo = "<DeviceInfo><Toolbar>False</Toolbar></DeviceInfo>"; int paramLen = 0; string[] reportParams =Params.Split('|'); bool retcode; if (!Params.Equals(string.Empty)){ paramLen = reportParams.Length; } // レポートパラメータの設定 ParameterValue[] parameters = new ParameterValue[reportParams.Length]; for (int i = 0; i < paramLen; i++) { parameters[i] = new ParameterValue(); string[] tempParams = reportParams[i].Split(':'); parameters[i].Name = tempParams[0]; parameters[i].Value = tempParams[1]; } string encoding = ""; string mimeType = ""; Warning[] warnings = null; string[] streamIDs = null; ExecutionInfo execInfo = new ExecutionInfo(); ExecutionHeader execHeader = new ExecutionHeader(); string extension = ""; try { rs.ExecutionHeaderValue = execHeader; execInfo = rs.LoadReport(ReportName, historyID); rs.SetExecutionParameters(parameters, "ja-jp"); result = rs.Render(ExportType, devInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs); execInfo = rs.GetExecutionInfo(); FileStream stream = File.Create(OutputName, result.Length); stream.Write(result, 0, result.Length); stream.Close(); retcode = true; } catch (Exception e) { retcode = false; } return retcode; } } class Program { public static void Main(string[] args) { ReportWriter rw = new ReportWriter("hoge"); rw.ReportName = "/消費税対応/売上一覧表"; rw.OutputName = "C:\\Users\\hoge\\Documents\\sample.pdf"; rw.ExportType = "PDF"; rw.Params = ""; rw.Write(); // TODO: Implement Functionality Here Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } } }
SharpDevelop 4.3を使った場合の設定手順は
Webサービスの参照設定をする。
アドレスバーに http://レポーティングサーバのIPか名前か/ReportServer/ReportExecution2005.asmx を入力して移動ボタンをクリック。資格情報を入力すると
となるので、名前空間と参照名を指定して
こんな感じになればいい。
あと、System.Web.Services の参照設定も忘れずに!
これを選べばいい。