Dar*_*ryl 5 javascript internet-explorer-9 dynamics-crm-2011
我正在为现场CRM 2011中的自定义实体添加约会.
在crmForm_window_onload_handler断点命中,但是当我踏入什么应该是我的自定义JS网页资源文件(appointment.js)的onLoad功能,而不是步入我appointment.js文件的onLoad功能,它便在onLoad我的文件的精确副本,只有它的名称是脚本块(从0-99的一些随机数)即script block(23).为什么要创建这些脚本块?在保存我也运行此代码:
Xrm.Page.getAttribute('new_issyncreqd').setValue(true);
Xrm.Page.getAttribute('new_issyncreqd').setSubmitMode("always");
Run Code Online (Sandbox Code Playgroud)
但它实际上并没有保存,我猜它与脚本块有关......
我确实弄清楚为什么更新IsSyncReqrdField的代码不起作用.这适用于Site CRM 2011 V版5.0.9690.1992(汇总6).它显然有一个Appointment实体的错误,它首先保存实体,然后实际运行自定义onSave代码.这是它目前的样子:
function crmForm_onsave_handler(eventObj,eventArgs)
{
try
{
var eContext=Mscrm.FormUtility.constructExecutionObject(eventObj,0,eventArgs,null);
eContext = Mscrm.FormUtility.constructExecutionObject(eventObj,0,eventArgs,eContext)
Mscrm.Form_onsave();
eContext=Mscrm.FormUtility.constructExecutionObject(eventObj,1,eventArgs,eContext)
NEW.Appointment.onSave(eContext); // <-- My custom OnSave Handler
}
catch(e)
{
displayError('crmForm', 'onsave', e.description);
}
}
Run Code Online (Sandbox Code Playgroud)
该错误是该Mscrm.Form_onsave();行实际上是将记录保存到数据库中,因此当自定义事件处理程序运行时,它已经被保存,并且在自定义事件处理程序中进行的任何更新都不会更新记录.
这个bug的修复是bSaveInProgress = true;在表单的onLoad中设置,然后是bSaveInProgress =!isValid; event.returnValue = isValid; 在onSave中.该bSaveInProgress = true;会继续Mscrm.Form_onsave();从实际上节约了recrod和event.returnValue实际上会导致创建它.它起作用并且是一个黑客攻击,但这是我唯一想出来解决这个问题的方法......
为什么要创建和执行脚本块而不是使用已存在的文件?
首先,当内联 JavaScript 来自 XML 或 SVG 文件时,会创建脚本块。
这是一个已知的 IE 问题(扫描“脚本块”):http://msdn.microsoft.com/en-us/ie/ff959805.aspx
您可以通过使用 IE9 中的“网络”选项卡然后捕获表单加载来查看 XML 文件。应该有一些实际上是 XML 的 aspx 文件。一个示例是 RenderGridView.aspx。
所以问题是再次检索 aspx 文件,然后执行内联函数替换以前的脚本块(因为 javascript 作为单个全局文件运行)。