试图在CRM2011中运行报告,得到'系统未定义'

时间:2015-03-24 19:54:11

标签: dynamics-crm-2011

我在CRM2011中有一个报告,它是一个上传的RDL文件。当我尝试运行它时,我收到错误'系统未定义'。当我查看Debugger for Viewer.aspx时,它会显示

Sys.WebForms.PageRequestManager._initialize
('scriptmanager','form1',
['freeportViewer$ReportViewer','',
'freeportViewer$DocMap','',
'freeportViewer$ct109$ReportArea',''],[], 
['freeportViewer$ct109$ReportControl$ct100',''],1000,
'');

x Sys未定义

知道这里有什么问题吗?

1 个答案:

答案 0 :(得分:0)

原因是脚本尚未加载,

当浏览器运行该代码时,它会期望在某处定义Sys.WebForms.PageRequestManager。某处恰好位于从脚本标记加载的其他脚本中,如下所示:

由于您使用的是MSCRM报告Viewer.aspx,我怀疑此aspx文件是否已编辑,或者可能是浏览器问题。保留原件的副本,然后尝试以下操作:

如果浏览器无法加载这些脚本,则脚本引擎无法找到Sys,Sys.WebForms,Sys.WebFormsPageRequestManager的定义,从而找不到错误。

  1. 您可以尝试在主页中的标记之后移动asp:ScriptManager并在您的aspx页面中阻止
  2. 如果您使用ASP.NET AJAX ScriptManager控件向页面添加其他脚本,那么您也可以免受类似问题的影响。 ScriptManager将确保您的脚本在UI之前呈现,这会强制浏览器在呈现UI之前加载它们。

    1. ScriptManager上有一个控制此行为的属性(LoadScriptsBeforeUI),因此如果将其设置为false,则需要采用一些防御性编程:
    2. 类似的东西:

      function hasloaded() 
      { 
        if(typeOf(Sys) == 'undefined'){ 
          alert('Please try again. The page hasn't finished loading. try refreshing the page.'); 
           return false; 
        } else { 
           return true; 
        } 
      } 
      
      if(hasLoaded()){ 
        //work with Sys. 
      } 
      
      1. 我们可以通过在webconfig文件中添加一些代码来解决此错误...代码如下:
      2. <httpHandlers> <remove verb="*" path="*.asmx"/> <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/> </httpHandlers> <httpModules> <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> </httpModules>

        将此代码放在<system.web>