![](/img/trans.png)
[英]Javascript compatability errors with Microsoft Dynamics CRM 2013
[英]Dynamics CRM 2013 Javascript Upgrade
我們正在測試從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中運行良好,旨在執行以下操作:
加載潛在客戶表單時,如果將FIELD1的值設置為特定值,它將顯示第二個字段FIELD2並使其成為業務所需。
這里最棘手的部分是,僅當表單加載時第一個字段包含該特定值時,第二個字段才可見。 如果由於某種原因在表單加載期間第一個字段的值不同,那么即使您選擇該特定值,第二個字段也不會顯示。
因此,恢復:
在表單加載中從不顯示FIELD2
如果“在窗體上加載”,那么FIELD1的值等於X並且FIELD1的值更改->顯示FIELD2並使其為必填項
如果在“窗體加載”中FIELD1的值不等於X並且FIELD1的值更改->即使FIELD1的選擇因為最初不是X而變為X,也從不顯示FIELD2
我試圖解釋自己,所以我希望我對這個實際的javascript的功能很清楚。
升級后出現的問題與“ addEventListener”有關:
TypeError:無法在MyOnLoad讀取null的屬性'addEventListener'
我想問問是否有人可以幫助我們升級此Javascript,或者是否存在可以替代它的業務規則。 我實際上嘗試設置業務規則,但是無法在業務規則中區分負載和更改的條件。
謝謝
使用document.getElementById
時,請勿像執行操作那樣訪問DOM。 用微軟的話來說:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.