0

我正在尝试创建一个简单的函数,当按下功能区按钮时,将实体属性值设置为 null。现在我面临的问题是,我对实体所做的更改没有保存,表单重新加载并返回以前的值。

我将“任务”活动属性“实际结束”传递给按钮事件。“实际结束”字段默认禁用。

ClearField: function (field) {
    if (Xrm.Page.getAttribute(field) == null) return;

    Xrm.Page.ui.controls.get(field).setDisabled(false);
    Xrm.Page.getAttribute(field).setSubmitMode("always");
    Xrm.Page.getAttribute(field).setValue(null);

    if (Xrm.Page.data.entity.getIsDirty()) {
        Xrm.Page.data.entity.save(); //also tried addOnSave(function)
    }
}

在调试器之后,我能够跟踪所有更改是否正确,除了在 save() 方法上它们被“丢弃”,然后使用以前的值重新加载。此代码适用于 CRM UR8,但不适用于 CRM UR13。

我错过了什么吗?

4

2 回答 2

0

正如 Guido 在他的评论中提到的那样,代码看起来不错,这让我认为你的两个 if 语句之一失败了。

如果设置为空,第一个显然会失败。不太明显的是,如果该字段实际上不在表单上(即使它可能是实体的有效属性),它也会失败。因此,第 1 步,确保您的字段存在于表单中。

第二个我不确定...我认为 getIsDirty() 不会跟踪程序更改,因此即使您以编程方式更新字段并将其设置为始终提交,它也可能返回 false。不管它的工作原理如何,确实不需要 if 语句。该Xrm.Page.data.entity.save函数只有在它的某些值发生变化时才会真正保存,所以无论如何我都会删除你的脏检查。

于 2013-06-18T14:23:50.330 回答
0

呃,我的问题一直存在的问题是,即使该字段存在于表单中,它也从未传递过实体,因此无法保存它。我编辑了一个功能区按钮,以便通过 CrmParameters 传递实体,问题就消失了。无论如何,谢谢你们为我提供可能的解决方案!

于 2013-06-25T08:33:32.550 回答