CRM 4.0依赖选择列表javascript

CRM 4.0依赖选择列表javascript,javascript,forms,attributes,crm,picklist,Javascript,Forms,Attributes,Crm,Picklist,我目前正在从事一个CRM 4.0项目,在该项目中,我创建了具有34个值的选择列表a和具有132个值的选择列表B 选择列表B取决于在选择列表A中选择的值,其范围在总数132的2到14个值之间 以前的开发人员编写的Javascript定义了每个选择列表值,并将disabled设置为true或false,但这将是132个值的混乱-见下文 var picklist = document.getElementById("picklist_b"); if(crmForm.all.picklist_a.val

我目前正在从事一个CRM 4.0项目,在该项目中,我创建了具有34个值的选择列表a和具有132个值的选择列表B

选择列表B取决于在选择列表A中选择的值,其范围在总数132的2到14个值之间

以前的开发人员编写的Javascript定义了每个选择列表值,并将disabled设置为true或false,但这将是132个值的混乱-见下文

var picklist = document.getElementById("picklist_b");
if(crmForm.all.picklist_a.value==2)
{
crmForm.SetFieldReqLevel("picklist_b", 2);
picklist[1].disabled = false;
picklist[2].disabled = false;
picklist[3].disabled = false;
picklist[4].disabled = true;
picklist[5].disabled = true;
picklist[6].disabled = true;
你有没有更好的办法


非常感谢……

最终,您必须告诉系统您希望显示哪些值,以及何时需要进行一些手动操作。为了给你的工作提供一些结构,你可以这样布置:

1)针对选取列表A注册onChange()事件并获取其值:

var picklistA = Xrm.Page.getAttribute("picklistA").getValue();
2)从选择列表B获取所有可用选项(省去键入):

3)现在从选择列表B中删除所有选项:

var picklistBControl = Xrm.Page.getControl("optionset");
picklistBControl.clearOptions();
function addNewOptions(newOptions, childControl) {
    for (var newOption in newOptions) {
        childControl.addOption(newOption);
    }
}
4)定义选取列表A值和选取列表B值之间的关系(示例):

5)通过将拾取列表A的值与
映射
数组进行比较,获得所需的新选项:

function getNewOptionValues(picklistA) {
    var newOptionValues = function (picklistA) {
        return mapping.forEach(function (m) {
            if (m.parent == picklistA) {
                return m.children;
            }
        });
    }(picklistA);

    return newOptionValues;
}
6)根据所需新选项的值,将它们构建到有效对象中:

function buildNewOptions(oldOptions, newOptionValues) {
    var newOptions = [];

    for (var option in oldOptions) {
        for (var newOption in newOptionValues) {
            if (option.value == newOption) {
                newOptions.push(option);
            }
        }
    }
    return newOptions;
}
7)最后,将新选项添加到选择列表B:

var picklistBControl = Xrm.Page.getControl("optionset");
picklistBControl.clearOptions();
function addNewOptions(newOptions, childControl) {
    for (var newOption in newOptions) {
        childControl.addOption(newOption);
    }
}


有些代码在CRM 4.0中可能不起作用,我不记得了。我希望这会有所帮助。还请注意,需要调用第5、6和7点中的函数(如果您不熟悉JavaScript)。

您的客户是否有可能考虑升级到较新的CRM版本?CRM 2011引入了Xrm方法