>我在Dynamics CRM 2016中有以下情况。
我正在尝试创建一个 JS Web 资源,该资源将作用于下拉字段更改。
function esitoappuntamento() {
Xrm.Page.getAttribute("new_esito").addOnChange(myOnChange);
function myOnChange() {
if (Xrm.Page.getAttribute("new_esito").getSelectedOption().value == "100000006") {
Xrm.Page.getControl("new_esitoapp").setVisible(false);
Xrm.Page.getAttribute("new_esitoapp").setRequiredLevel("none");
}
else {
Xrm.Page.getControl("new_esitoapp").setVisible(true);
Xrm.Page.getAttribute("new_esitoapp").setRequiredLevel("required");
}
}
}
我有选项集字段new_esito
选项/选项。我想做的是仅在表单加载并且new_esito值100000006并且有人将值从100000006更改为其余 7 个选项中的其他值时才显示new_esitoapp
字段。
否则,如果在表单加载时未100000006new_esito
值,则不应独立于我在 8 个可用选项的new_esito
字段中选择的内容显示new_esitoapp
字段。
这部分工作,因为我需要它工作,因为它在表单加载且字段值100000006的情况下工作正常。
问题是,即使表单加载并且new_esito
的值未100000006并且我将其更改为其他内容,它仍然显示new_esitoapp
字段。
所以行为应该是:
Form load -> new_esito = 100000006 -> change new_esito -> show new_esitoapp
Form load -> new_esito != 100000006 -> change new_esito -> no show new_esitoapp
现在的错误行为是:
Form load -> new_esito != 100000006 -> change new_esito -> show new_esitoapp
我希望我清楚地表明了我想要实现的目标。
期待您的回复。
问候
您应该在表单的 OnLoad 上触发您的 show\hide 操作。更多细节在这里:
- https://learn.microsoft.com/en-us/dynamics365/customer-engagement/developer/clientapi/reference/events/form-onload
- https://msdn.microsoft.com/en-us/library/gg334701.aspx
您的函数 myOnChange 应该在表单的 OnLoad 和 new_esito 属性的 OnChange 上触发。
另一种选择是利用业务规则:
- https://learn.microsoft.com/en-us/dynamics365/customer-engagement/customize/create-business-rules-recommendations-apply-logic-form
在上面的代码中,您只是编写一个事件处理程序myOnChange
并使用addOnChange
将其绑定到onChange
new_esito
事件。
当您在表单加载时调用此esitoappuntamento
时,它的绑定并准备好在下次发生更改时触发。
但是你不会触发它,除非你使用fireOnChange
触发它。所有这些都是动态的动态方式。
绑定此内容的另一种方法是在表单编辑器中,在字段属性下添加onChange
事件。这将绑定它以控制并在表单加载本身期间触发它。