这是我的第276篇文章,写于2018年06月30日。

在Dynamics 365 V9.0版本之前没有多选选项集,但是在项目实施过程中很多情况下又是需要的,比如你是要快,还是要好,还是要又快又好?如果解决既要快又要好的话,以前采用受支持的开发方法基本上不外于两种方法。

一个是把选项做成【两个选项】类型的字段,把每个选项放到表单上,显示为复选框让用户选择。

另外一个就是将选项做成一个实体存储起来,将其作为子网格插入到表单上,然后定制子网格的添加按钮,点击添加按钮的时候弹出HTML类型的Web资源,里面是各个选项,完成选择后使用Web API将其插入到实体记录中。

两种方法我在项目实践中都用过,都有一些不便,谁用谁知道了。现在Dynamics 365 V9.0版本提供了多选选项集这种类型的字段,第三种方案诞生,我们来看下。

打开解决方案,我这里为客户实体添加一个数据类型为【多选选项集】的字段如下:

Dynamics 365新引入了多选选项集类型字段_Dynamics 365

 

然后我们将其拉到表单上并发布后,看到选择的界面如下,可以看到有 全选 这个选项,比较方便。

Dynamics 365新引入了多选选项集类型字段_多选选项集_02

 

选择后的展示界面如下,显示的效果不错。

Dynamics 365新引入了多选选项集类型字段_多选选项集_03

 

至于如何通过编程的方式与多选选项集进行互动请参考官方的文档:Multi-Select Picklist attributes ,和 Set field values using parameters passed to a form 中的 Example: Set the value for multi-select option set fields 章节。

这是官方的组织服务设置字段值的示例:

OptionSetValueCollection activities = new OptionSetValueCollection();
activities.Add(new OptionSetValue(1)); //Swimming
activities.Add(new OptionSetValue(9)); //Camping

Contact contact = new Contact();
contact["firstname"] = "Wayne";
contact["lastname"] = "Yarborough";
contact["sample_outdooractivities"] = activities;

_serviceProxy.Create(contact);

 

下面是我写的Web API的示例:

var recordId = Xrm.Page.data.entity.getId().replace('{','').replace('}','');
var entityName = Xrm.Page.data.entity.getEntityName();
var data =
    {
        "sample_outdooractivities":"1,9"
    }
Xrm.WebApi.updateRecord(entityName, recordId, data).then(
    function success(result) {
        console.log("OK");
    },
    function (error) {
        console.log(error.message);
    }
);