CRM2015:在第一次更新表单时验证字段

CRM2015: Validate a field on the first time a form is updated

我在某个自定义实体的表单上添加了一个自定义按钮,单击该按钮会复制记录并在新 window 上打开新创建的记录,即 FormType新创建的记录是 update.

在打开的 window 上,我需要知道是否单击了保存按钮。只要没有被点击,一些字段将被打开以供编辑;单击后,这些字段将被禁用。

目前,我有一个(隐藏的)位字段指示记录是否重复,其初始值设置为真。第一次单击保存按钮时,在我的 onSave 函数中,我将其设置为 false。此外,我有一个 onLoad 函数检查这个字段是真(可能只在记录被复制时发生)还是假。

我的问题是一个合乎逻辑的问题:为了在第一次保存点击时将此字段设置为 false,我实际上需要在每次点击 save 按钮时(以及非重复的)进行验证也有记录)。

我想也许有人可以提供其他一些逻辑上更正确的方法,只对保存事件进行一次验证。

这是相关的片段:

function OnLoad()
{
    // some code...
    if (Xrm.Page.getAttribute("sln_isduplicate").getValue() == true)
    {
        // open for edit relevant fields
    }
    else
    {
       // close for edit relevant fields
    }
    // some code...
}

function OnSave()
{
    // some code...
    if (Xrm.Page.getAttribute("sln_isduplicate").getValue() == true)
    {
        Xrm.Page.getAttribute("sln_isduplicate").setValue(false);
    }
    // some code...
}

简单地称之为:

Xrm.Page.getAttribute("sln_isduplicate").setValue(false);

在您的 OnLoad 函数中,在您完成所有表单修改后,因此:

function OnLoad()
{
    // some code...
    if (Xrm.Page.getAttribute("sln_isduplicate").getValue() == true)
    {
        // open for edit relevant fields
    }
    else
    {
       // close for edit relevant fields
    }

    Xrm.Page.getAttribute("sln_isduplicate").setValue(false);
}

它是否重复并不重要 - 您希望用户在保存记录时将此标志设置为 false。

另一种方法是动态添加 onsave 事件(因为我假设您已经在表单级别添加了它)。基本上它看起来像这样:

if (Xrm.Page.getAttribute("sln_isduplicate").getValue() == true)
{
    // open for edit relevant fields
    Xrm.Page.data.entity.addOnSave(OnSave);
}
else
{
   // close for edit relevant fields
}

这种方法只会为重复的记录添加 OnSave 函数。

但另一方面,我不会为此使用自定义字段,而是传递一些查询字符串参数来指示这是重复的。您可能正在这样打开新创建的记录:

Xrm.Utility.openEntityForm("entityname","A85C0252-DF8B-E111-997C-00155D8A8410");

但是当您查看此功能的 documentation 时,您会发现它有更多对您有用的选项:

 Xrm.Utility.openEntityForm(name,id,parameters,windowOptions)

其中参数可以是默认字段 ID 或一些完全自定义的值(但您必须 configure that

当然,显而易见的解决方案是:使用一些自定义查询字符串参数打开重复记录,在 onload 函数中检查该参数,如果存在,只需执行您的特定逻辑