我在我的aspx中嵌入了Microsoft.Reporting.WebForms.ReportViewer
控件。我的网站适用于mysite.com。
当尝试exmple导出报告时,有一个新的黑色窗口打开地址
mysite.com/Reserved.ReportViewerWebControl.axd...
工作正常。
但是..我想通过我的代理传递那个axd。我的意思是,我想强制导出使用url
myproxy.mysite.com/Reserved.ReportViewerWebControl.axd...
会将请求重定向回mysite.com/Reserved.ReportViewerWebControl.axd...
我注意到,该链接是在js内构建的(在该axd中包含了这个链接):
ExportReport: function(format)
{
if (this.ExportUrlBase == null)
return false;
window.open(this.ExportUrlBase + encodeURIComponent(format), "_blank");
return true;
},
axd的url存储在ExportUrlBase
中。 如何将其更改为我的代理服务器网址?
答案 0 :(得分:0)
可以在javascript中修改ExportUrlBase
字段。报告本身存储在页面某处的占位符中,一旦发现您可以在其上创建调用_getInternalViewer()函数以获取对ExportUrlBase的访问权限。看看下面的代码:
function ModifyExportUrlBase()
{
var rv = null;
var r = null;
try
{
// get the report viewer
rv = this.$find("ctl31");
r = rv._getInternalViewer();
}
catch(err)
{
console.log(err)
setTimeout(ModifyExportFileName, 2000)
return;
}
if(r == null)
{
setTimeout(ModifyExportFileName, 2000);
return;
}
else{
r.ExportUrlBase = "/yourproxypath" + r.ExportUrlBase
}
}
ModifyExportUrlBase();
超时是必要的,因为报告是异步接收的,只有在报告完全加载后才能使用。
使用firebug上的inspect元素功能找到ctl31
来检查实际的下载链接,将会有一个onclick方法,它利用页面上的报告ID。我看过的其他网站表明它可能会{" reportViewer
"如果您使用的是动态CRM。最简单的方法是使用firebug或开发人员工具进行检查。
不幸的是,这不是对您的问题的完整修复,因为ExportUrlBase不存储整个URL,只是存储相对于域的URL,即ExportUrlBase =" Reserved.ReportViewerWebControl.axd ..."不是" www.yoursite.com/Reserved.ReportViewer ..."但是,一旦你可以更改它,你可以使用新配置在inetpub文件夹中创建一个目录,并通过该文件夹重定向链接以使用该配置。
来源:
http://reportsyouneed.com/ssrs-adding-date-to-exported-filenames/
答案 1 :(得分:0)
您可以尝试替换ExportReports()函数的行为:
Microsoft.Reporting.WebFormsClient._InternalReportViewer.prototype.ExportReport =
function(){ return "/proxypath" + this.ExportUrlBase }
window.open(
$find('ReportViewerControl').exportReport() + encodeURIComponent('CSV'),
"_blank"
);