CRM中的选项集多选一直是客户需求中的必选项,但从CRM进国内的3.0时代开始到目前的2015版本均没有提供该功能,但既然客户要了就得想办法满足,既然CRM本身的功能上不支持,那我们只有使用非官方支持的方法了,操作DOM。

之前在2011中做过类似的功能,但最新无意中看到这篇博文:http://www.cnblogs.com/gnile/p/3429909.html,思路上要比我之前实现的要精简的多,顾决定重新实现下该功能,废话不多说,直接上代码。

function LoadOptions() {
var fieldSchema = "optionlist";
var optionSetValueList = Xrm.Page.getAttribute("new_optionlist").getOptions();
var picklistValue = Xrm.Page.getAttribute("new_optionvalue").getValue(); //step1:开始构建多选所需的html
var appendHtml = "";
//border:1px solid #f3f1f2;
appendHtml += "<div style=\"padding-top:0px;padding-left:0px;padding-bottom:20px;padding-right:20px; margin-left:15px;\">";
appendHtml += "<ul style=\"list-style:none;\">"; for (var i = 0; i < optionSetValueList.length - 1; i++) {
var checkboxId = "cb_" + fieldSchema + "_" + i;
appendHtml += "<li style=\"float:left;display:block;padding-left:5px;\">";
appendHtml += "<input type=\"checkbox\" value=\"" + optionSetValueList[i].value + "\" style=\"width:auto;\" class=\"" + fieldSchema + "\" id=\"" + checkboxId + "\" "; //step2:加载已经保存的选项
if (picklistValue != null && picklistValue.indexOf(optionSetValueList[i].value + ":" + optionSetValueList[i].text + ";") > -1) {
appendHtml += "checked=\"checked\"";
} appendHtml += "/>"; appendHtml += "<label for=\"" + checkboxId + "\">" + optionSetValueList[i].text + "</label>";
appendHtml += "</li>";
} appendHtml += "</ul>";
appendHtml += "</div>"; //step3:用构建好的html替换原先的picklist的html
$("#new_optionlist_d").html(appendHtml);
}

function OnSave()
{
var saveValues = "";
$(".optionlist").each(function () {
if (this.checked) {
saveValues += this.value + ":" + this.nextSibling.innerText + ";";
}
}); Xrm.Page.getAttribute("new_optionvalue").setValue(saveValues);
}

代码主要由两个方法组成,一个是formload的时候执行的LoadOptions方法,该方法即构造多选框,新建的时候新建多选框,编辑的时候呈现多选框的checked状态。其中用到两个字段,一个new_optionlist即选项集字段,一个new_optionvalue即保存复选框选中后的值,new_optionvalue中存值得格式为"value:text;",主要中在代码中的step2中。save方法中名为optionlist的即是我前面动态生成的type为checkbox的input的class,通过该方式取所有的checkbox来判断是否checked,如果是checked则取出它的value进行值得拼接。

具体效果如下图,实际使用过程中需将下拉值也就是new_optionvalue字段隐藏,我这里显示出来主要是让你看下我前面所说的保存格式。

IE11效果图



Chrome效果图

Microsoft Edge效果图

IE9效果图

这里需要说明下上述代码是拷贝的前面所提的博文并在他的基础上进行了些改进,并且我用的是getOptions这一API获取的选项集而非soap的方式,上面的截图提供了4种浏览器环境均OK没遇到他博文中说的情况,一时也找不到IE8所以没试应该也是OK的。

