使用JavaScript强制在Dynamics CRM 2011中使用SaveForm

Kan*_*ini 3 javascript dynamics-crm-2011

在CRM 2011中,我希望能够强制保存表单.我的要求如下.

  1. 当用户打开表单时,我会检查特定字段是否为空.
  2. 如果它是空的,我想强制保存,从而触发一个设置字段的插件.

我目前的代码如下.这是与LoadForm关联的FormOnLoad函数.

if(checkfield == null){
  Namespace.Functions.Contact.FormOnSave();
}
else{
 // do nothing. 
}
Run Code Online (Sandbox Code Playgroud)

现在,这失败了以下一行

无法从已释放的脚本执行代码.

我不知道如何继续前进.作为临时修复,我所做的是以下内容

if(checkfield == null){
  setTimeout('Namespace.Functions.Contact.FormOnSave()',4000);
}
else{
 // do nothing. 
}
Run Code Online (Sandbox Code Playgroud)

关于为什么会发生这种情况以及如何在没有超时的情况下修复它的任何建议都会非常有用吗?

我有一个看这个问题这个,但对我来说形式也得到加载或已实际上没有加载?

无论哪种方式,我如何强制保存CRM表单?

Sco*_*ion 6

您可以使用以下方法保存表单:

parent.Xrm.Page.data.entity.save();
Run Code Online (Sandbox Code Playgroud)

但它只会触发

(Xrm.Page.data.entity.getIsDirty() == true)
Run Code Online (Sandbox Code Playgroud)

但是,有一种解决方法可以将IsDirty属性设置为true.在PageLoad上运行Javascript函数.尝试更新您计划通过插件填充的字段的值:

例如

function OnPageLoad()
{
    var yourField = Xrm.Page.getAttribute("new_yourfield").getValue();
    if(yourField == null)
    {
        parent.Xrm.Page.getAttribute("new_yourfield").setValue("any value");
        parent.Xrm.Page.getAttribute("new_yourfield").setSubmitMode("always");
        parent.Xrm.Page.data.entity.save();
    }
}
Run Code Online (Sandbox Code Playgroud)