DynamicsCRM2015通过JS控制下拉框实现国家省市级联
前言:最近颇为烦恼的一个问题,特地记录下来以备参考。
方法一:
注:
通过 js 操作crm里类型为选项组的栏位方法:
1. 清除选项组:xrm.page.getcontrol("controlid").clearoptions();
2. 添加选项组选项:xrm.page.getcontrol("controlid").addoption({value:0, text:"显示的值"});
备注(重要):通过 js 添加的选项组项的值(value)必须先在栏位对应的选项组中有对应的值,不然即使绑定了,选中也无法显示在页面上
操作页面选项时最终显示在页面上的值是“栏位对应的选项的值”;
意思是假设通过js绑定了value=0,text="js绑定"选项,而栏位中添加了个值为0的,标签为“栏位绑定”的选项;
当操作页面选中“js绑定”时,crm会自动查找预先绑定过的值,如果则无法显示,如果找到会显示对应的标签,如显示“栏位绑定”。
因为上面的问题,所以如果有别的更好方法,还是不建议用这个方法(听说lookup方法可以实现级联,再研究).
不多说,具体实现如下:
--------------------------------------------- 分割线 ---------------------------------------------
crm js代码:
//获取select元素 var countryid = "new_testcountry"; var provinceid = "new_state"; var cityid = "new_test_city"; var countryobj = xrm.page.getcontrol(countryid ); var provinceobj = xrm.page.getcontrol(provinceid); var cityobj = xrm.page.getcontrol(cityid); //初始化地区下拉菜单 function initialize() { //清空已绑定值 countryobj.clearoptions(); var countrystr = "australia,belgium,cambodia,canada,switzerland,china,france,germany,*,india,indonesia,ireland,israel,italy,japan,korea,kuwait,lebanon,luxembourg,macao,malaysia,netherlands,new zealand,philippines,sweden,singapore,south africa,sweden,*,thailand,united kiongdom,usa,vietnam"; var countryarray = countrystr.split(','); for(var i=0; i= 100) i = i+1; val = i; break; } countryobj.addoption({value:val, text:countryarray[i]}); } provincedel(); //绑定onchange事件 xrm.page.getattribute(countryid).addonchange(function(){ countryselchange(); }) xrm.page.getattribute(provinceid).addonchange(function(){ provinceselchange(); }) setoptions(); } //加载下拉框设置的值(更新) function setoptions() { var countryentity = xrm.page.data.entity.attributes.get(countryid); var provinceentity = xrm.page.data.entity.attributes.get(provinceid); var cityentity = xrm.page.data.entity.attributes.get(cityid); countryentity.setvalue(countryentity._attribute["$v_1"]); provinceentity.setvalue(provinceentity._attribute["$v_1"]); cityentity.setvalue(cityentity._attribute["$v_1"]); } //下拉列表改变事件 function countryselchange() { provincedel(); provinceadd(); } //下拉列表改变事件 function provinceselchange() { citydel(); cityadd(); } //清空 function provincedel() { provinceobj.clearoptions(); citydel(); } //清空 function citydel() { cityobj.clearoptions(); } //添加省 function provinceadd() { var provincelist = []; provincelist[0] = [100, "china", "安徽省,澳门,北京市,重庆市,福建省,甘肃省,广东省,广西省,贵州省,海南省,河北省,黑龙江省,河南省,湖北省,湖南省,江苏省,江西省,吉林省,辽宁省,内蒙古自治区,宁夏回族自治区,青海省,山东省,上海市,陕西省,山西省,四川省,*省,天津市,香港,**自治区,*自治区,云南省,浙江省"]; for(var i=0; i;>;>
打开对应的表单,找到最上方的 ‘表单属性’ ,在事件里添加表单程式库,将上述代码放入你的js文件中,
然后在下方的事件处理常式中的onload事件中添加程式库,调用上诉initialize 函数;
在完成表单后在onsave事件中调用上述saveform函数。
栏位中添加三个栏位,名称分别是上方的 new_country, new_province, new_city;皆为选项组类型,
对应的选项组值需要和js中对应,比如new_country 有标签为“china”,值为100;new_province 有标签为“安徽省”,值为100;标签为“福建省”,值为104……
========================== 方法分割线 =============================
方法二:
思考中……