3

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

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

我当前的代码如下。这是在与 LoadForm 关联的 FormOnLoad 函数中。

if(checkfield == null){
  Namespace.Functions.Contact.FormOnSave();
}
else{
 // do nothing. 
}

现在,这失败了,下面一行

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

我不知道如何进一步进行。作为临时修复,我所做的是以下

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

关于为什么会发生这种情况以及如何在没有超时的情况下修复它的任何建议真的很有帮助吗?

我看过这个问题这个,但在我的情况下,表单确实被加载了,或者它实际上还没有加载?

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

4

2 回答 2

6

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

parent.Xrm.Page.data.entity.save();

但它只会触发

(Xrm.Page.data.entity.getIsDirty() == true)

但是,有一种解决方法可以将 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();
    }
}
于 2013-09-05T11:57:26.283 回答
1

通过创建在读取或实体上注册的插件,您可以使用 Javascript 两次加载表单来跳过所有这些笨拙的事情。(或者更好,如果可能的话,在实体的创建上)

插件只会检查该字段,如果它为空,则执行您需要的任何逻辑来更新该字段,然后保存它并返回更新的字段(或者可能只是填充值并且不更新数据库,直到用户执行保存)

于 2013-09-06T12:22:01.307 回答