在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();
这两者都没有工作。我尝试访问文本而不是数值(只是作为一个测试),但无法获得这些数据。
但是,当我尝试与包含静态选项的选项集相同的方法时,我可以访问它们没有问题。
与我要去哪里错了,将不胜感激任何帮助......
答
CRM选择列表是一个weird control。虽然getAttribute
和getControl
是CRM支持的DOM操纵器,但不像您期望的动态选项那样100%兼容。
直到除非您在CRM选项列表控件自定义项中添加了物理静态选项,否则不能使用getAttribute
。
使用getControl
,只显示您的选项,但它不是原始的CRM选项列表选项以存储在数据库中。
根据您的需要添加所有选项为静态,hide/show。
更新:
在飞行中添加一个新的optionset值,使用InsertOptionValueRequest
为目标的元数据服务&执行请求。阅读MSDN
我从您的问题中了解到,您已经将所有选项集列表存储在名为“varPicklist”的变量中。对 ? 比你想要做的?不够清楚 – mzh
不,我正在做的是我从窗体上的一个空的选项集控件开始。然后在Form Load上,Javascript调用一个API。这将返回一个XML对象,其中包含所有选项。然后,我循环选项,创建一个选项对象,并将它们添加到列表中,一次一个。然后在表单中,我尝试引用列表中的选项。问题是,我无法在这一点上引用这些选项。 – odinel