日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Reporting Services系列五:WebService接口

發布時間:2025/3/19 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Reporting Services系列五:WebService接口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ReportingServices提供WebService接口,基本上所有報表的操作都可以利用它們完成,以下在代碼演示如何使用它們進行報表的導出、報表的訂閱等。其中報表訂閱中的郵件訂閱未經過實際測試,其它代碼都經過測試,沒有發現什么問題。當然方法只是給出個原理,沒有什么真正實用價值,有興趣的人可以根據自己的需求對接口進行包裝。

在動手寫代碼之前,你要添加對此WebService的引用,如圖:

//

代碼如下:

?


????public?class?RsWebServiceHelper
????
{
????????
private?ReportingService?mRService;
????????
public?RsWebServiceHelper()
????????
{????????????
????????????
this.mRService=new?ReportingService();
????????????
//Web?Service認證可以使用Windows認證和基本認證。
????????????
//如報表服務器上reportserver目錄直接使用具備admin權限的用戶匿名訪問
????????????
//則二者都可,且用戶名密碼可隨意,否則,請指定OS中具有權限的用戶名密碼
????????????
//Windows?認證:(默認采用NETWORK?SERVICE用戶(win2003),權限不足)
????????????
//this.mRService.Credentials?=System.Net.CredentialCache.DefaultCredentials;
????????????
//基本認證:
????????????this.mRService.Credentials?=new?System.Net.NetworkCredential("myhuang","123");
????????}



????????
/**////?<summary>
????????
///?獲取報表項目列表
????????
///?</summary>
????????
///?<returns></returns>

????????public?DataTable?ListFolders()
????????
{
????????????DataTable?dt
=new?DataTable();
????????????dt.Columns.Add(
"ReportName",typeof(System.String));
????????????dt.Columns.Add(
"ReportPath",typeof(System.String));
????????????
foreach(CatalogItem?ci?in?this.mRService.ListChildren("/",false))
????????????
{
????????????????
if(ci.Type?==ItemTypeEnum.Folder)
????????????????
{
????????????????????dt.Rows.Add(
new?object[]{ci.Name,ci.Path});
????????????????}

????????????}

????????????
return?dt;
????????}



????????
/**////?<summary>
????????
///?獲取報表列表
????????
///?</summary>
????????
///?<param?name="pTargetName">報表項目名稱</param>
????????
///?<returns></returns>

????????public?DataTable?ListReports(string?pTargetName)
????????
{
????????????DataTable?dt
=new?DataTable();
????????????dt.Columns.Add(
"ReportName",typeof(System.String));
????????????dt.Columns.Add(
"ReportPath",typeof(System.String));
????????????
foreach(CatalogItem?ci?in?this.mRService.ListChildren("/"+pTargetName,false))
????????????
{
????????????????
if(ci.Type?==ItemTypeEnum.Report)
????????????????
{
????????????????????dt.Rows.Add(
new?object[]{ci.Name,ci.Path});
????????????????}

????????????}

????????????
return?dt;
????????}


????????
????????
/**////?<summary>
????????
///?報表導出
????????
///?</summary>
????????
///?<param?name="pReportPath">報表全路徑</param>
????????
///?<param?name="pParams">報表參數</param>
????????
///?<param?name="pFormat">導出格式</param>
????????
///?<param?name="pExpPath">導出路徑</param>
????????
///?<returns></returns>

????????public?bool?ExportReport(string?pReportPath,string[][]?pParams,string?pFormat,string?pExpPath)
????????
{
????????????
string?encoding;
????????????
string?mimetype;
????????????ParameterValue[]?pvout;
????????????Warning[]?warmings;
????????????
string[]?streamid;

????????????ParameterValue[]?pv?
=?null;
????????????
if(pParams!=null)
????????????
{
????????????????pv
=new?ParameterValue[pParams.Length];
????????????????
for(int?i=0;i<pParams.Length;i++)
????????????????
{
????????????????????pv[i]
=new?ParameterValue();
????????????????????pv[i].Name
=pParams[i][0];
????????????????????pv[i].Value
=pParams[i][1];
????????????????}

????????????}

????????????
try
????????????
{
????????????????
byte[]?bytes=this.mRService.Render(pReportPath,pFormat,null,null,pv,null,null,out?encoding,out?mimetype,out?pvout,out?warmings,out?streamid);
????????????????
using(FileStream?fs=File.Create(pExpPath,bytes.Length))
????????????????
{
????????????????????fs.Write(bytes,
0,bytes.Length);
????????????????}

????????????????
return?true;
????????????}

????????????
catch
????????????
{
????????????????
return?false;
????????????}

????????}


????????
????????
/**////?<summary>
????????
///?報表導出
????????
///?</summary>
????????
///?<param?name="pReportPath">報表全路徑</param>
????????
///?<param?name="pFormat">導出格式</param>
????????
///?<param?name="pExpPath">導出路徑</param>
????????
///?<returns></returns>

????????public?bool?ExportReport(string?pReportPath,string?pFormat,string?pExpPath)
????????
{
????????????
bool?rt=ExportReport(pReportPath,null,pFormat,pExpPath);
????????????
return?rt;
????????}



????????
/**////?<summary>
????????
///?以共享文件方式訂閱報表
????????
///?</summary>
????????
///?<param?name="pReport">報表全路徑</param>
????????
///?<param?name="pParams">報表參數</param>
????????
///?<param?name="pStartTime">訂閱開始時間</param>
????????
///?<param?name="pFileName">產生的文件名稱</param>
????????
///?<param?name="pShareFolderPath">共享文件夾路徑</param>
????????
///?<param?name="pFormat">生成文件格式</param>
????????
///?<param?name="pUser">用戶名</param>
????????
///?<param?name="pPwd">密碼</param>
????????
///?<param?name="pResult">訂閱結果</param>
????????
///?<returns></returns>

????????public?bool?SubscriptionFileShare(string?pReport,string[][]?pParams,DateTime?pStartTime,string?pFileName,string?pShareFolderPath,string?pFormat,string?pUser,string?pPwd,out?string?pResult)
????????
{????????????
????????????
RecurrencePattern,用于指定schedule的周期類型#region?RecurrencePattern,用于指定schedule的周期類型
????????????
//繼承于“RecurrencePattern”類:
????????????/**//*MinuteRecurrence?
????????????Represents?the?interval,?in?minutes,?on?which?a?scheduled?report?runs.
????????????//屬性:MinutesInterval??The?interval,?in?minutes,?at?which?a?scheduled?report?runs?
?????????????
????????????DailyRecurrence?
????????????Represents?the?interval,?in?days,?on?which?a?scheduled?report?runs.
????????????//屬性:DaysInterval??The?intervals?at?which?a?scheduled?report?runs.?Intervals?are?specified?in?days?
?????????????
????????????WeeklyRecurrence?
????????????Represents?the?weeks?interval?and?the?days?of?the?week?on?which?a?scheduled?report?runs.
????????????//屬性:DaysOfWeek??The?days?of?the?week?(DaysOfWeekSelector?object)?on?which?a?scheduled?report?runs.?
????????????//WeeksInterval??The?intervals?at?which?a?scheduled?report?runs.?Intervals?are?measured?in?weeks.??
????????????//WeeksIntervalSpecified??Indicates?whether?the?WeeksInterval?value?is?specified.?

????????????MonthlyRecurrence?
????????????Represents?the?days?of?the?month?on?which?a?scheduled?report?runs.
????????????//屬性:Days??Gets?or?sets?the?days?of?the?month?on?which?a?scheduled?report?runs.?
????????????//MonthsOfYear??Gets?or?sets?the?months?of?the?year?(MonthsOfYearSelector?object)?in?which?a?scheduled?report?runs.?

????????????MonthlyDOWRecurrence?
????????????Represents?the?day?of?week,?the?week?number?in?the?month,?and?the?month?on?which?a?scheduled?report?runs.
????????????//屬性:
*/

????????????
#endregion


????????????
//訂閱的觸發條件:時間周期完成時觸發、快照方式(??)
????????????string?eventType?=?"TimedSubscription";
????????????
//string?evetnType="SnapshotUpdated";

????????????ExtensionSettings?es
=new?ExtensionSettings();
????????????
//ReportingServices的兩種訂閱方式:共享文件方式、發送郵件方式
????????????es.Extension?="Report?Server?FileShare";
????????????
????????????
//通過ScheduleDefinition類指定sd的起始執行時間
????????????ScheduleDefinition?sd?=?new?ScheduleDefinition();
????????????sd.StartDateTime?
=?pStartTime;
????????????
//也可指定計劃的結束時間:
????????????
//sd.EndDate=DateTime.Now.AddMonths(2);
????????????
//sd.EndDateSpecified?=?true;

????????????
//通過DailyRecurrence類指定sd的周期類型
????????????DailyRecurrence?dr=new?DailyRecurrence();
????????????dr.DaysInterval?
=1;
????????????sd.Item?
=dr;
????????????
一個比較復雜的周期類型#region?一個比較復雜的周期類型
????????????
/**//*
????????????MonthlyDOWRecurrence?pattern?=?new?MonthlyDOWRecurrence();
????????????pattern.WhichWeekSpecified?=?true;
????????????pattern.WhichWeek?=?WeekNumberEnum.LastWeek;
????
????????????MonthsOfYearSelector?months?=?new?MonthsOfYearSelector();
????????????months.March?=?true;
????????????months.June?=?true;
????????????months.September?=?true;
????????????months.December?=?true;
????????????pattern.MonthsOfYear?=?months;

????????????DaysOfWeekSelector?days?=?new?DaysOfWeekSelector();
????????????days.Friday?=?true;
????????????pattern.DaysOfWeek?=?days;
*/

????????????
#endregion


????????????XmlDocument?doc?
=?this.GetScheduleAsXml(sd);???????
????????????
string?matchData?=?doc.OuterXml;

????????????
可手寫sd的xml定義#region?可手寫sd的xml定義
????????????
/**//*
????????????string?scheduleXml=@"<ScheduleDefinition>";
????????????scheduleXml+="<StartDateTime>2006-12-25T16:40:00</StartDateTime>";//時區不用
????????????scheduleXml+="<DailyRecurrence>";
????????????scheduleXml+="<DaysInterval>1</DaysInterval>";
????????????//matchdate+="<DaysOfWeek><Monday>True</Monday></DaysOfWeek>";
????????????scheduleXml+="</DailyRecurrence>";
????????????scheduleXml+="</ScheduleDefinition>";
*/

????????????
#endregion


????????????
共享文件訂閱所需“擴展參數”#region?共享文件訂閱所需“擴展參數”
????????????ParameterValue[]?pv?
=?new?ParameterValue[7];
????????????
//文件名
????????????pv[0]?=?new?ParameterValue();
????????????pv[
0].Name?=?"FILENAME";
????????????pv[
0].Value?=?pFileName;
????????????
//是否自動添加擴展名,"True"或"False"
????????????pv[1]?=?new?ParameterValue();
????????????pv[
1].Name?=?"FILEEXTN";
????????????pv[
1].Value?=?"True";
????????????
//共享文件夾路徑
????????????pv[2]?=?new?ParameterValue();
????????????pv[
2].Name?=?"PATH";
????????????pv[
2].Value?=?pShareFolderPath;
????????????
//文件類型,"MHTML"?"HTML3.2"?"PDF","CSV","EXCEL","HTML4.0"??"MHTML"??"IMAGE"??"XML"
????????????pv[3]?=?new?ParameterValue();
????????????pv[
3].Name?=?"RENDER_FORMAT";
????????????pv[
3].Value?=?pFormat;
????????????
//須提供OS中具備對該文件夾寫權限的用戶、密碼
????????????pv[4]?=?new?ParameterValue();
????????????pv[
4].Name?=?"USERNAME";
????????????pv[
4].Value?=?pUser;

????????????pv[
5]?=?new?ParameterValue();
????????????pv[
5].Name?=?"PASSWORD";
????????????pv[
5].Value?=?pPwd;
????????????
//方式:"None","AutoIncrement"(文件名自增),"Overwrite"(覆蓋原文件)
????????????pv[6]?=?new?ParameterValue();
????????????pv[
6].Name?=?"WRITEMODE";
????????????pv[
6].Value?=?"AutoIncrement";
????????????
#endregion
?

????????????
報表自身參數#region?報表自身參數
????????????ParameterValue[]?pv2?
=?null;
????????????
if(pParams!=null)
????????????
{
????????????????pv2
=new?ParameterValue[pParams.Length];
????????????????
for(int?i=0;i<pParams.Length;i++)
????????????????
{
????????????????????pv2[i]
=new?ParameterValue();
????????????????????pv2[i].Name
=pParams[i][0];
????????????????????pv2[i].Value
=pParams[i][1];
????????????????}

????????????}

????????????
#endregion


????????????es.ParameterValues?
=pv;
????????????
try
????????????
{
????????????????
string?result=this.mRService.CreateSubscription(pReport,?es,?null,?eventType,?matchData,?pv2);
????????????????pResult?
=result;//訂閱的ID
????????????????return?true;
????????????}

????????????
catch?(System.Web.Services.Protocols.SoapException?ex)
????????????
{
????????????????pResult
=ex.Detail.InnerXml.ToString();
????????????????
return?false;
????????????}
????????
????????}



????????
/**////?<summary>
????????
///?以郵件方式訂閱報表
????????
///?</summary>
????????
///?<param?name="pReport">報表全路徑</param>
????????
///?<param?name="pParams">報表參數</param>
????????
///?<param?name="pStartTime">訂閱開始時間</param>
????????
///?<param?name="pSendTo">發送人</param>
????????
///?<param?name="pReplyTo">抄送人</param>
????????
///?<param?name="pFormat">發送文件格式</param>
????????
///?<param?name="pResult">訂閱結果</param>
????????
///?<returns></returns>

????????public?bool?SubscriptionEmail(string?pReport,string[][]?pParams,DateTime?pStartTime,string?pSendTo,string?pReplyTo,string?pFormat,out?string?pResult)
????????
{
????????????
//訂閱的觸發條件:時間周期完成時觸發、快照方式(??)
????????????string?eventType?=?"TimedSubscription";
????????????
//string?evetnType="SnapshotUpdated";

????????????ExtensionSettings?es
=new?ExtensionSettings();
????????????
//ReportingServices的兩種訂閱方式:共享文件方式、發送郵件方式
????????????es.Extension="Report?Server?Email";
????????????
????????????
//通過ScheduleDefinition類指定sd的起始執行時間
????????????ScheduleDefinition?sd?=?new?ScheduleDefinition();
????????????sd.StartDateTime?
=?pStartTime;

????????????
//通過DailyRecurrence類指定sd的周期類型
????????????DailyRecurrence?dr=new?DailyRecurrence();
????????????dr.DaysInterval?
=1;
????????????sd.Item?
=dr;

????????????XmlDocument?doc?
=?this.GetScheduleAsXml(sd);???????
????????????
string?matchData?=?doc.OuterXml;

????????????
郵件訂閱所需“擴展參數”#region?郵件訂閱所需“擴展參數”
????????????ParameterValue[]?pv?
=?new?ParameterValue[8];

????????????pv[
0]?=?new?ParameterValue();//收件人郵件地址
????????????pv[0].Name?=?"TO";
????????????pv[
0].Value?=?pSendTo;

????????????pv[
1]?=?new?ParameterValue();//抄送郵件地址
????????????pv[1].Name?=?"ReplyTo";
????????????pv[
1].Value?=?pReplyTo;

????????????pv[
2]?=?new?ParameterValue();
????????????pv[
2].Name?=?"IncludeReport";
????????????pv[
2].Value?=?"True";

????????????pv[
3]?=?new?ParameterValue();
????????????pv[
3].Name?=?"RenderFormat";
????????????pv[
3].Value?=?pFormat;

????????????pv[
4]?=?new?ParameterValue();
????????????pv[
4].Name?=?"Subject";
????????????pv[
4].Value?=?"@ReportName?was?executed?at?@ExecutionTime";

????????????pv[
5]?=?new?ParameterValue();
????????????pv[
5].Name?=?"Comment";
????????????pv[
5].Value?=?"Here?is?your?daily?sales?report?for?Michael.";

????????????pv[
6]?=?new?ParameterValue();
????????????pv[
6].Name?=?"IncludeLink";
????????????pv[
6].Value?=?"True";

????????????pv[
7]?=?new?ParameterValue();
????????????pv[
7].Name?=?"Priority";
????????????pv[
7].Value?=?"NORMAL";
????????????
#endregion


????????????
報表自身參數#region?報表自身參數
????????????ParameterValue[]?pv2?
=?null;
????????????
if(pParams!=null)
????????????
{
????????????????pv2
=new?ParameterValue[pParams.Length];
????????????????
for(int?i=0;i<pParams.Length;i++)
????????????????
{
????????????????????pv2[i]
=new?ParameterValue();
????????????????????pv2[i].Name
=pParams[i][0];
????????????????????pv2[i].Value
=pParams[i][1];
????????????????}

????????????}

????????????
#endregion


????????????es.ParameterValues?
=pv;
????????????
try
????????????
{
????????????????
string?result=this.mRService.CreateSubscription(pReport,?es,?null,?eventType,?matchData,?pv2);
????????????????pResult?
=result;//訂閱的ID
????????????????return?true;
????????????}

????????????
catch?(System.Web.Services.Protocols.SoapException?ex)
????????????
{
????????????????pResult
=ex.Detail.InnerXml.ToString();
????????????????
return?false;
????????????}
????????
????????}


????????
????????
/**////?<summary>
????????
///?目前Reporting?Services2000?SP2?
????????
///?序列化任務計劃的XML存在與Reporing?Services?API的WhichWeek定義不一致的情況,?
????????
///?所以當schedule中涉及whichweek時,需要進行如下處理:
????????
///?</summary>
????????
///?<param?name="schedule"></param>
????????
///?<returns></returns>

????????private?XmlDocument?GetScheduleAsXml(ScheduleDefinition?pSchedule)
????????
{
????????????MemoryStream?buffer?
=?new?MemoryStream();
????????????XmlSerializer?xmlSerializer?
=?new?XmlSerializer(typeof(ScheduleDefinition));
????????????xmlSerializer.Serialize(buffer,?pSchedule);
????????????buffer.Seek(
0,?SeekOrigin.Begin);
????????????????????
????????????XmlDocument?doc?
=?new?XmlDocument();????????
????????????doc.Load(buffer);???
????????????
//patch?up?WhichWeek
????????????XmlNamespaceManager?ns?=?new?XmlNamespaceManager(doc.NameTable);
????????????ns.AddNamespace(
"rs",?????"http://schemas.microsoft.com/sqlserver/2003/12/reporting/reportingservices");

????????????XmlNode?node?
=?doc.SelectSingleNode("/ScheduleDefinition/rs:MonthlyDOWRecurrence/rs:WhichWeek",?ns);
????????????
if(node?!=?null)
????????????
{
????????????????
switch?(node.InnerXml)
????????????????
{
????????????????????
case?"FirstWeek":
????????????????????????node.InnerXml?
=?"FIRST_WEEK";?break;
????????????????????
case?"SecondWeek":
????????????????????????node.InnerXml?
=?"SECOND_WEEK";?break;
????????????????????
case?"ThirdWeek":
????????????????????????node.InnerXml?
=?"THIRD_WEEK";?break;
????????????????????
case?"FourthWeek":
????????????????????????node.InnerXml?
=?"FOURTH_WEEK";?break;
????????????????????
case?"LastWeek":
????????????????????????node.InnerXml?
=?"LAST_WEEK";?break;
????????????????}

????????????}

????????????
return?doc;
????????}

????}

