0

目前我在 asp.net 应用程序中调用 RDLC 报告,其中 .rdlc 正在调用,我们传递数据源和生成为 PDF 的报告,整个过程在按钮单击时启动并生成报告。

现在这个过程需要自动化并且报告应该在星期一早上生成。

有人建议我们可以使用 SSIS Script Task,我们可以调用外部 DLL,也可以调用 .rdlc 文件来生成报告,然后我们可以安排 SSIS 包?

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

4

2 回答 2

0

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

于 2012-11-19T02:19:36.810 回答
0

您可以使用 SSRS 订阅来发送报告。如果您真的希望 SSIS 发送报告。您可以执行以下操作。

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

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

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

  1. 渲染扩展 ==> pdf
  2. RenderFileName ==> 您要写入的文件的名称
  3. 渲染格式 ==> 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;
        }
于 2012-11-19T19:20:34.937 回答