参与过 Dynamics CRM 相关工作的朋友们都知道, Dynamics 365 之前并没有多选域字段, 想要实现多选域, 需要自己添加 webResource 定制, 而这也带来了一系列需要考虑的情况, 比如额外的字段消耗, 逻辑上复杂的转换规则等, 更有甚者, 会去改变涉及多选域情况的业务逻辑但随着 Dynamics 365 V9 版本的发布, 多选域的问题将不再复杂 (针对简单的需求), 因为 MS 终于把多选域字段添加了进来
1. 添加多选域字段
与新建 OptionSet 的方式没有区别, 选择字段类型 MultiSelect Option Set, 也可以创建一个 Global Multiple Select Option Set
在创建完之后, 我们把它 Publish 到 Form 上, 来看看具体的选择效果是什么样的
支持全选 / 反全选
支持搜索, 是包含的查询结果
4 items 显示的是查询的结果数目, 默认是所有
可以通过点击 x 来去掉选项
2. Advanced Find
既然这是一个字段, 那么当然可以通过 Advanced Find 查询, 对比以前的规则条件, 多选域多了两个规则: Contains Values,"Does Not Contains Values"
那么 FetchXml 也相应的有所改变
- <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
- <entity name="account">
- <attribute name="name" />
- <attribute name="primarycontactid" />
- <attribute name="telephone1" />
- <attribute name="accountid" />
- <order attribute="name" descending="false" />
- <filter type="and">
- <condition attribute="new_multiselect" operator="contain-values">
- <value>100000000</value>
- </condition>
- <condition attribute="new_multiselect" operator="not-contain-values">
- <value>100000001</value>
- </condition>
- <condition attribute="new_multiselect" operator="in">
- <value>100000000</value>
- <value>100000002</value>
- </condition>
- </filter>
- </entity>
- </fetch>
3. API 调用
如果想执行多选域相关的操作, 比如查询结果, 这里需要引用最新版本的 dll 在 V9 版本之后, MS 将不再像以前那样提供 SDK 的下载包, Assembly 直接通过 Nuget 添加, 具体的名字: Microsoft.CrmSdk.CoreAssemblies 里面包含了需要用到的 Microsoft.Xrm.Sdk.dll 和 Microsoft.Crm.Sdk.Proxy.dll
接着我们看看多选域字段值到底是什么样的
多选域字段的值是一个集合: OptionSetValueCollection, 每一个被选中的选项是一个 OptionSetValue 对象
并且像 OptionSet 一样, FormattedValues 里可以得到所有被选中选项的 Label 值, 但是这里需要注意一点, Label 值是用; 分号隔开, 而且除了第一个值之外, 后续的值的前面都会有个空格, 在进行数据操作前, 需要把空格去掉
再提醒一下, 这里需要用到 V9 版本及以后的 dll, 不然多选域字段的 Value 都是空
之前说到 Operation 有更新, 那么对应于 Advanced Find 里面的情况, API 中的 Operator 值分别是 ConditionOperator.ContainValues 和 ConditionOperator.DoesNotContainValues
来源: https://www.cnblogs.com/yobyron/p/MultiSelect.html