我有一份工作报告,但我想更改报告名称。默认情况下,它使用RDL文件名。我想为下载的文件设置不同的名称。
有没有办法为SSRS动态下载的报告生成文件名?
答案 0 :(得分:4)
请尝试使用ReportViewer的DisplayName属性
ReportViewer.ServerReport.DisplayName = <Your Parameter Value>;
ReportViewer.LocalReport.DisplayName = <Your Parameter Value>;
答案 1 :(得分:1)
如果您使用的是数据驱动订阅,则可以使用SQL动态设置报告名称。
否则无法在SSRS中执行此操作。
,您可以随时使用外部脚本为您重命名PDF,但这不是完全自动的。答案 2 :(得分:0)
您也可以使用Javascript钩子执行此操作。有一个教程here让我开始但没有为我完全工作。
我最终做的是在<sql server folder>\ReportServer\Pages\
的末尾添加一些javascript到<body>
中的ReportViewer.aspx。对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没有控制台。