【问题标题】:Issue getting value from dynamic option set (picklist) using Javascript in CRM 2011在 CRM 2011 中使用 Javascript 从动态选项集(选择列表)中获取价值的问题
【发布时间】:2017-10-06 16:29:20
【问题描述】:

我正在将 CRM 4 解决方案升级到 CRM 2011,但我遇到了动态选项集的问题。

我通过从 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);
};

如前所述,这一切似乎都有效。 Picklist 会填充这些值并且不会出错。如果我在此过程中在其中粘贴警报,则会显示正确的值或标签。

但是,不知何故,这些物品似乎在途中丢失了。如果我试图从表单的其他地方以任何方式引用它们,我会得到空值。我试过这个;

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

...还有这个;

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

这两种方法都不起作用。我尝试访问文本而不是值(仅作为测试),但也无法获得这些值。

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

如果我在哪里出错,我们将不胜感激......

【问题讨论】:

  • 我从您的问题中了解到,您已经将所有选项集列表存储在一个名为“varPicklist”的变量中。对 ?比你想做什么?不够清楚
  • 不,我正在做的是从表单上的一个空选项集控件开始。然后在 Form Load 上,Javascript 调用一个 API。这将返回一个 XML 对象,其中包含所有选项。然后,我遍历选项,创建一个 Option 对象,并将它们添加到列表中,一次一个。然后稍后在表单中,我尝试引用列表中的选项。问题是,我现在无法引用这些选项。

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


【解决方案1】:

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

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

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

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

更新:

要即时添加新的选项集值,请使用InsertOptionValueRequest 定位元数据服务并执行请求。阅读MSDN

【讨论】:

  • 感谢您的回答。那么如何将我的动态选项转换为静态选项,并将它们添加到控件中呢?我是否需要从应用程序的不同部分调用 API 并将值保存在某处?
  • 转到实体,编辑选项列表并手动添加所有选项。为什么要在代码中执行此操作?这些选项多久更改一次? Picklist 是静态数据(模式冻结)。查找用于动态主数据(工具管理员可以添加/编辑/删除),无需更改架构。
  • 我们必须以编程方式执行此操作。选项不会经常更改,但它们可能随时更改,我们不希望在它们更改时必须发布新的自定义。我通过使用 JQuery 而不是 CRM 方式解决了这个问题。还是谢谢
猜你喜欢
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 2012-01-08
相关资源
最近更新 更多