CRM 4.0依赖选择列表javascript
我目前正在从事一个CRM 4.0项目,在该项目中,我创建了具有34个值的选择列表a和具有132个值的选择列表B 选择列表B取决于在选择列表A中选择的值,其范围在总数132的2到14个值之间 以前的开发人员编写的Javascript定义了每个选择列表值,并将disabled设置为true或false,但这将是132个值的混乱-见下文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
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方法