2017-10-06 114 views
0

我正在將CRM 4解決方案升級到CRM 2011,我遇到了動態選項集的問題。在CRM 2011中使用Javascript從動態選項集(選擇列表)中獲取價值的問題

我通過調用Javascript中的API來填充選項集。這將返回一個文本和值選項的列表,然後我會遍歷它。

首先,我檢索對象本身添加靜態默認選項列表:

var varPicklist = Xrm.Page.getControl("list_name"); 

//Add a System Default option to the picklist 
var opt1 = new Option(); 
opt1.text = "System Default"; 
opt1.value = 100000; 
varPicklist.addOption(opt1); 

然後我通過收集迭代,創建一個對象,並添加每一個到列表:

//Populate the rest of the list 
var ObjectList = xmlDoc.getElementsByTagName("LookupItem"); 
for (var i = 0 ; i < ObjectList.length ; i++) 
{ 
    var optValue 
    var optText 
    var ObjectListItems = ObjectList[i].childNodes; 
    for (var j = 0 ; j < ObjectListItems.length ; j++) 
    { 
     var value = ObjectListItems[j].childNodes[0]; 
     if (ObjectListItems[j].nodeName == "Key") 
     { 
      optValue = value.nodeValue; 
     } 
     else if (ObjectListItems[j].nodeName == "Value") 
     { 
      optText = value.nodeValue; 
     } 
    } 

var opt = new Option(); 
opt.text = optText; 
opt.value = optValue; 
varPicklist.addOption(opt); 
}; 

如上所述,這一切似乎工作。選取列表會填入值並且不會出錯。如果我在此過程中粘貼警報,則會顯示正確的值或標籤。

但是,不知怎的,項目似乎迷路了。如果我試圖以任何方式從表單中的其他地方引用它們,我會得到空白。我試過了;

Xrm.Page.getAttribute("list_name").getSelectedOption().value 

...和這個;

Xrm.Page.getAttribute("list_name").getValue(); 

這兩者都沒有工作。我嘗試訪問文本而不是數值(只是作爲一個測試),但無法獲得這些數據。

但是,當我嘗試與包含靜態選項的選項集相同的方法時,我可以訪問它們沒有問題。

與我要去哪裏錯了,將不勝感激任何幫助......

+0

我從您的問題中瞭解到,您已經將所有選項集列表存儲在名爲「varPicklist」的變量中。對 ? 比你想要做的?不夠清楚 – mzh

+0

不,我正在做的是我從窗體上的一個空的選項集控件開始。然後在Form Load上,Javascript調用一個API。這將返回一個XML對象,其中包含所有選項。然後,我循環選項,創建一個選項對象,並將它們添加到列表中,一次一個。然後在表單中,我嘗試引用列表中的選項。問題是,我無法在這一點上引用這些選項。 – odinel

回答

2

CRM選擇列表是一個weird control。雖然getAttributegetControl是CRM支持的DOM操縱器,但不像您期望的動態選項那樣100%兼容。

直到除非您在CRM選項列表控件自定義項中添加了物理靜態選項,否則不能使用getAttribute

使用getControl,只顯示您的選項,但它不是原始的CRM選項列表選項以存儲在數據庫中。

根據您的需要添加所有選項爲靜態,hide/show

更新:

在飛行中添加一個新的optionset值,使用InsertOptionValueRequest爲目標的元數據服務&執行請求。閱讀MSDN

+0

感謝您的回答。那麼如何將我的動態選項轉換爲靜態選項,並將它們添加到控件中?我是否需要從應用程序的不同部分調用API並將值保存在某處? – odinel

+0

轉到實體,編輯選項列表並手動添加所有選項。你爲什麼想在代碼中做到這一點?這些選項多久更換一次?選擇清單是靜態數據(模式凍結)。查找適用於動態主數據(工具管理員可以添加/編輯/刪除),無需更改模式。 –

+0

我們必須以編程方式進行此操作。這些選項不會經常改變,但它們隨時都可能發生變化,我們不希望在他們這樣做時發佈新的定製。我通過使用JQuery而不是CRM方式解決了這個問題。不管怎麼說,還是要謝謝你 – odinel

相關問題