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

时间:2017-10-06 16:29:20

标签: javascript dynamics-crm dynamics-crm-2011 crm optionsettype

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

两者都没有效果。我尝试访问文本而不是值(仅作为测试)并且无法获得这些值。

但是当我尝试使用包含静态选项的选项集的相同方法时,我可以毫无问题地访问它们。

任何有关我出错的地方的帮助都会受到赞赏......

1 个答案:

答案 0 :(得分:2)

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

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

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

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

更新

要动态添加新的选项集值,请使用InsertOptionValueRequest定位元数据服务&amp;执行请求。阅读MSDN