javascript - 在 CRM 2011 中为从功能区打开的表单调试 javascript 时,如何创建脚本 block ?

标签 javascript internet-explorer-9 dynamics-crm-2011

设置

我正在向现场 CRM 2011 中的自定义实体添加约会。

  • 我单击功能区上的“新建事件”按钮,选择“约会”,然后单击“确定”。
  • 在打开的新窗口中,我按 F12 打开 IE 调试器,然后选择“脚本”选项卡,在我的 onLoad 函数和 FormScript.js.aspx 文件的 crmForm_window_onload_handler 中设置一个断点,然后单击开始调试按钮。
  • 然后我重新加载约会窗口。

问题

crmForm_window_onload_handler 中的断点命中,但是当我进入我的自定义 js Web 资源文件 (appointment.js) 的 onLoad 函数时,而不是进入我的 appointment.js 文件的 onLoad 函数,它会执行进入我文件的精确副本的 onLoad,只有它的名字是脚本 block (0-99 中的一些随机数)即 script block(23)。为什么要创建这些脚本 block ?在保存时,我也在运行这段代码:

Xrm.Page.getAttribute('new_issyncreqd').setValue(true);
Xrm.Page.getAttribute('new_issyncreqd').setSubmitMode("always");

但它实际上并没有保存,我猜它与脚本 block 有关......


更新

我确实弄清楚了为什么更新 IsSyncReqrdField 的代码不起作用。这适用于现场 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);
  }
}

错误在于 Mscrm.Form_onsave(); 行实际上是将记录保存到数据库中,因此当自定义事件处理程序运行时,它已经被保存,并且在自定义事件处理程序不会更新记录。

这个bug的修复是在form的onLoad中设置bSaveInProgress = true;,然后 bSaveInProgress = !isValid; event.returnValue = isValid; 在保存。 bSaveInProgress = true; 将阻止 Mscrm.Form_onsave(); 实际保存记录,而 event.returnValue 将实际导致创建记录。它有效并且是一个黑客,但这是我想出的唯一解决这个错误的方法......


问题依然存在

为什么要创建和执行脚本 block 而不是使用已经存在的文件?

最佳答案

首先,当内联 javascript 来自 XML 或 SVG 文件时,会创建脚本 block 。

这是一个已知的 IE 问题(扫描“脚本 block ”):http://msdn.microsoft.com/en-us/ie/ff959805.aspx

您可以使用 IE9 中的“网络”选项卡查看 XML 文件,然后捕获表单加载。应该有一些实际上是 XML 的 aspx 文件。一个示例是 RenderGridView.aspx。

所以问题是再次检索 aspx 文件,然后执行内联函数替换以前的脚本 block (因为 javascript 作为单个全局文件运行)。

关于javascript - 在 CRM 2011 中为从功能区打开的表单调试 javascript 时,如何创建脚本 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10229604/

相关文章:

javascript - IE 9 在扩展缩略图网格版本中单击失败

c# - 公共(public)语言运行时无法设置断点

javascript - "A Currency is Required if a Value Exists in a Money Field"- 设置默认货币

JavaScript 和 DOM

javascript - 在 JS 中 if (condition) 表示 == true 或 === true

html - 如何将按钮的背景图像设置为 ie 9+ 中的 base64 编码图像?

dynamics-crm-2011 - crm webapi 中的多级扩展

javascript - 将json解析为条形图d3js

javascript - 解析json表单数据以提交给API

jquery - 使用 jQuery 加载 JSON 时 IE9 的行为非常奇怪