今天我在MSCRM4.0上面部署多语言安装包(MUI language pack)之后,发现无法应用这个安装包.具体安装环境如下:
Windows server 2003英文版+Sql Server2005英文版+MSCRM4.0英文版(单服务器部署)
我下载了一个MSCRM4.0的简体中文语言包并将其安装在我的MSCRM4.0服务器上,然后进入CRM页面,点击[Settings]->[Administration]->[Languages],可以看到"Chinese(PRC)"出现在列表里,状态是"disabled".选中该语言项然后点击[Apply],出现如下错误提示:"An error has occurs. Try this action again. If the problem continues, check the Microsoft Dynamics Community for solutions or contact your orgnization's Microsoft Dynamics Administrator. Finally, you can contact Microsoft Support."
没头没脑的一句话,我一开始以为是自己安装出错,于是卸载重装,发现问题依旧.查了查安装部署指南也没有对多语言安装包进行特别的说明.于是采用事件查看器(Event Viewer)查看应用程序错误,其中有一条显示source是"MSCRMWebService"的错误,打开一看,错误描述如下:"MUI Provisioning failed. Error: Cannot insert duplicate key row in object 'dbo.LocalizedLabel' with unique index 'ndx_LocalizedLabel_ForSingleSelect'. The statement has been terminated. "
急忙上网搜索,发现有一个非官方的hotfix:DELETE FROM MetadataSchema.LocalizedLabel WHERE customizationlevel = 2.地址如下:http://blogs.msdn.com/mscrmfreak/archive/2008/02/02/mui-provisioning-failed-workaround.aspx
执行sql之后,再次应用新安装的语言,OK.然后在应用程序工具栏中[Tools]->[Options]中为当前用户选取该语言,发现没问题.测试了一下各个实体的增删改查,也没有发现问题.证明这个方案应该是可行的.
后来我想,也许MS官方也已经出了hotfix,于是到MS网站上查找,还真被我找到.链接地址如下:http://support.microsoft.com/kb/948604/EN-US/
原来是customization的问题.OK.在另一台机器上测试了一下这个hotfix,问题解决.需要指出的是,采用官方的hotfix进行修补之后,发现MetadataSchema.LocalizedLabel中customizationlevel=2的纪录并未被删除.显然,官方的做法对于保护数据而言更安全.
总结:
1,事件查看器对于定位错误非常有用.MSCRM会将异常信息写进application log,因此,发现问题以后,利用事件查看器找出错误描述,然后针对具体的情况寻求解决办法可以事半功倍;
2,排错需要时间和耐心.MSCRM在国内的应用不像在国外那么普遍,因此很多问题的技术文档和解决方案都是英文的,只要耐心查找,一定能找到.:)