您的位置:首页 > Web前端 > JavaScript

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

2016-08-05 18:36 411 查看
前言:最近颇为烦恼的一个问题,特地记录下来以备参考。

方法一:

注:

通过 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代码:

<pre name="code" class="javascript">//获取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,Hong Kong,India,Indonesia,Ireland,Israel,Italy,Japan,Korea,Kuwait,Lebanon,Luxembourg,Macao,Malaysia,Netherlands,New Zealand,Philippines,Sweden,Singapore,South Africa,Sweden,Taiwan,Thailand,United Kiongdom,USA,Vietnam";
var CountryArray = CountryStr.split(',');
for(var i=0; i<CountryArray.length; i++)
{
var val=0;
switch(CountryArray[i])
{
case "China":
var = 100;	break;
default:
if(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<provinceList.length; i++)
{
if(CountryObj.getAttribute(CountryId).getText().toUpperCase() == provinceList[i][1].toUpperCase())
{
var val = provinceList[i][0]
var province = provinceList[i][2];
AddOne(province, ProvinceObj, val);
}
}
}

//添加市
function CityAdd()
{
var PCList = [];
PCList[0]  = [1000100,"安徽省","安庆市,蚌埠市,亳州市,池州市,滁州市,阜阳市,合肥市,淮北市,淮南市,黄山市,六安市,马鞍山,铜陵市,芜湖市,宿州市,宣城市"]
PCList[1]  = [1000200,"澳门","澳门"]
PCList[2]  = [1000300,"北京市","北京市",""]
PCList[3]  = [1000400,"重庆市",""]
PCList[4]  = [1000500,"福建省","福州市,龙岩市,南平市,宁德市,莆田市,泉州市,三明市,厦门市,漳州市"]
PCList[5]  = [1000600,"甘肃省",""]
PCList[6]  = [1000700,"广东省","潮州市,东莞市,佛山市,广州市,河源市,惠州市,江门市,揭阳市,茂名市,梅州市,清远市,汕头市,汕尾市,韶关市,深圳市,阳江市,云浮市,湛江市,肇庆市,中山市,珠海市"]
PCList[7]  = [1000800,"广西省",""]
PCList[8]  = [1000900,"贵州省",""]
PCList[9]  = [1001000,"海南省",""]
PCList[10] = [1001100,"河北省","保定市,沧州市,承德市,邯郸市,衡水市,廊坊市,秦皇岛,石家庄,唐山市,邢台市,张家口"]
PCList[11] = [1001200,"黑龙江省",""]
PCList[12] = [1001300,"河南省","安阳市,鹤壁市,济源市,焦作市,开封市,洛阳市,漯河市,南阳市,平顶山,濮阳市,三门峡,商丘市,新乡市,信阳市,许昌市,郑州市,周口市,驻马店"]
PCList[13] = [1001400,"湖北省","鄂州市,恩施市,黄冈市,黄石市,荆门市,荆州市,十堰市,随州市,武汉市,咸宁市,襄阳市,孝感市,宜昌市"]
PCList[14] = [1001500,"湖南省","常德市,郴州市,衡阳市,怀化市,娄底市,邵阳市,湘潭市,湘西自治州,益阳市,永州市,岳阳市,张家界,长沙市,株州市"]
PCList[15] = [1001600,"江苏省","常州市,淮安市,连云港,南京市,南通市,苏州市,泰州市,无锡市,宿迁市,徐州市,盐城市,扬州市,镇江市"]
PCList[16] = [1001700,"江西省",""]
PCList[17] = [1001800,"吉林省",""]
PCList[18] = [1001900,"辽宁省",""]
PCList[19] = [1002000,"内蒙古自治区",""]
PCList[20] = [1002100,"宁夏回族自治区",""]
PCList[21] = [1002200,"青海省",""]
PCList[22] = [1002300,"山东省",""]
PCList[23] = [1002400,"上海市",""]
PCList[24] = [1002500,"陕西省",""]
PCList[25] = [1002600,"山西省",""]
PCList[26] = [1002700,"四川省",""]
PCList[27] = [1002800,"台湾省",""]
PCList[28] = [1002900,"天津市",""]
PCList[29] = [1003000,"香港",""]
PCList[30] = [1003100,"新疆维吾尔自治区",""]
PCList[31] = [1003200,"西藏自治区",""]
PCList[32] = [1003300,"云南省",""]
PCList[33] = [1003400,"浙江省","杭州市,湖州市,嘉兴市,金华市,丽水市,宁波市,衢州市,绍兴市,台州市,温州市,舟山市"]

for(var i=0; i<PCList.length; i++)
{
if(ProvinceObj.getAttribute(ProvinceId).getText().toUpperCase() == PCList[i][1].toUpperCase())
{
var val = PCList[i][0]
var City= PCList[i][2];
AddOne(City, CityObj, val);
}
}
}
//添加实现
function AddOne(Str, Obj, val)
{
if(Str == "")
return;
var strArray = Str.split(',');
for(var i=0; i<strArray.length; i++)
{
var opt = {
text : strArray[i],
value : (val+i)
};
Obj.addOption(opt, i);
}
}

//保存表单
function SaveForm()
{
Xrm.Page.data.entity.attributes.get(CountryId).setValue(CountryObj.getAttribute(CountryId).getText());
Xrm.Page.data.entity.attributes.get(ProvinceId).setValue(ProvinceObj.getAttribute(ProvinceId).getText());
Xrm.Page.data.entity.attributes.get(CityId).setValue(CityObj.getAttribute(CityId).getText());
}



打开对应的表单,找到最上方的 ‘表单属性’ ,在事件里添加表单程式库,将上述代码放入你的JS文件中,

然后在下方的事件处理常式中的OnLoad事件中添加程式库,调用上诉 initialize 函数;

在完成表单后在OnSave事件中调用上述SaveForm函数。

栏位中添加三个栏位,名称分别是上方的 new_Country, new_Province, new_City;皆为选项组类型,

对应的选项组值需要和JS中对应,比如new_Country 有标签为“China”,值为100;new_Province 有标签为“安徽省”,值为100;标签为“福建省”,值为104……

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

方法二:

     思考中……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Dynamics CRM JS 选项组