如何在不中断保存的情况下更改值时禁用 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中的业务规则可以很好处理的。
例如这样的事情:-
我们有一个名为 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中的业务规则可以很好处理的。
例如这样的事情:-