Dynamics CRM 2013 Javascript升级

Kas*_*shi 1 javascript microsoft-dynamics dynamics-crm dynamics-crm-2013 dynamics-crm-2016

我们正在测试2013年至2016年Dynamics CRM的升级,以了解CRM升级后需要升级的自定义项.

我们有以下用于特定情况的Javascript网络资源.

function MyOnLoad()
{
   var pickListValue = Xrm.Page.getAttribute("field1").getValue();
   if (Xrm.Page.ui.getFormType() == 2 && pickListValue == 100000006)
   {
      var ddlNewField1 = document.getElementById("field1");
      if (ddlNewField1.addEventListener) { 
         ddlNewField1.addEventListener ("change", function () {MyOnChange();}, false);  
      }
      else {
         ddlNewField1.attachEvent('onchange',MyOnChange);
      }
   }
}

function MyOnChange()
{
   if (Xrm.Page.getAttribute("field1").getValue() == "100000006") {    
       Xrm.Page.getControl("field2").setVisible(false);     
       Xrm.Page.getAttribute("field2").setRequiredLevel("none");    
   }

// If the selected value is not Other, hide Specify, and set requirement to Not Required    
   else {    
        Xrm.Page.getControl("field2").setVisible(true);  
        Xrm.Page.getAttribute("field2").setRequiredLevel("required");
   }
}
Run Code Online (Sandbox Code Playgroud)

此代码在我们的Dynamics CRM 2013中运行良好,它旨在执行以下操作:

加载Lead表单时,如果FIELD1的值设置为特定值,它将显示第二个字段FIELD2并使其成为必需的业务.

这里棘手的部分是,如果第一个字段在表单加载时包含该特定值,则第二个字段仅可见.如果由于某种原因,表单加载期间第一个字段的值不同,即使您选择该特定值,第二个字段也不会显示.

所以要恢复:

  • 在Form Load上永远不会显示FIELD2

  • 如果On Form Load FIELD1值等于X AND FIELD1值改变 - > SHOW FIELD2并使其成为必需

  • 如果On Form Load FIELD1值不等于X且FIELD1值改变 - >从不显示FIELD2,即使FIELD1的选择变为X,因为它最初不是X

我试着解释自己,所以我希望我清楚这个实际的javascript是做什么的.

升级后的问题与"addEventListener"有关:

TypeError:无法在MyOnLoad中读取null的属性"addEventListener"

我想问一下是否有人可以帮我们升级这个Javascript,或者是否有可以替换它的业务规则.我实际上尝试设置业务规则,但无法在业务规则中分离负载和更改的条件.

谢谢

Hen*_*k H 5

不要像使用时那样访问DOM document.getElementById.用微软的话来说:

JavaScript开发人员习惯于在代码中与文档对象模型(DOM)元素进行交互.您可以使用window.getElementById方法或jQuery库.您可以在HTML Web资源中自由使用这些技术,但不支持它们访问Microsoft Dynamics 365应用程序页面或实体表单中的元素.而是通过Xrm.Page对象模型公开对实体表单元素的访问.Microsoft Dynamics 365开发团队保留更改页面组成方式的权限,包括元素的ID值,因此使用Xrm.Page对象模型可以保护代码免受页面实现方式的更改.

在您的情况下,您可以改为使用受支持的addOnChange:

Xrm.Page.getAttribute("field1").addOnChange(MyOnChange)
Run Code Online (Sandbox Code Playgroud)