none
SSRS有API吗 RRS feed

  • 问题

  • SSRS有供开发人员调用的API吗,或者有SDK之类的东西吗?

    有的话,可以使用.NET对报表进行批量处理。

    2010年9月2日 15:32

答案

  • 之前我做报表的时候,批量的改动啊,加参数啊什么的都是用的直接读XML,直接改XML。

    不过后来找到了一个快速的方法,虽然不是SDK,但是应该算是最有效,最直接的办法,就是把微软自己的Parser拿过来Parse报表,用对象的方式修改,然后再Parse回XML保存。

    找到你的Report Server 目录,一般是“C:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services\ReportServer\bin”,下面有一个Assembly,名字叫“Microsoft.ReportingServices.RdlObjectModel.dll”,这就是我们要用的Parser。

     

    建一个Project,把这个Assembly加为引用,在程序中加

    using Microsoft.ReportingServices.RdlObjectModel.Serialization;
    

    使用示例如下:

    static void Main(string[] args)
    {
    	var serial = new RdlSerializer();
    
    	var fi = new FileInfo(Path.Combine(Environment.CurrentDirectory, "HQMastRpt.rdl"));
    
    	var reader = fi.OpenText();
    
    	var rpt = serial.Deserialize(reader);//rpt就是Report类型对象。可以对它做处理。
    
    	//处理结束只要用serial.Serialize(writer)中去就行了。
    }
    

    2010年9月3日 2:25

全部回复

  • 你可以建reporting service 项目 做报表开发

    具体的可以看看 MSDN。


    family as water
    2010年9月3日 2:23
  • 之前我做报表的时候,批量的改动啊,加参数啊什么的都是用的直接读XML,直接改XML。

    不过后来找到了一个快速的方法,虽然不是SDK,但是应该算是最有效,最直接的办法,就是把微软自己的Parser拿过来Parse报表,用对象的方式修改,然后再Parse回XML保存。

    找到你的Report Server 目录,一般是“C:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services\ReportServer\bin”,下面有一个Assembly,名字叫“Microsoft.ReportingServices.RdlObjectModel.dll”,这就是我们要用的Parser。

     

    建一个Project,把这个Assembly加为引用,在程序中加

    using Microsoft.ReportingServices.RdlObjectModel.Serialization;
    

    使用示例如下:

    static void Main(string[] args)
    {
    	var serial = new RdlSerializer();
    
    	var fi = new FileInfo(Path.Combine(Environment.CurrentDirectory, "HQMastRpt.rdl"));
    
    	var reader = fi.OpenText();
    
    	var rpt = serial.Deserialize(reader);//rpt就是Report类型对象。可以对它做处理。
    
    	//处理结束只要用serial.Serialize(writer)中去就行了。
    }
    

    2010年9月3日 2:25
  • 之前我做报表的时候,批量的改动啊,加参数啊什么的都是用的直接读XML,直接改XML。

    不过后来找到了一个快速的方法,虽然不是SDK,但是应该算是最有效,最直接的办法,就是把微软自己的Parser拿过来Parse报表,用对象的方式修改,然后再Parse回XML保存。

    找到你的Report Server 目录,一般是“C:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services\ReportServer\bin”,下面有一个Assembly,名字叫“Microsoft.ReportingServices.RdlObjectModel.dll”,这就是我们要用的Parser。

     

    建一个Project,把这个Assembly加为引用,在程序中加

     

    using Microsoft.ReportingServices.RdlObjectModel.Serialization;
    
    

     

    使用示例如下:

     

    static void Main(string[] args)
    
    {
    
    	var serial = new RdlSerializer();
    
    
    
    	var fi = new FileInfo(Path.Combine(Environment.CurrentDirectory, "HQMastRpt.rdl"));
    
    
    
    	var reader = fi.OpenText();
    
    
    
    	var rpt = serial.Deserialize(reader);//rpt就是Report类型对象。可以对它做处理。
    
    
    
    	//处理结束只要用serial.Serialize(writer)中去就行了。
    
    }
    
    

     


    我主要是想通过.NET调用报表API,然后批量制定缓存计划。几百张报表,一张一张设置,很费时间。在BO里有这样的API,进行批量设置。
    2010年9月3日 5:30
  • 原来你是想调用WebService改Server上的报表,那好办!

    他的官方API就是

    Reporting Services Web Services Class Library

    http://msdn.microsoft.com/zh-cn/library/cc282207(v=SQL.100).aspx

     

    下面是转载的一个使用示例:

    //首先添加web引用
    //http://server/reportserver/reportservice.asmx
    
    ReportingService rService = new ReportingService();//创建报表服务实例
    rService.Credentials = System.Net.CredentialCache.DefaultCredentials;//默认系统凭据
    CatalogItem[] catalogItems;
    catalogItems = rService.ListChildren("/", true);//对根路径检索
    foreach(CatalogItem item in catalogItems)
    {
      if(item.Type ==ItemTypeEnum.Folder)
    {
    //遍历报表文件夹
    }
    }
    foreach(CatalogItem item in catalogItems)
    {
    if(item.Type ==ItemTypeEnum.Report)
    {
    //遍历报表
    }
    }
    
    //搜索报表
    ReportService.SearchCondition[] condition=new SearchCondition[1];
    condition[0]=new SearchCondition();
    condition[0].Name ="Name";
    condition[0].Value =this.TextBox1.Text ;
    catalogItems=rs.FindItems ("/",WebReportSample.ReportService .BooleanOperatorEnum .And ,condition);
    
    //发布报表
    byte[] reportData;
    System.IO .FileStream fs=System.IO .File.OpenRead ("c:\\Report1.rdl");
    reportData=new byte [fs.Length ];
    fs.Read (reportData,0,fs.Length );
    rs.CreateReport ("New Report","/",false,reportData,null);
    
    //删除报表
    rs.DeleteItem ("报表名称");
    
    //转自 http://blog.csdn.net/lanmao100/archive/2008/07/04/2612093.aspx
    
    
    2010年9月3日 5:41
  • 可以偿失修改 Report Catalog。

    2010年9月5日 11:52
    版主