在CRM 2011中过滤子选项列表

时间:2014-05-20 23:25:51

标签: javascript dynamics-crm-2011

我试图将javascript代码从CRM 4.0转换为CRM 2011。 我在选项列表过滤器方面遇到了问题。

我的功能是在父选择列表的onchange上。它第一次工作,但第二次它从我的孩子选择列表中删除了所有内容。

这是我想重置选项列表的部分

    if(!oSubPicklist.originalPicklistValues)
{
oSubPicklist.originalPicklistValues = oSubPicklist.getOptions();
}
else
{
oSubPicklist.getOptions = oSubPicklist.originalPicklistValues;
oSubPicklist.setOptions = oSubPicklist.originalPicklistValues;
}

这是我删除所有不相关选项的部分: oTempArray是一个包含我想要保留的选项的数组。如果检查" oSubPicklist.getOptions.length"该值与我原来的选项列表相同。

    for (var i=oSubPicklist.getOptions.length; i >= 0;i--)
    {
        if(oTempArray[i] != true)
        {
    Xrm.Page.getControl("new_product").removeOption(i);
        }
    }

想法?

编辑:我解决了在onLoad事件中使用originalPickList声明全局变量并且:

oSubPicklist.clearOptions();
for (var i=0; i< oSubPicklist.originalPicklistValues.length; i++) 
    {
    for (var j=0; j< oDesiredOptions.length; j++)
        {
        if (i == oDesiredOptions[j])
        {oSubPicklist.addOption(oSubPicklist.originalPicklistValues[i]);}
        }
    }

2 个答案:

答案 0 :(得分:2)

您的代码对我来说不是很清楚:可能您可以粘贴所有功能代码以便更好地理解,但是:

  1. 这是您从CRM 2011中的PickList中获取选项的方法

    var myOptionSet = Xrm.Page.ui.controls.get("new_product")   //get Control
    var optionsSet = myOptionSet .getAttribute().getOptions();  //get Options
    preferredTimeOptionSet.clearOptions();                    //Clear all options
    
    //Create a new Option
    var opt1 = new Option();
    opt1.text = "one";
    opt1.value = 1;
    
    //Add Option
    myOptionSet.addOption(opt1);
    
    //Remove Option
    myOptionSet.removeOption(1);
    
  2. Good Example here

答案 1 :(得分:0)

以下是另一种做父/子选择列表的方法:

&#13;
&#13;
function dynamicDropdown(parent, child) {
  filterPicklist(parent, child);
}

function parentListFilter(parent, id) {
  var filter = "";
  if (getParentCode(parent) != "") {
    filter = getParentCode(parent);
  } else {
    // No [ ] match
  }

  return filter;
}

function filterPicklist(parent, child) {
  var parentList = Xrm.Page.getAttribute(parent).getValue();
  var childListControlAttrib = Xrm.Page.getAttribute(child);
  var childListOptions = childListControlAttrib.getOptions();
  var childListControl = Xrm.Page.getControl(child);
  var codeToFilterListOn = parentListFilter(parent, parentList);


  if (codeToFilterListOn != "") {
    childListControl.clearOptions();
    for (var optionIndex in childListOptions) {
      var option = childListOptions[optionIndex];
      // Ignore xx and check for Match
      if (option.text.substring(0, 2) != "xx" && option.text.indexOf(codeToFilterListOn) > -1) {
        childListControl.addOption(option);
      }
    }
  } else {
    // Didn't match, show all?
  }
}

function getParentCode(parent) {
  //Get Parent Code Dynamically from inside [ ]
  var filter = "";
  var parentValue = Xrm.Page.getAttribute(parent).getText();
  if (parentValue && parentValue.indexOf("]") > -1) {
    var parentCode = parentValue.substring(parentValue.indexOf("[") + 1, parentValue.indexOf("]"));
    if (parentCode) {
      filter = parentCode + " | ";
    } else {}
  }
  return filter;
}
&#13;
&#13;
&#13;

在此处查看更多内容:Parent/Child