我正在将CRM 4解决方案升级到CRM 2011,而我遇到了动态选项集的问题。
我通过从Javascript调用API来填充选项集。这将返回一个文本和值选项列表,然后我将迭代它。
首先,我检索对象本身并在列表中添加一个静态Default选项:
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);
};
如上所述,这一切似乎都有效。选项列表会填充值并且不会出错。如果我在此过程中粘贴警报,则会显示正确的值或标签。
然而,不知何故,这些物品似乎在路上迷路了。如果我尝试从表单中的其他地方以任何方式引用它们,我就会返回null。我试过了;
Xrm.Page.getAttribute("list_name").getSelectedOption().value
......而且这个;
Xrm.Page.getAttribute("list_name").getValue();
两者都没有效果。我尝试访问文本而不是值(仅作为测试)并且无法获得这些值。
但是当我尝试使用包含静态选项的选项集的相同方法时,我可以毫无问题地访问它们。
任何有关我出错的地方的帮助都会受到赞赏......
答案 0 :(得分:2)
CRM选项列表是weird control。虽然getAttribute
和getControl
是CRM支持的DOM操纵器,但不像您期望的那样100%兼容动态选项。
除非您在CRM选项列表控件自定义中添加了物理静态选项,否则不能使用getAttribute
。
使用getControl
,只显示您的选项,但它不是存储在数据库中的原始CRM选项列表选项。
根据您的需要将所有选项添加为静态hide/show。
更新
要动态添加新的选项集值,请使用InsertOptionValueRequest
定位元数据服务&amp;执行请求。阅读MSDN