0

我目前正在处理一个 CRM 4.0 项目,在该项目中我创建了具有 34 个值的选项列表 A 和具有 132 个值的选项列表 B。

选项列表 B 取决于选项列表 A 中选择的值,该值介于 2 到 14 个之间,总共 132 个。

以前的开发人员编写了 Javascript,它定义了每个选项列表值并将禁用设置为 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;

您对更好的方法有什么想法吗?

非常感谢...

4

1 回答 1

0

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

1)针对 Picklist A 注册一个 onChange() 事件并获取其值:

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

2)从 Picklist B 中获取所有可用选项(以节省您的打字时间):

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

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

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

4)定义 Picklist A 值和 Picklist 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)最后,将新选项添加​​到 Picklist B:

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

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

于 2017-03-30T14:28:41.010 回答