Dynamics CRM 2016 Javascript fix



>我在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将其绑定到onChangenew_esito事件。

当您在表单加载时调用此esitoappuntamento时,它的绑定并准备好在下次发生更改时触发。

但是你不会触发它,除非你使用fireOnChange触发它。所有这些都是动态的动态方式。

绑定此内容的另一种方法是在表单编辑器中,在字段属性下添加onChange事件。这将绑定它以控制并在表单加载本身期间触发它。