Microsoft Dynamics CRM 2013/2015 选项集的多选的更多相关文章

  1. Microsoft Dynamics CRM 2013 --选项集的多选

    由于从Microsoft Dynamics CRM 2011到Microsoft Dynamics CRM 2013,界面的风格发生了很大的变化 故原先在2011上开发的选项集多选在2013上面已经不 ...

  2. Microsoft Dynamics CRM 2013 --针对特定实体,取消保存功能(包含自动保存)

    AutoSave 是 Microsoft Dynamics CRM 2013 一个新特性. 但AutoSave的有效范围是[所有实体],不允许针对特定某一实体进行设置. 所以,若想针对特定实体进行设置 ...

  3. Microsoft Dynamics CRM 2013 and 2011 Update Rollups and Service Packs

      Microsoft Dynamics CRM 2013   BTW: RC stands for Release for Candidate, and RTM stands for Release ...

  4. Microsoft Dynamics CRM 2013 安装程序及SDK 下载地址

    Microsoft Dynamics CRM 2013 已经具有相关资料 2013 Setup (Microsoft Dynamics CRM Server 2013) 下载地址: http://ww ...

  5. Microsoft Dynamics CRM 2013 安装过程图解及安装序列号

    Microsoft Dynamics CRM 2013 安装过程 图解   在安装前,先持一下SQL配置管理,将相关的服务打开.(由于在虚拟机里,许多服务需要时才会打开,像Reporting Serv ...

  6. Microsoft Dynamics CRM 2013 相关安装包下载

    90-day trial keys:Microsoft Dynamics CRM Workgroup Server 2013 (5 CAL limit):NX77Y-BTBCV-JP3T3-8W7JH ...

  7. 从 Microsoft Dynamics CRM 4.0 server迁移到 Microsoft Dynamics CRM 2013 Server

    不能就地升级早于 Microsoft Dynamics CRM Server 2011 的版本号,比方 Microsoft Dynamics CRM 4.0 server.可是,能够在升级过程中使用 ...

  8. Microsoft Dynamics CRM 2013 for Outlook 的硬件要求

    当仅联机或脱机模式下执行 Microsoft Dynamics CRM 2013 for Microsoft Office Outlook 时,下表列出了建议的最低硬件要求 watermark/2/t ...

  9. Microsoft Dynamics CRM 2013 安装过程 图解

    在安装前,先持一下SQL配置管理,将相关的服务打开.(由于在虚拟机里,许多服务需要时才会打开,像Reporting Services需要处理报表时才打开) 注:Analysis Services 登录 ...

随机推荐

  1. 51Nod 1555 布丁怪

    题目描述: 布丁怪这一款游戏是在一个n×n 的矩形网格中进行的,里面有n个网格有布丁怪,其它的一些格子有一些其它的游戏对象.游戏的过程中是要在网格中移动这些怪物.如果两个怪物碰到了一起,那么他们就会变 ...

  2. bzoj 1875: [SDOI2009]HH去散步

    Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但 是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又 ...

  3. hdu5634 BestCoder Round #73 (div.1)

    Rikka with Phi  Accepts: 5  Submissions: 66  Time Limit: 16000/8000 MS (Java/Others)  Memory Limit: ...

  4. poj1753 高斯消元

    Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 37055   Accepted: 16125 Descr ...

  5. Mysql--执行计划 Explain

    0 介绍 0.1 是什么 使用 Explain 关键字可以模拟优化器执行 Sql 查询语句,从而知道 Mysql 是如何处理 Sql 的. 0.2 用法 Explain + Sql语句 0.3 执行计 ...

  6. Python3玩转儿 机器学习(4)

      jupyternotebook 的使用方法¶   最基本的使用¶ In [1]: 1+2 Out[1]: 3   菜单树¶   File¶ |------> New Notebook --- ...

  7. jquery 数组操作 $.unique() $.inArray()

    1.去除重复 $.unique() $.unique() 去掉重复的元素 注意 : 执行unique之前,要先调用sort对数组的内容进行排序. <script src="http:/ ...

  8. 荣耀10带来AI版WPS,玩转潮酷新功能

    图书馆里,想把喜欢的句子和情节留存, 无奈摘抄需要时间,拍下来又很容易遗忘在相册? 课堂偷偷拍摄的课件, 模糊一片难以辨认? 开会培训收集的PPT照片, 总有那么几页对焦失败? 这些当时起劲,后来就& ...

  9. Safari 3D transform变换z-index层级渲染异常

    (猛戳来源:http://www.zhangxinxu.com/wordpress/?p=5569)

  10. vim基本操作

    Vim 是 Linux 系统上的最著名的文本/代码编辑器,也是早年的 Vi 编辑器的加强版,而 gVim 则是其 Windows 版.它的最大特色是完全使用键盘命令进行编辑,脱离了鼠标操作虽然使得入门 ...