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