【发布时间】:2015-03-03 11:40:25
【问题描述】:
我有一份工作报告,但我想更改报告名称。默认情况下,它使用 RDL 文件名。我想为下载的文件设置不同的名称。
有没有办法为从 SSRS 下载的报告动态生成文件名?
【问题讨论】:
标签: reporting-services ssrs-2008
我有一份工作报告,但我想更改报告名称。默认情况下,它使用 RDL 文件名。我想为下载的文件设置不同的名称。
有没有办法为从 SSRS 下载的报告动态生成文件名?
【问题讨论】:
标签: reporting-services ssrs-2008
请尝试使用 ReportViewer 的 DisplayName 属性
ReportViewer.ServerReport.DisplayName = <Your Parameter Value>;
ReportViewer.LocalReport.DisplayName = <Your Parameter Value>;
【讨论】:
如果您使用的是数据驱动订阅,则可以使用 SQL 动态设置报告名称。
否则无法在 SSRS 中执行此操作。您始终可以在导出后使用外部脚本为您重命名 PDF,但这不是完全自动的。
【讨论】:
您也可以使用 Javascript 挂钩来执行此操作。有一个教程 here 让我开始了,但对我没有完全的工作。
我最终做的是在<sql server folder>\ReportServer\Pages\ 中的ReportViewer.aspx 中添加一些javascript,在<body> 末尾的脚本标记中。对 URL 的检查确保它只影响应该更改名称的报告。
这适用于空格和其他特殊字符(只要文件名中允许它们)。
function modifyExportFileName() {
/* Change the name of file exports */
var filename = false;
if (window.location.href.indexOf('Folder/Report') !== -1) { //it's the report we want
filename = getParameter('parameter'); // returns false if not set
// should also have access to report DOM here, also Date(), etc.
} // could add more here as needed in else if blocks
if (filename) { // we have a filename set.
console.log('changing filename of exported reports to ' + filename);
changeFilename(filename);
}
}
function getParameter(param) {
//case sensitive parameter extractor.
var l = window.location.href;
if (l.indexOf(param + '=' > -1)) {
var param_location = l.indexOf(param + '=') + (param + '=').length;
return l.substring(param_location, l.indexOf('&', param_location + 1));
}
return false;
}
function changeFilename(filename) {
var r = null,
url = null;
try {
r = this.$find('ReportViewerControl')._getInternalViewer();
} catch(e) {
setTimeout(function () {changeFilename(filename)}, 1000); //maybe we're not done loading.
console.log("trying again");
return false;
}
url = r.ExportUrlBase;
if (url) {
var i = url.indexOf('FileName='),
j = url.indexOf('&', i+1);
r.ExportUrlBase = url.substring(0, i) + 'FileName=' + filename + url.substring(j);
console.log('reset filename to ' + filename);
}
}
modifyExportFileName();
编辑:我注意到这段代码没有在公司网络的 IE 中运行。原因是console.logs。如果您的网站在 IE 兼容模式下运行,请将它们注释掉,因为 IE5 没有控制台。
【讨论】: