Dynamics CRM 2013 Javascript升级

Dynamics CRM 2013 Javascript升级,javascript,dynamics-crm,microsoft-dynamics,dynamics-crm-2013,dynamics-crm-2016,Javascript,Dynamics Crm,Microsoft Dynamics,Dynamics Crm 2013,Dynamics Crm 2016,我们正在测试从2013年到2016年的Dynamics CRM升级,以了解CRM升级后需要升级哪些定制 我们有以下Javascript webresource,用于特定情况 function MyOnLoad() { var pickListValue = Xrm.Page.getAttribute("field1").getValue(); if (Xrm.Page.ui.getFormType() == 2 && pickListValue == 10000000

我们正在测试从2013年到2016年的Dynamics CRM升级,以了解CRM升级后需要升级哪些定制

我们有以下Javascript webresource,用于特定情况

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 form时,如果FIELD1的值设置为特定值,则显示第二个字段FIELD2,并使其成为业务所需

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

因此,请继续:

  • 表单加载时从不显示字段2

  • 如果表单上的Load FIELD1值等于X且FIELD1值更改->显示FIELD2并将其设置为必需

  • 如果表单上的Load FIELD1值不等于X,并且FIELD1值更改->即使FIELD1的选择变为X,也不要显示FIELD2,因为它最初不是X

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

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

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

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


谢谢

不要像使用
document.getElementById
时那样访问DOM。用以下的话来说:

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

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


不要像使用
document.getElementById
时那样访问DOM。用以下的话来说:

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

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


我不记得引入了哪个CRM版本,但您是否可以弃用JavaScript并替换为业务规则?我不记得引入了哪个CRM版本,但您是否可以弃用JavaScript并替换为业务规则?
Xrm.Page.getAttribute("field1").addOnChange(MyOnChange)