如何在不中断保存的情况下更改值时禁用 Dynamics CRM 字段?

How to disable a Dynamics CRM field when the value changes without breaking save?

我们有一个名为 Primary 的两个状态字段,它设置为是或否。当该字段设置为否时,用户应该能够将其更改为是。当该字段设置为 yes 时,它应该被禁用,因此用户不能再更改它。

我们在 onload 事件中有处理这个的代码;效果很好。具有挑战性的案例是用户将字段从否更改为是,然后保存表单。这应该锁定该字段,以便用户无法将其改回否。我们试图通过将以下代码放在 onsave 事件中来解决这个问题:

export function onSave() {
    var primaryControl = Xrm.Page.getControl(
            d.ConstituentAffiliation.AttributeNames.Primary.toLowerCase());
        if (primaryControl) {
            if (primaryControl.getAttribute().getValue()) {
                primaryControl.setDisabled(true);
            }
            else {
                primaryControl.setDisabled(false);
            }
        }
    }

这部分有效。它确实禁用了该字段,因此无法再对其进行更改。但是,保存不起作用,因为 Dynamics CRM 似乎不会在保存期间将禁用字段的值发送回服务器,因此新值实际上不会被保存。

欢迎任何想法。 :)

看来下面一行解决了我的问题:

Xrm.Page.getAttribute(d.ConstituentAffiliation.AttributeNames.Primary
    .toLowerCase()).setSubmitMode("always");

所以现在的代码如下:

export function onSave() {

    var primaryControl = Xrm.Page.getControl( d.ConstituentAffiliation.AttributeNames.Primary.toLowerCase());

    if (primaryControl) {
        if (primaryControl.getAttribute().getValue()) {
            Xrm.Page.getAttribute( d.ConstituentAffiliation.AttributeNames.Primary.toLowerCase() ).setSubmitMode("always");
            primaryControl.setDisabled(true);
        }
        else {
            primaryControl.setDisabled(false);
        }
    }
}   

我应该感谢这个非常有帮助的博客:http://blogs.msdn.com/b/arpita/archive/2012/02/19/microsoft-dynamics-crm-2011-force-submit-on-a-disabled-field-or-read-only-field.aspx

看起来你已经解决了,但我很好奇。您是否尝试过使用业务规则?这种基本功能是CRM 2015中的业务规则可以很好处理的。

例如这样的事情:-