CRM2015:首次更新表单时验证字段

时间:2017-04-03 16:11:41

标签: dynamics-crm-2015

我在某个自定义实体的表单上添加了一个自定义按钮,单击该按钮会复制记录并在新窗口中打开新创建的记录,即新创建的记录的FormTypeupdate

在打开的窗口中,我需要知道是否单击了保存按钮。只要没有点击,一些字段就可以打开进行编辑;点击后,这些字段将被禁用。

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

我的问题是合乎逻辑的:为了在第一次保存点击时将此字段设置为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...
}

1 个答案:

答案 0 :(得分:1)

只需称呼:

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函数中检查该参数,如果它在那里,只需执行您的特定逻辑