none
有关MS CRM4.0 的this.server 值问题 RRS feed

  • 问题

  • 把之前的一个问题再问一下。
    我的MSCRM4.0 之前的域名是 crm.***.com.cn,后来公司改域名,
    这个系统的地址也就换成 mscrm.***.com.cn。
    结果修改后,产生了很多问题。 许多按钮一点击就有js 报错。通过调试得知CrmService.js下的 function Ascentium_CrmService(sOrg, sServer)有问题。如图:

    监视变量后得知里面this.server的值 居然还是以前的网址crm.***.com.cn。
    于是我就把CrmService.js中的 网址改了,结果所做的任何修改都不起作用,好像改错地方,
    但是我肯定就是这个文件。
    会不会是存储在数据库中?或者我哪里没考虑到,请指点!!!
    2011年5月4日 6:34

答案

  • 数据库里面,MSCRM_Config数据库有个表,应该叫ServerProperty(记不太清了),有三个字段,Domain,AppDomian,SDK Domain

    还有,确认你的orgnization name跟你脚本里的是否一样。

    2011年5月4日 17:29
  • 把之前的一个问题再问一下。
    我的MSCRM4.0 之前的域名是 crm.***.com.cn,后来公司改域名,
    这个系统的地址也就换成 mscrm.***.com.cn。
    结果修改后,产生了很多问题。 许多按钮一点击就有js 报错。通过调试得知CrmService.js下的 function Ascentium_CrmService(sOrg, sServer)有问题。如图:

    监视变量后得知里面this.server的值 居然还是以前的网址crm.***.com.cn。
    于是我就把CrmService.js中的 网址改了,结果所做的任何修改都不起作用,好像改错地方,
    但是我肯定就是这个文件。
    会不会是存储在数据库中?或者我哪里没考虑到,请指点!!!

    继续补充:经过几个小时的摸索,发现了一点规律,看有没有高手看出是什么问题。(以下比较复杂,绕口,勿头晕...)
    之前以为crmService.js (这个称为 脚本1)修改没有用,但那是在使用mscrm.***.com.cn运行系统时。
    如果这时候,先修改crmService.js (这个改过的称为 脚本2),
    然后添加一个新二级域名mscrm2.***.com.cn来运行系统,这时调试显示的就是 脚本2。也就是修改有效。
    如果再修改crmService.js (这个称为 脚本3),运行mscrm2.***.com.cn,系统调试显示的还是脚本2。
    接下来 添加一个更新的二级域名 mscrm3.***.com.cn来运行系统,这时调试显示的就是 脚本3。
    以此类推,crmService.js 修改后只能被新域名享用,其他旧域名只能调用它创建时所存在的crmService.js 。
    很奇怪的现象...

    我是在内网测试,添加新域名(win2003,也就是给同一个站点 添加不同的主机头名),然后用内部DNS解析,
    最后导致的结果就是:不同的域名访问同一个crm系统,会加载不同的js脚本,从而出现不同的运行结果。

    懂我说什么吗...?
    客户端ie 缓存问题,修改后 清空下ie 缓存后再试吧.
    微软CRM
    2011年5月5日 0:24
    版主
  • 感谢各位帅哥美女的围观,问题终于解决了。确实是缓存问题,但是不知道是服务器缓存,还是客户端缓存,反正删不了。

    我收到加时间戳的提示,我估计为什么换了域名就能读到新修改的脚本,应该是程序以为新路径访问的不是同一个脚本,所以就重新加载该脚本。

    我尝试着给调用这个脚本的xmlhttp 加随机参数,结果证明了我的想法是正确的,如下。

    function loadScript(url)
    {
     var x = new ActiveXObject("Msxml2.XMLHTTP"); 
     // x.open('GET', url, false);  把这个改成下面的就OK了,不过这个缓存到底放在哪,还有待研究
     x.open('GET', url+'?'+Math.random(), false);
     x.send(''); 
     eval(x.responseText); 
     var s = x.responseText.split(/\n/); 
     var r = /^(?:function|var)\s*([a-zA-Z_]+)/i; 
     for (var i = 0; i < s.length; i++) 
     { 
     var m = r.exec(s[i]);
     if (m != null) 
     {
      window[m[1]] = eval(m[1]); 
     }
     } 
    }
    
    
    2011年5月6日 0:44

