CRM 4.0依赖选项列表javascript

时间:2017-03-30 11:10:36

标签: 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.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 个答案:

答案 0 :(得分:0)

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

1)在Picklist A上注册onChange()事件并获取其值:

var picklistA = Xrm.Page.getAttribute("picklistA").getValue();

2)从Picklist B中获取所有可用选项(以节省您的输入):

var options = Xrm.Page.getAttribute("picklistB").getOptions();

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

var picklistBControl = Xrm.Page.getControl("optionset");
picklistBControl.clearOptions();

4)定义领料单A值与领料单B值之间的关系(示例):

var mapping = [
    {
        parent: 550000000,
        children: [
            660000000, 660000001
        ]
    },
    {
        parent: 550000001,
        children: [
            660000003, 660000004
        ]
    }
];

5)通过将Picklist A的值与mapping数组进行比较,获取所需的新选项:

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:

function addNewOptions(newOptions, childControl) {
    for (var newOption in newOptions) {
        childControl.addOption(newOption);
    }
}

这些代码中的某些代码可能无法在CRM 4.0中运行,我不记得了。我希望这有助于此。另请注意,需要调用第5,6和7点中的函数(如果您不熟悉JavaScript)。