欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

DynamicsCRM2015通过JS控制下拉框实现国家省市级联

程序员文章站 2023-01-29 16:17:44
前言:最近颇为烦恼的一个问题,特地记录下来以备参考。 方法一: 注: 通过 js 操作crm里类型为选项组的栏位方法: 1. 清除选项组:xrm.page.getcontrol("cont...

前言:最近颇为烦恼的一个问题,特地记录下来以备参考。

方法一:

注:

通过 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……

========================== 方法分割线 =============================

方法二:

思考中……

;>;>