全部回复

  • 可以不用 this.server, 直接把实际的url 替换掉 this.server
    微软CRM
    2011年5月4日 12:32
    版主
  • 把之前的一个问题再问一下。
    我的MSCRM4.0 之前的域名是 crm.***.com.cn,后来公司改域名,
    这个系统的地址也就换成 mscrm.***.com.cn。
    结果修改后,产生了很多问题。 许多按钮一点击就有js 报错。通过调试得知CrmService.js下的 function Ascentium_CrmService(sOrg, sServer)有问题。如图:

    监视变量后得知里面this.server的值 居然还是以前的网址crm.***.com.cn。
    于是我就把CrmService.js中的 网址改了,结果所做的任何修改都不起作用,好像改错地方,
    但是我肯定就是这个文件。
    会不会是存储在数据库中?或者我哪里没考虑到,请指点!!!

    继续补充:经过几个小时的摸索,发现了一点规律,看有没有高手看出是什么问题。(以下比较复杂,绕口,勿头晕...)
    之前以为crmService.js (这个称为 脚本1)修改没有用,但那是在使用mscrm.***.com.cn运行系统时。
    如果这时候,先修改crmService.js (这个改过的称为 脚本2),
    然后添加一个新二级域名mscrm2.***.com.cn来运行系统,这时调试显示的就是 脚本2。也就是修改有效。
    如果再修改crmService.js (这个称为 脚本3),运行mscrm2.***.com.cn,系统调试显示的还是脚本2。
    接下来 添加一个更新的二级域名 mscrm3.***.com.cn来运行系统,这时调试显示的就是 脚本3。
    以此类推,crmService.js 修改后只能被新域名享用,其他旧域名只能调用它创建时所存在的crmService.js 。
    很奇怪的现象...

    我是在内网测试,添加新域名(win2003,也就是给同一个站点 添加不同的主机头名),然后用内部DNS解析,
    最后导致的结果就是:不同的域名访问同一个crm系统,会加载不同的js脚本,从而出现不同的运行结果。

    懂我说什么吗...?
    2011年5月4日 16:03
  • 数据库里面,MSCRM_Config数据库有个表,应该叫ServerProperty(记不太清了),有三个字段,Domain,AppDomian,SDK Domain

    还有,确认你的orgnization name跟你脚本里的是否一样。

    2011年5月4日 17:29
  • 把之前的一个问题再问一下。
    我的MSCRM4.0 之前的域名是 crm.***.com.cn,后来公司改域名,
    这个系统的地址也就换成 mscrm.***.com.cn。
    结果修改后,产生了很多问题。 许多按钮一点击就有js 报错。通过调试得知CrmService.js下的 function Ascentium_CrmService(sOrg, sServer)有问题。如图:

    监视变量后得知里面this.server的值 居然还是以前的网址crm.***.com.cn。
    于是我就把CrmService.js中的 网址改了,结果所做的任何修改都不起作用,好像改错地方,
    但是我肯定就是这个文件。
    会不会是存储在数据库中?或者我哪里没考虑到,请指点!!!

    继续补充:经过几个小时的摸索,发现了一点规律,看有没有高手看出是什么问题。(以下比较复杂,绕口,勿头晕...)
    之前以为crmService.js (这个称为 脚本1)修改没有用,但那是在使用mscrm.***.com.cn运行系统时。
    如果这时候,先修改crmService.js (这个改过的称为 脚本2),
    然后添加一个新二级域名mscrm2.***.com.cn来运行系统,这时调试显示的就是 脚本2。也就是修改有效。
    如果再修改crmService.js (这个称为 脚本3),运行mscrm2.***.com.cn,系统调试显示的还是脚本2。
    接下来 添加一个更新的二级域名 mscrm3.***.com.cn来运行系统,这时调试显示的就是 脚本3。
    以此类推,crmService.js 修改后只能被新域名享用,其他旧域名只能调用它创建时所存在的crmService.js 。
    很奇怪的现象...

    我是在内网测试,添加新域名(win2003,也就是给同一个站点 添加不同的主机头名),然后用内部DNS解析,
    最后导致的结果就是:不同的域名访问同一个crm系统,会加载不同的js脚本,从而出现不同的运行结果。

    懂我说什么吗...?
    客户端ie 缓存问题,修改后 清空下ie 缓存后再试吧.
    微软CRM
    2011年5月5日 0:24
    版主
  • 这个缓存问题,基本上是,每改一次就进行临时文件的清空操作,什么历史记录、cookie都删了,就是没啥效果。。。。

    我所以怀疑,是不是别的什么地方会有记忆,如哪里的注册表之类

    2011年5月5日 0:37
  • 感谢各位帅哥美女的围观,问题终于解决了。确实是缓存问题,但是不知道是服务器缓存,还是客户端缓存,反正删不了。

    我收到加时间戳的提示,我估计为什么换了域名就能读到新修改的脚本,应该是程序以为新路径访问的不是同一个脚本,所以就重新加载该脚本。

    我尝试着给调用这个脚本的xmlhttp 加随机参数,结果证明了我的想法是正确的,如下。

    function loadScript(url)
    {
     var x = new ActiveXObject("Msxml2.XMLHTTP"); 
     // x.open('GET', url, false);  把这个改成下面的就OK了,不过这个缓存到底放在哪,还有待研究
     x.open('GET', url+'?'+Math.random(), false);
     x.send(''); 
     eval(x.responseText); 
     var s = x.responseText.split(/\n/); 
     var r = /^(?:function|var)\s*([a-zA-Z_]+)/i; 
     for (var i = 0; i < s.length; i++) 
     { 
     var m = r.exec(s[i]);
     if (m != null) 
     {
      window[m[1]] = eval(m[1]); 
     }
     } 
    }
    
    
    2011年5月6日 0:44