測試代碼:


????????
private?void?btExp_Click(object?sender,?System.EventArgs?e)
????????
{
????????????RsWebServiceHelper?h
=new?RsWebServiceHelper();
????????????
string[][]?pv=new?string[4][];
????????????pv[
0]=new?string[2]{"start_time","2007-02-01"};
????????????pv[
1]=new?string[2]{"end_time","2007-03-01"};
????????????pv[
2]=new?string[2]{"note","20"};
????????????pv[
3]=new?string[2]{"RsName","Alarm"};
????????????
bool?rt=h.ExportReport("/pReports/AlarmLevel",pv,"Excel",@"e:\myhuang\rs.xls");
????????????
if(rt)
????????????
{
????????????????Response.Write(
"<script?language=javascript>window.alert('ok');</script>");
????????????}

????????????
else
????????????
{
????????????????Response.Write(
"<script?language=javascript>window.alert('failed');</script>");
????????????}

????????}


????????
private?void?btSubs_Click(object?sender,?System.EventArgs?e)
????????
{
????????????
string[][]?pv=new?string[4][];
????????????pv[
0]=new?string[2]{"start_time","2007-02-01"};
????????????pv[
1]=new?string[2]{"end_time","2007-03-01"};
????????????pv[
2]=new?string[2]{"note","20"};
????????????pv[
3]=new?string[2]{"RsName","Alarm"};

????????????RsWebServiceHelper?h
=new?RsWebServiceHelper();
????????????
string?rtout;
????????????
bool?rt=h.SubscriptionFileShare("/pReports/AlarmLevel",pv,DateTime.Now.AddMinutes(1),"subsnew",@"e:\myhuang\RsShareFolder","EXCEL","myhuang","123",out?rtout);
????????????
if(rt)
????????????
{
????????????????Response.Write(
"<script?language=javascript>window.alert('succeed:"+rtout+"');</script>");
????????????}

????????????
else
????????????
{
????????????????Response.Write(
"<script?language=javascript>window.alert('error:"+rtout+"');</script>");
????????????}

????????}

?

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Reporting Services系列五:WebService接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。