在CRM 2011中使用Javascript从动态选项集(选择列表)中获取价值的问题

问题描述:

我正在将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

CRM选择列表是一个weird control。虽然getAttributegetControl是CRM支持的DOM操纵器,但不像您期望的动态选项那样100%兼容。

直到除非您在CRM选项列表控件自定义项中添加了物理静态选项,否则不能使用getAttribute

使用getControl,只显示您的选项,但它不是原始的CRM选项列表选项以存储在数据库中。

根据您的需要添加所有选项为静态,hide/show

更新:

在飞行中添加一个新的optionset值,使用InsertOptionValueRequest为目标的元数据服务&执行请求。阅读MSDN

+0

感谢您的回答。那么如何将我的动态选项转换为静态选项,并将它们添加到控件中?我是否需要从应用程序的不同部分调用API并将值保存在某处? – odinel

+0

转到实体,编辑选项列表并手动添加所有选项。你为什么想在代码中做到这一点?这些选项多久更换一次?选择清单是静态数据(模式冻结)。查找适用于动态主数据(工具管理员可以添加/编辑/删除),无需更改模式。 –

+0

我们必须以编程方式进行此操作。这些选项不会经常改变,但它们随时都可能发生变化,我们不希望在他们这样做时发布新的定制。我通过使用JQuery而不是CRM方式解决了这个问题。不管怎么说,还是要谢谢你 – odinel