2012-11-18 25 views
0

目前我在asp.net应用程序中调用RDLC报告,其中.rdlc正在调用,并且我们将生成的数据源和报告传递为PDF,整个过程在按钮单击时启动并生成报告。需要通过SSIS脚本任务自动完成RDLC报告?

现在这个过程需要自动化和报告应该在周一早上产生。

有一些建议我们可以使用SSIS脚本任务,我们可以调用外部DLL,也可以调用.rdlc文件来生成报告,然后我们可以安排SSIS包?

我从来没有在SSIS方面的经验,需要你的建议,以及如何做到这一点,如果有可能性?谢谢!

回答

0

使用SSRS安排报告运行。无需使用ASP.net或SSIS,SSRS内置调度功能。

0

您可以使用SSRS订阅发送报告。如果你真的想要SSIS发送报告。你可以做以下事情。

  1. 在SSRS
  2. 部署创建报表的报表到报表服务器
  3. 创建SSIS包
  4. 将你的脚本任务到包。

您可以使用以下代码片段使用SSIS发送SSRS报告。

您应该创建一些SSIS变量来存储报告和呈现信息。

  1. RenderExtension ==> PDF
  2. RenderFileName ==>你想要写的文件的名称
  3. RenderFormat ==> PDF
  4. RenderOutputPath ==>位置写入文件
  5. SSRSConnection = => http://localhost/ReportServer/reportexecution2005.asmx [的 位置报告服务]
  6. SSRSFolderName ==>报告的文件夹名称已部署
  7. SSRSReportName ==>报告名称

在下面的代码片段中。

public void Main() 
     { 
      var rExtension = Dts.Variables["RenderExtension"].Value.ToString(); 
      var rFileName = Dts.Variables["RenderFileName"].Value.ToString(); 
      var rFormat = Dts.Variables["RenderFormat"].Value.ToString(); 
      var rOutputPath = Dts.Variables["RenderOutputPath"].Value.ToString(); 
      var ssrsConnection = Dts.Variables["SSRSConnection"].Value.ToString(); 
      var ssrsFolderName = Dts.Variables["SSRSFolderName"].Value.ToString(); 
      var ssrsReportName = Dts.Variables["SSRSReportName"].Value.ToString(); 

      ReportExecutionService rs=new ReportExecutionService(); 

      Byte[] results; 

      string encoding = string.Empty; 
      string mimetype = string.Empty; 
      string extension = string.Empty; 
      Warning[] warnings = null; 
      string[] streamId = null; 
      string deviceInfo = null; 

      rs.Credentials = System.Net.CredentialCache.DefaultCredentials; 
      rs.Url = ssrsConnection; 

      try 
      { 
       var reportpath = string.Format("/{0}/{1}", ssrsFolderName, ssrsReportName); 
       rs.LoadReport(reportpath, null); 

       //Adding Parameters 
       //Commenting the following line Till we test the functionality 
       ParameterValue[] paramValues = new ParameterValue[4]; 

       ParameterValue paramValue = new ParameterValue(); 

       paramValue.Name = "ReportParamName"; 
       paramValue.Value = "X,Y,Z"; 

       paramValues[0] = paramValue; 

       rs.SetExecutionParameters(paramValues, "en-US"); 

       results = rs.Render(rFormat, deviceInfo, out extension, out mimetype, out encoding, out warnings, out streamId); 

       var filewithdatetime = string.Format("{0}_{1}",rFileName,DateTime.Now.ToString("yyyy_MM_dd_hhmmss")); 

       string path = string.Format(@"{0}\{1}.{2}", rOutputPath, filewithdatetime, rExtension); 

       MessageBox.Show(path); 

       using (FileStream stream = File.OpenWrite(path)) 
       { 
        stream.Write(results, 0, results.Length); 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.StackTrace); 
      } 

      Dts.TaskResult = (int)ScriptResults.Success; 
     }