Dynamics CRM 2013 Javascript升级

时间:2018-02-07 16:18:10

标签: javascript dynamics-crm microsoft-dynamics 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");
   }
}

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

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

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

所以要恢复:

  • 在表单加载中永远不会显示FIELD2

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

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

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

升级后的问题与“addEventListener”有关:

  

TypeError:无法读取null的属性“addEventListener”       在MyOnLoad

我想问一下是否有人可以帮助我们升级此Javascript,或者是否有可以取代此规则的业务规则。我实际上尝试过设置业务规则,但无法在业务规则中分离负载和更改的条件。

由于

1 个答案:

答案 0 :(得分:5)

当您使用document.getElementById时,不要像访问那样访问DOM。用Microsoft

的话说
  

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

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

Xrm.Page.getAttribute("field1").addOnChange(MyOnChange)