2

我正在写一个Javascript来调用外部链接,点击CRM 2011实体窗体中的自定义功能区按钮。在JavaScript中,我正在检查表单是否脏。如果表单很脏,(表示某些字段被用户修改),则JScript将使用Xrm.Page.data.entity.save()强制保存表单。但是,当必填字段未填写时,强制保存将不会发生,我必须显示一些自定义消息来填充这些字段,终止控制流程,并且不应打开外部链接。如何得到表格是否已经保存或没有..?检查表格是否保存在CRM 2011中Javascript

的一段代码如下:

function buttonOnClick() { 
    if (Xrm.Page.data.entity.getIsDirty()) 
    { 
     Xrm.Page.data.entity.save(); 
    } 
    else 
    { 
     window.open('http://www.google.com', 'name', 'width=900,height=800'); 
    } 
} 
+0

你试过吗?我认为CRM会为你做,并防止保存,显示关于必填字段的标准错误尚未完成。 – glosrob 2012-04-03 12:05:54

+0

是的,它会给出警告信息,但不会终止执行。如果我们知道表单没有保存,我们可以手动终止执行。 – 2012-04-03 12:15:02

+0

我很惊讶,忽略了必填字段并保存 - 不会破坏数据库的完整性吗?他们肯定是'需要'而不是'推荐'? – glosrob 2012-04-03 13:01:29

回答

3

当你说'表格已被保存'你的意思是第一次?如果是这样,你可以查询表单类型: -

Xrm.Page.ui.getFormType(); 

(它是在创建或更新例如)。如果表单已经处于更新模式,那么您可以按照您的说法检查表单是否脏。如果你想知道哪些必填项目尚未完成,你也可以潜在地遍历所有的形式和查询的属性,无论是业务要求或不: -

Xrm.Page.data.entity.attributes.get("myAttribute").getRequiredLevel(); 

和它添加到一个警告消息用户。

+0

这对创建新记录非常有用。什么是更新..的解决方案? – 2012-04-03 14:00:11

+0

如果表单已经处于更新模式,那么你可以检查表单是否脏 - >这样你就知道是否有任何字段已被更改。然后,您可以使用上面的代码查找所有必填字段,并检查这些字段是否有值。如果他们不这样做,您可以将字段名称添加到告诉用户的警告消息,而不是需要完成?正如其他用户评论的那样,尽管它基本上重新发明了OOTB功能,但是如果像你说标准事件已被阻止那样,它可以完成。 – 2012-04-03 14:15:10

+0

然后,我们应该检查每个领域的所需水平和其包含的价值或不。如果它的情况下,我有很多领域和许多形式.. 我们可以有任何财产,以获得窗体上的所有领域..​​....? – 2012-04-03 15:04:29

0

你可以添加自己的OnSave方法来验证字段并返回基于它们是否有效或无效的值。

例如

Xrm.Page.data.entity.addOnSave(function() { 
    var isValid = VerifyOnSave(); 
    if (isValid) { 
     //continue 
    } 
    else { 
     //show errors, cancel save 
    } 
); 

function VerifyOnSave() 
{ 
    //<insert validation logic here> 
    return true; 
} 

这并不明确告诉你救的形式,而是让你知道的形式是否有效,这可能是也可能不是足够接近。