目前我在 asp.net 应用程序中调用 RDLC 报告,其中 .rdlc 正在调用,我们传递数据源和生成为 PDF 的报告,整个过程在按钮单击时启动并生成报告。
现在这个过程需要自动化并且报告应该在星期一早上生成。
有人建议我们可以使用 SSIS Script Task,我们可以调用外部 DLL,也可以调用 .rdlc 文件来生成报告,然后我们可以安排 SSIS 包?
我从来没有在 SSIS 方面的经验,需要您的建议以及如何做到这一点,如果有可能?谢谢你!
使用 SSRS 安排报告运行。无需 ASP.net 或 SSIS,SSRS 已内置调度。
您可以使用 SSRS 订阅来发送报告。如果您真的希望 SSIS 发送报告。您可以执行以下操作。
您可以使用以下代码片段通过 SSIS 发送 SSRS 报告。
您应该创建一些 SSIS 变量来存储报表和呈现信息。
http://localhost/ReportServer/reportexecution2005.asmx
[您的报告服务的位置]在以下代码段中。
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;
}