SharePoint【整合Crystal Report水晶报表】-- 02. 如何在Sharepoint2010网站中整合Crystal Report水晶报表(显示数据 二)

     在上篇文章:SharePoint【整合Crystal Report水晶报表】-- 01. 如何在Sharepoint2010网站中整合Crystal Report水晶报表(显示数据 一),解释了如何把Crystal Report整合到Sharepoint2010并把报表数据显示出来,但这样并不完整,因为我们在开发时是以系统帐户进行开发和部署的,而当部署后,就会出现因为访问权限问题造成的报错。在我的开发中遇到一个问题表现为(当以普通用户帐号登录时):
    1、如果报表没有涉及传递任何参数:则报表能正常显示出来。
    2、如果报表涉及到传参:则会出现 "Fail to render the page"错误。

               


    由此推断,错误是发生在报表参数的传递过程中的。
    首先想到的解决办法是采用身份模拟(Impersonation)或通过SPSecurity.RunWithElevatedPrivileges来提高操作权限级别的方式来解决访问权限问题。但两者都失败了。分析原因是Crstalreportviewer在进行参数操作时仍然是通过的上下文用户权限进行操作,所以我们的身份模拟或RunWithElevatedPrivileges方式并没有作用到Crstalreportviewer这一过程。所以只有另想方法,问题就归结到"到底是什么资源拒绝了普通帐户的访问"。
   使用Fiddler和Httpwatcher进行跟踪和测试都没把问题解决掉,最后使用了Process Monitor,对比系统帐户和普通帐户的访问差异,结果发现蛛丝马迹

     
于是修改Windows目录AppData(C:\Windows\ServiceProfiles\NetworkService\AppData)的权限,增加Everyone的读写(read,write)权限。问题终于得以解决。这说明Crstalreportviewer在获取参数后,要通过w3wp进程在C:\Windows\ServiceProfiles\NetworkService下创建临时文件,而2008下默认配置下网络普通用户对此目录没有权限,于是抛出上述错误。

当然,如果在报表中嵌入了图片,则需要修改存放图片的临时文件的文件夹的权限。我所作的修改是设置everone权限给

"C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp\cr_tmp_image___sd1-sp1dev_2010 "从而使嵌入的logo图片显示出来。

 

转载:http://www.cnblogs.com/wsdj-ITtech/archive/2011/07/15/2107170.html

希望此文对大家有所启发。

posted @ 2013-02-20 16:55  绿森林  阅读(180)  评论(0编辑  收藏  举报