本文介绍如何使用 Web API 创建和更新Microsoft Dataverse选项(选项集),以便可以跨表列维护一致的选项值。 当多个列需要相同的选项时使用全局选项,并为特定列使用本地选项。
注释
如果你是发布者,则只能更改现有的托管选项集。 若要重命名或删除这些选项集中的选项,必须升级添加选项集的解决方案。 有关详细信息,请参阅 升级或更新解决方案。
使用 POST 对 [组织 URI]/api/data/v9.2/GlobalOptionSetDefinitions 的请求定义全局选项时,建议让系统分配值。 在创建新OptionMetadata实例时,让系统通过传递 null 值来分配值。 定义选项时,它包含特定于创建选项集的解决方案的发布者集上下文的选项值前缀。
此前缀有助于减少为托管解决方案创建重复选项集的机会,以及你在安装托管解决方案的环境中定义的任何选项集。 有关详细信息,请参阅 “合并”选项集选项。
用于选择的 Web API 操作
下表列出了可用于全局选项集的消息。
| 消息 | Web API 操作 |
|---|---|
CreateOptionSet |
使用 POST 对 [组织 URI]/api/data/v9.2/GlobalOptionSetDefinitions 的请求。 |
DeleteOptionSet |
使用 DELETE 对 [组织 URI]/api/data/v9.2/GlobalOptionSetDefinitions(Name='<name>') 的请求。 |
RetrieveAllOptionSets |
使用 GET 对 [组织 URI]/api/data/v9.2/GlobalOptionSetDefinitions 的请求。 |
RetrieveOptionSet |
使用 GET 对 [组织 URI]/api/data/v9.2/GlobalOptionSetDefinitions(Name='<name>') 的请求。 |
下表列出了可用于本地和全局选项集的消息。
| 消息 | Web API 操作 |
|---|---|
DeleteOptionValue删除全局选项集中的值之一。 |
DeleteOptionValue 操作 示例: 删除选项 |
InsertOptionValue将新选项插入全局选项集中。 |
InsertOptionValue 操作 示例: 插入选项 |
InsertStatusValue将新选项插入列中使用的 Status 全局选项集中。 |
InsertStatusValue 操作 示例: 插入状态值 |
OrderOption更改选项集中选项的相对顺序。 |
OrderOption操作 示例: 订单选项 |
UpdateOptionSet |
将 PUT 请求与 OptionSetMetadataBase EntityType 配合使用以 [组织 URI]/api/data/v9.2/GlobalOptionSetDefinitions(metadataid)只能更新由该 OptionSetMetadataBase 属性定义的这些属性。 这些属性不包括这些选项。 使用其他操作对选项进行更改。 |
UpdateOptionValue更新选项集中的选项。 |
UpdateOptionValue 操作 示例: 更新选项 |
UpdateStateValue将新选项插入列中使用的 Status 选项集中。 |
UpdateStateValue 操作 |
用于选择的 Web API 示例
创建全局选项集
以下示例使用这些属性来创建全局选择。
| OptionSetMetadata 属性 | 价值观 |
|---|---|
Name |
sample_colors |
DisplayName |
颜色 |
Description |
颜色选择 |
OptionSetType |
Picklist |
Options |
value:727000000, label:Redvalue: 727000001, label:Yellowvalue: 727000002, label:Green |
以下示例使用属性创建全局选择。
全局选择的 URI 在响应中返回。 也可以使用名称引用此全局选择: GlobalOptionSetDefinitions(Name='sample_colors')。
请求:
POST [Organization Uri]/api/data/v9.2/GlobalOptionSetDefinitions
MSCRM.SolutionUniqueName: examplesolution
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
Content-Type: application/json; charset=utf-8
Content-Length: 2769
{
"@odata.type": "Microsoft.Dynamics.CRM.OptionSetMetadata",
"Options": [
{
"Value": 727000000,
"Label": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Red",
"LanguageCode": 1033,
"IsManaged": false
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Red",
"LanguageCode": 1033,
"IsManaged": false
}
}
},
{
"Value": 727000001,
"Label": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Yellow",
"LanguageCode": 1033,
"IsManaged": false
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Yellow",
"LanguageCode": 1033,
"IsManaged": false
}
}
},
{
"Value": 727000002,
"Label": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Green",
"LanguageCode": 1033,
"IsManaged": false
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Green",
"LanguageCode": 1033,
"IsManaged": false
}
}
}
],
"Description": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Color Choice",
"LanguageCode": 1033,
"IsManaged": false
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Color Choice",
"LanguageCode": 1033,
"IsManaged": false
}
},
"DisplayName": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Colors",
"LanguageCode": 1033,
"IsManaged": false
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Colors",
"LanguageCode": 1033,
"IsManaged": false
}
},
"Name": "sample_colors",
"OptionSetType": "Picklist"
}
响应:
HTTP/1.1 204 NoContent
OData-Version: 4.0
OData-EntityId: [Organization Uri]/api/data/v9.2/GlobalOptionSetDefinitions(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)
使用全局选项集创建选项列
以下示例使用这些属性通过全局选择创建选项列。
| Picklist 属性 | 价值观 |
|---|---|
SchemaName |
sample_Colors |
DisplayName |
示例颜色 |
Description |
颜色全局选取列表属性 |
RequiredLevel |
None |
GlobalOptionSet |
通过使用语法 @odata.bind 和对全局选择的引用来设置此单值导航属性。 此示例使用作为 MetadataId 键,但它也可以使用备用键和 Name: GlobalOptionSetDefinitions(Name='sample_colors') |
以下示例使用属性创建本地列并将其添加到 sample_bankaccount 表中。
响应返回属性的 URI。
请求:
POST [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes
MSCRM.SolutionUniqueName: examplesolution
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
Content-Type: application/json; charset=utf-8
Content-Length: 1465
{
"@odata.type": "Microsoft.Dynamics.CRM.PicklistAttributeMetadata",
"AttributeType": "Picklist",
"AttributeTypeName": {
"Value": "PicklistType"
},
"SourceTypeMask": 0,
"GlobalOptionSet@odata.bind": "/GlobalOptionSetDefinitions(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)",
"Description": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Colors Global Picklist Attribute",
"LanguageCode": 1033,
"IsManaged": false
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Colors Global Picklist Attribute",
"LanguageCode": 1033,
"IsManaged": false
}
},
"DisplayName": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Sample Colors",
"LanguageCode": 1033,
"IsManaged": false
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Sample Colors",
"LanguageCode": 1033,
"IsManaged": false
}
},
"RequiredLevel": {
"Value": "None",
"CanBeChanged": false,
"ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings"
},
"SchemaName": "sample_Colors"
}
响应:
HTTP/1.1 204 NoContent
OData-Version: 4.0
OData-EntityId: [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(11bb11bb-cc22-dd33-ee44-55ff55ff55ff)
插入选项
以下示例使用 InsertOptionValue 操作 将包含值 727000005 和标签 Echo 的新选项添加到 创建选项列创建的本地选择列。
请求:
POST [Organization Uri]/api/data/v9.2/InsertOptionValue
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
Content-Type: application/json; charset=utf-8
Content-Length: 612
{
"AttributeLogicalName": "sample_choice",
"EntityLogicalName": "sample_bankaccount",
"Value": 727000005,
"Label": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Echo",
"LanguageCode": 1033,
"IsManaged": false
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Echo",
"LanguageCode": 1033,
"IsManaged": false
}
},
"SolutionUniqueName": "examplesolution"
}
响应:
HTTP/1.1 200 OK
OData-Version: 4.0
{
"@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.InsertOptionValueResponse",
"NewOptionValue": 727000005
}
更新选项
若要更新单个选项,请使用 UpdateOptionValue 操作。 以下示例更新TrueOption“创建布尔”列中的布尔列示例,并将标签更改为Up“而不是True”。 由于此选项集是本地的,因此示例使用 AttributeLogicalName 和 EntityLogicalName。 对于全局选项集,请改用 OptionSetName 参数。
请求:
POST [Organization Uri]/api/data/v9.2/UpdateOptionValue HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
{
"AttributeLogicalName": "new_boolean",
"EntityLogicalName": "new_bankaccount",
"Value": 1,
"Label": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Up",
"LanguageCode": 1033,
"IsManaged": false
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Up",
"LanguageCode": 1033,
"IsManaged": false
}
},
"MergeLabels": true
}
响应:
HTTP/1.1 204 NoContent
OData-Version: 4.0
订单选项
以下示例演示如何使用 OrderOption 操作在本地选项集中对选项重新排序。 该 Value 属性包含按所需顺序选项的值。
若要将此操作与全局选项集一起使用,请指定 OptionSetName 参数而不是 EntityLogicalName 和 AttributeLogicalName。
使用 SolutionUniqueName 参数将更改作为指定解决方案的一部分应用。
请求:
POST [Organization Uri]/api/data/v9.2/OrderOption
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
Content-Type: application/json; charset=utf-8
Content-Length: 253
{
"EntityLogicalName": "sample_bankaccount",
"AttributeLogicalName": "sample_choice",
"Values": [
727000002,
727000000,
727000003,
727000001,
727000005,
727000004
],
"SolutionUniqueName": "examplesolution"
}
响应:
HTTP/1.1 204 NoContent
OData-Version: 4.0
删除选项
以下示例演示如何使用 DeleteOptionValue 操作删除本地选择列中的选项。
若要将此操作与全局选项集一起使用,请指定 OptionSetName 参数而不是 EntityLogicalName 和 AttributeLogicalName。
使用 SolutionUniqueName 参数将更改作为指定解决方案的一部分应用。
请求:
POST [Organization Uri]/api/data/v9.2/DeleteOptionValue
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
Content-Type: application/json; charset=utf-8
Content-Length: 116
{
"AttributeLogicalName": "sample_choice",
"EntityLogicalName": "sample_bankaccount",
"Value": 727000004
}
响应:
HTTP/1.1 204 NoContent
OData-Version: 4.0
插入状态值
以下示例演示如何使用 InsertStatusValue 操作向状态列添加选项。
使用 StateCode 参数指定状态值适用的状态码选项。 该 SolutionUniqueName 参数将更改作为指定解决方案的一部分应用。
NewOptionValue
InsertStatusValueResponse ComplexType 返回的属性包含分配给该选项的值。
请求:
POST [Organization Uri]/api/data/v9.2/InsertStatusValue
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
Content-Type: application/json; charset=utf-8
Content-Length: 609
{
"AttributeLogicalName": "statuscode",
"EntityLogicalName": "sample_bankaccount",
"Label": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Frozen",
"LanguageCode": 1033,
"IsManaged": false
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Frozen",
"LanguageCode": 1033,
"IsManaged": false
}
},
"StateCode": 1,
"SolutionUniqueName": "examplesolution"
}
响应:
HTTP/1.1 200 OK
OData-Version: 4.0
{
"@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.InsertStatusValueResponse",
"NewOptionValue": 727000000
}