自定义人员可以定义允许选择多个选项的选项列。 本文介绍如何使用 Web API 和 sdk for .NET 设置、查询和创建选项列。 该 MultiSelectPicklistAttributeMetadata 类定义了一种继承自 EnumAttributeMetadata 类的列类型。 就像 PicklistAttributeMetadata 类一样,此列包含一个 OptionSetMetadata.Options 属性,该属性包含该列的有效选项。 区别在于,获取或设置的值是包含 OptionSetValueCollection 表示所选选项的整数数组的类型。 此列的格式化值是一个分号分隔的字符串,其中包含所选选项的标签。
使用 Web API,可以使用 MultiSelectPicklistAttributeMetadata 实体类型定义此列。
与多选项列一样,在技术上没有可以定义的选项数上限。 将可用性注意事项作为限制因素。 但是,只能为单个列选择 150 个选项。 此外,不能设置默认值。
设置选项列值
以下示例演示如何为添加到contact表的名为sample_outdooractivities的列设置选项值。
通过使用 Web API,通过传递包含逗号分隔数字值的字符串来设置值:
请求:
POST [organization uri]/api/data/v9.2/contacts HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
{
"@odata.type": "Microsoft.Dynamics.CRM.contact",
"firstname": "Wayne",
"lastname": "Yarborough",
"sample_outdooractivities": "1, 9"
}
响应:
HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [organization uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)
从选项列查询数据
两个条件运算符支持在选项中查询值:
| 网络应用程序接口 | FetchXml | ConditionOperator |
|---|---|---|
| ContainValues | contain-values |
ContainValues |
| DoesNotContainValues | not-contain-values |
DoesNotContainValues |
Note
这些运算符依赖于应用在存储多个值的数据库表上的全文索引。 创建新记录后,在全文索引生效前会有一些延迟。 新记录创建后,使用这些运算符的筛选器可能需要等待数秒才能评估这些值。
可用于此类列的其他现有条件运算符包括:
| 网络应用程序接口 | FetchXml | ConditionOperator |
|---|---|---|
eq |
eq |
Equal |
ne |
neq |
NotEqual |
not null |
not-null |
NotNull |
eq null |
null |
Null |
| In | in |
In |
| NotIn | not-in |
NotIn |
以下示例演示如何对 DoesNotContainValues 表中名为 ContainValues 的选项列使用 contact 和 sample_outdooractivities 运算符。
选项sample_outdooractivities值
| Value | 标签 |
|---|---|
| 1 | 游泳 |
| 2 | 徒步 |
| 3 | 爬山 |
| 4 | 钓鱼 |
| 5 | 搜寻 |
| 6 | Running |
| 7 | 划船 |
| 8 | 滑雪 |
| 9 | 露营 |
有关创建此列的示例代码,请参阅 使用代码创建选项列。
联系表值
fullname |
sample_outdooractivities |
|---|---|
| 韦恩·亚伯勒 | 1,9 |
| 蒙特奥顿 | 2 |
| 兰德尔·梅普尔 | 4 |
| Hiram Mundy | 2,3,8,9 |
| 芭芭拉·韦伯 | 1,4,7 |
| 乔治特·沙利文 | 4,5,9 |
| Verna Kennedy | 2,4,9 |
| 马文·布拉肯 | 1,2,8,9 |
此示例演示如何使用 ContainValues 查询函数返回喜欢徒步旅行的所有联系人。 响应包含选项的文本作为批注,因为应用了 odata.include-annotations="OData.Community.Display.V1.FormattedValue" 首选项。
请求:
GET [organization uri]/api/data/v9.2/contacts?$select=fullname,sample_outdooractivities&$filter=Microsoft.Dynamics.CRM.ContainValues(PropertyName='sample_outdooractivities',PropertyValues=%5B'2'%5D) HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
响应:
HTTP/1.1 200 OK
Content-Type: application/json; odata.metadata=minimal
OData-Version: 4.0
Preference-Applied: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Content-Length: 1092
{
"@odata.context": "[organization uri]/api/data/v9.2/$metadata#contacts(fullname,sample_outdooractivities)",
"value": [{
"@odata.etag": "W/\"529811\"",
"fullname": "Monte Orton",
"sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Hiking",
"sample_outdooractivities": "2",
"contactid": "cdbcc48e-0b8d-e711-811c-000d3a75bdf1"
}, {
"@odata.etag": "W/\"529823\"",
"fullname": "Hiram Mundy",
"sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Hiking; Mountain Climbing; Skiing; Camping",
"sample_outdooractivities": "2,3,8,9",
"contactid": "d7bcc48e-0b8d-e711-811c-000d3a75bdf1"
}, {
"@odata.etag": "W/\"529838\"",
"fullname": "Verna Kennedy",
"sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Hiking; Fishing; Camping",
"sample_outdooractivities": "2,4,9",
"contactid": "e6bcc48e-0b8d-e711-811c-000d3a75bdf1"
}, {
"@odata.etag": "W/\"529843\"",
"fullname": "Marvin Bracken",
"sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Swimming; Hiking; Skiing; Camping",
"sample_outdooractivities": "1,2,8,9",
"contactid": "ebbcc48e-0b8d-e711-811c-000d3a75bdf1"
}]
}
使用 FetchXml 的示例代码
以下代码演示了将 FetchXml 与用于.NET的 Web API 和 SDK 配合使用。
此示例演示如何通过 Web API 在以下 FetchXml 查询中使用 not-contain-values 运算符。
<fetch>
<entity name='contact'>
<attribute name='fullname' />
<attribute name='sample_outdooractivities' />
<filter type='and'>
<condition attribute='sample_outdooractivities' operator='not-contain-values'>
<value>2</value>
</condition>
</filter>
</entity>
</fetch>
请求:
GET [organization uri]/api/data/v9.2/contacts?fetchXml=%253Cfetch%2520distinct%253D'false'%2520no-lock%253D'false'%2520mapping%253D'logical'%253E%253Centity%2520name%253D'contact'%253E%253Cattribute%2520name%253D'fullname'%2520%252F%253E%253Cattribute%2520name%253D'sample_outdooractivities'%2520%252F%253E%253Cfilter%2520type%253D'and'%253E%253Ccondition%2520attribute%253D'sample_outdooractivities'%2520operator%253D'not-contain-values'%253E%253Cvalue%253E2%253C%252Fvalue%253E%253C%252Fcondition%253E%253C%252Ffilter%253E%253C%252Fentity%253E%253C%252Ffetch%253E HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
响应:
HTTP/1.1 200 OK
Content-Type: application/json; odata.metadata=minimal
OData-Version: 4.0
Preference-Applied: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
{
"@odata.context": "[organization uri]/api/data/v9.2/$metadata#contacts(fullname,sample_outdooractivities,contactid)",
"value": [{
"@odata.etag": "W/\"529806\"",
"fullname": "Wayne Yarborough",
"sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Swimming; Camping",
"sample_outdooractivities": "1,9",
"contactid": "c8bcc48e-0b8d-e711-811c-000d3a75bdf1"
}, {
"@odata.etag": "W/\"529816\"",
"fullname": "Randal Maple",
"sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Fishing",
"sample_outdooractivities": "4",
"contactid": "d2bcc48e-0b8d-e711-811c-000d3a75bdf1"
}, {
"@odata.etag": "W/\"529828\"",
"fullname": "Barbara Weber",
"sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Swimming; Fishing; Boating",
"sample_outdooractivities": "1,4,7",
"contactid": "dcbcc48e-0b8d-e711-811c-000d3a75bdf1"
}, {
"@odata.etag": "W/\"529833\"",
"fullname": "Georgette Sullivan",
"sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Fishing; Hunting; Camping",
"sample_outdooractivities": "4,5,9",
"contactid": "e1bcc48e-0b8d-e711-811c-000d3a75bdf1"
}]
}
使用代码创建选项列
创建选项的最简单方法是在自定义工具中使用列编辑器。 了解如何创建和编辑列。
如果需要自动创建此类列,请将以下示例与用于.NET的 Web API 或 SDK 配合使用。 这两个示例都为 contact 表格中的户外活动创建一个选择列。
详细了解如何创建列。
将带有 MultiSelectPicklistAttributeMetadata 实体类型有效负载的 POST 请求发送到 contact 表的 /Attributes 集合,以创建一个具有唯一名称mySampleSolutionUniqueName的解决方案中的列。
了解如何将解决方案组件与解决方案相关联
请求:
POST [organization uri]/api/data/v9.2/EntityDefinitions(LogicalName='contact')/Attributes HTTP/1.1
Accept: application/json
MSCRM.SolutionUniqueName: mySampleSolutionUniqueName
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
{
"@odata.type": "Microsoft.Dynamics.CRM.MultiSelectPicklistAttributeMetadata",
"SchemaName": "sample_OutdoorActivities",
"DisplayName": {
"LocalizedLabels": [
{
"Label": "Outdoor activities",
"LanguageCode": 1033
}
]
},
"RequiredLevel": {
"Value": "None"
},
"Description": {
"LocalizedLabels": [
{
"Label": "Outdoor activities that the contact likes.",
"LanguageCode": 1033
}
]
},
"OptionSet": {
"IsGlobal": false,
"OptionSetType": "Picklist",
"Options": [
{
"Value": 1,
"Label": {
"LocalizedLabels": [
{ "Label": "Swimming", "LanguageCode": 1033 }
]
}
},
{
"Value": 2,
"Label": {
"LocalizedLabels": [
{ "Label": "Hiking", "LanguageCode": 1033 }
]
}
},
{
"Value": 3,
"Label": {
"LocalizedLabels": [
{ "Label": "Mountain Climbing", "LanguageCode": 1033 }
]
}
},
{
"Value": 4,
"Label": {
"LocalizedLabels": [
{ "Label": "Fishing", "LanguageCode": 1033 }
]
}
},
{
"Value": 5,
"Label": {
"LocalizedLabels": [
{ "Label": "Hunting", "LanguageCode": 1033 }
]
}
},
{
"Value": 6,
"Label": {
"LocalizedLabels": [
{ "Label": "Running", "LanguageCode": 1033 }
]
}
},
{
"Value": 7,
"Label": {
"LocalizedLabels": [
{ "Label": "Boating", "LanguageCode": 1033 }
]
}
},
{
"Value": 8,
"Label": {
"LocalizedLabels": [
{ "Label": "Skiing", "LanguageCode": 1033 }
]
}
},
{
"Value": 9,
"Label": {
"LocalizedLabels": [
{ "Label": "Camping", "LanguageCode": 1033 }
]
}
}
]
}
}
响应:
HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [organization uri]/api/data/v9.2/EntityDefinitions(LogicalName='contact')/Attributes(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)