• 解决crystal report水晶报表在浏览器提示bobj未定义的错误


           网上的中文文章(比如这篇文章)都是写的部署到服务器后出现的问题,同时也指出要把crystal report的aspnet_client文件夹拷贝到对应项目的根目录里,这样就可以正常显示了,但是具体到我本人的情况,还是无法只通过拷贝aspnet_client这个文件夹就可以解决问题。所以在中文搜索无果的情况下,通过英文搜索关键字 bobj is undefined后,最终解决问题。这里列出参考链接,stackoverflow中这个问题给出了原因解释,这篇文章给出了修改web.config文件解决方案,不过其中在设置url中的地方有点问题,需要参考这篇文章;另一篇文章则给出了在引入了水晶报表的aspx中,通过指定相应的script标签正确引入bobj对象解决问题。

          先说一下,我的开发环境是VS2012,水晶报表使用的是CRforVS_13_0_5这个exe,操作系统是win10。基本上,在安装完crystal report之后,会在C盘中多出一个inetpub文件。

    网上说的把aspnet_client文件夹拷贝到对应项目的根目录中是解决bobj is undefined问题的第一步。其实,如果是要显示水晶报表的话,估计只用引入crystalreportviewers13这个文件就可以,不过为了避免不必要的麻烦,建议还是引入aspnet_client这整个文件夹比较好。把项目引入之后,如果你这样就不会弹出“bobj未定义”并可以直接看到报表出来的话,就可以不用往下看了,如果仍然弹出错误“bobj 未定义”,那么恭喜你,可以继续往下看了。

          如果继续报错,那么根据之前我列的两种方式来做,是都可以解决的,不过解决中要注意下相关情况。这里,我把两种解决方式都列出来了。

          第一:修改web.config,在你的web.config中,需要在<sectionGroup>中添加<section>节点,内容如下:

    <section name="crystalReportViewer" type="System.Configuration.NameValueSectionHandler"></section>

    如果你连前一个crystalreports的<sectionGroup>节点也没有的话,可以手动添加(我是手动添加的),内容如下:

    <configSections>
          <sectionGroup name="businessObjects">
                <sectionGroup name="crystalReports">
                      <section name="rptBuildProvider" type="CrystalDecisions.Shared.RptBuildProviderHandler, CrystalDecisions.Shared, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304, Custom=null"/>
                      <section name="crystalReportViewer" type="System.Configuration.NameValueSectionHandler"></section>
                </sectionGroup>
          </sectionGroup>
    </configSections>

    其中,黄色的就是上面在<section>节点中药添加的内容。之后,在web.config中,<businessObjects>节点中添加如下节点:

    <crystalReportViewer>
          <add key="ResourceUri" value="/aspnet_client/system_web/4_0_30319/crystalreportviewers13"/>
    </crystalReportViewer>

    这里,标黄的节点的value属性中内容填写你引入文件的相对路径。之前列的那片说的修改web.config文章里,就是在这个地方有点儿问题,他那里说要加“~”这个符号,实际上是不能加的(我这里是这样,如果加了还是报错),我也给出了相关解决办法的文章,里面就指出了不能加“~”。如果你跟我一样,也是连<businessObjects>节点都没有的话,可以手动添加,内容如下:

    <businessObjects>
        <crystalReports>
                <rptBuildProvider>
                      <add embedRptInResource="true"/>
                </rptBuildProvider>
                <crystalReportViewer>
                      <add key="ResourceUri" value="/aspnet_client/system_web/4_0_30319/crystalreportviewers13"/>
                </crystalReportViewer>
          </crystalReports>
      </businessObjects>

    其中,黄色的就是上面在要添加的内容。

    第二种方式,就是直接在相关aspx中添加对应的script标签引入crv.js文件了,具体如下:

    <head runat="server">
        <title></title>
        <script src='<%=ResolveUrl("~/crystalreportviewers13/js/crviewer/crv.js")%>' type="text/javascript"></script>
    </head>

    这里解释一下,bobj对象是定义在crv.js这个文件中的

    ,而如果不引入这个文件,自然找不到bobj这个对象了,通过浏览器也可以看见,如果没有引入,请求的文件是找不到的。

    引入之后,可以看到,文档加载成功,然后在HTML中也添加了

    之前设置web.config的原因也是为了引入crv.js。

    而且,其实在ResolveUrl中的地址中也可以不加“~”符号,为了于web.config保持一致,建议不加,这里列出来的原因,主要是参考的文章也加了。至此,就解决了我的关于bobj is undefined问题。在这两个方法中,我个人是建议设置web.config文件的,这样,可以把一票的相关js文件引入进来,省得在出现别的对象找不到的问题。希望看到这篇文章的朋友,这个文章能够对你有所帮助。

  • 相关阅读:
    监控体系(二)
    piwik安装部署
    smokeping安装部署
    监控体系(一)
    学习zabbix(九)
    学习zabbix(八)
    学习zabbix(七)
    学习zabbix(六)
    数据结构之树形结构
    数据结构之线性结构
  • 原文地址:https://www.cnblogs.com/muzinian/p/4721690.html
Copyright © 2020-2023  润新知