Javascript 在CRM 2011中筛选子选择列表

Javascript 在CRM 2011中筛选子选择列表,javascript,dynamics-crm-2011,Javascript,Dynamics Crm 2011,我正在尝试将javascript代码从CRM 4.0转换为CRM 2011。 我的选择列表过滤器有问题 我的函数位于父选取列表的一次更改上。它第一次起作用,但第二次就把我孩子名单上的所有东西都抹掉了 for (var i=oSubPicklist.getOptions.length; i >= 0;i--) { if(oTempArray[i] != true) { Xrm.Page.getControl("new_product")

我正在尝试将javascript代码从CRM 4.0转换为CRM 2011。 我的选择列表过滤器有问题

我的函数位于父选取列表的一次更改上。它第一次起作用,但第二次就把我孩子名单上的所有东西都抹掉了

    for (var i=oSubPicklist.getOptions.length; i >= 0;i--)
    {
        if(oTempArray[i] != true)
        {
    Xrm.Page.getControl("new_product").removeOption(i);
        }
    }
这是我想重置选择列表的部分

    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]);}
        }
    }
oSubPicklist.clearOptions();
对于(变量i=0;i
您的代码对我来说不是很清楚:可能您可以粘贴所有的功能代码以便更好地理解,但是:

  • 这是您在CRM 2011中从选择列表中获取选项的方式

    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);
    

  • 下面是另一种处理父/子选择列表的方法:

    函数dynamicDropdown(父、子){
    filterPicklist(父级、子级);
    }
    函数parentListFilter(父级,id){
    var过滤器=”;
    如果(getParentCode(父项)!=“”){
    过滤器=getParentCode(父级);
    }否则{
    //不匹配
    }
    回流过滤器;
    }
    函数过滤器picklist(父级、子级){
    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(父,父列表);
    如果(codeToFilterListOn!=“”){
    childListControl.clearOptions();
    for(childListOptions中的var optionIndex){
    var option=childListOptions[optionIndex];
    //忽略xx并检查是否匹配
    if(option.text.substring(0,2)!=“xx”&&option.text.indexOf(codeToFilterListOn)>-1){
    childListControl.addOption(选项);
    }
    }
    }否则{
    //不匹配,全部显示?
    }
    }
    函数getParentCode(父级){
    //从内部[]动态获取父代码
    var过滤器=”;
    var parentValue=Xrm.Page.getAttribute(parent.getText();
    if(parentValue&&parentValue.indexOf(“]”)1){
    var parentCode=parentValue.substring(parentValue.indexOf(“[”)+1,parentValue.indexOf(“]);
    if(父代码){
    过滤器=父代码+“|”;
    }else{}
    }
    回流过滤器;
    
    }
    谢谢。我只是想把CRM 4.0“翻译”到2011年,因为我有这样做的说明,但我接受了你的想法,它成功了。谢谢@邓伦很高兴这有帮助