我在某个自定义实体的表单上添加了一个自定义按钮,单击该按钮会复制记录并在新窗口中打开新创建的记录,即新创建的记录的FormType
是update
。
在打开的窗口中,我需要知道是否单击了保存按钮。只要没有点击,一些字段就可以打开进行编辑;点击后,这些字段将被禁用。
目前,我有一个(隐藏)位字段,指示记录是否重复,其初始值设置为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...
}
答案 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函数中检查该参数,如果它在那里,只需执行您的特定逻辑