使用 CRM 动态 WebAPI 创建"Global-OptionSet"属性时出现问题



我正试图通过Dynamics CRM WebAPI为现有实体(实体ID=70816501-edb9-4740-a16c-6a5efbc05d84(创建一个"全局选项集"属性(sd_MyAttribute(。我使用方法"POST"发送的JSON是这样的:

{
"@odata.type": "Microsoft.Dynamics.CRM.PicklistAttributeMetadata",
"OptionSet": {
"@odata.type": "Microsoft.Dynamics.CRM.OptionSetMetadata",
"IsGlobal": true,
"Name": "sd_MyPickList",
"OptionSetType": "Picklist",
"MetadataId": "a50cfc0a-e206-ea11-a811-000d3ab82e70"
},
"AttributeType": "Picklist",
"SchemaName": "sd_MyAttribute",
"Description": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "This is the attribute I want to create.",
"LanguageCode": 1033
}
]
},
"DisplayName": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "This is the attribute I want to create.",
"LanguageCode": 1033
}
]
},
"RequiredLevel": {
"Value": "None",
"CanBeChanged": true
}
}

我期望得到状态204响应,指示使用sd_MyPickList选项集的实体上的新Picklist属性已经创建。

不幸的是,得到的答复是:

{
"error": {
"code": "0x80048403",
"message": "Only Local option set can be created through the attribute create. IsGlobal flag must be set to 'false'.",
"innererror": {
"message": "Only Local option set can be created through the attribute create. IsGlobal flag must be set to 'false'.",
"type": "Microsoft.Crm.CrmException",
"stacktrace": "   ...)"
}
}
}

github项目中已经存在问题(请参阅https://github.com/MicrosoftDocs/dynamics-365-customer-engagement/issues/601),但我想知道是否有办法解决这个问题——我需要发送什么json来创建一个针对全局选项集的属性?有没有人通过web api成功创建了这样一个实体属性?

有一个用例,我没有能力使用现有的库,在我的情况下,导入解决方案不是一个选项。

如果有人能提供一个可以发送的简单json,例如使用Contact实体和任何全局选项集,那将是完美的。

最后,我找到了一种方法来完成我需要的东西。为了指定全局选项集,我需要在JSON数据中使用"@odata.bind"操作。对于使用MetaDataId为"62654906-7A0b-ea11-a817-000d3ab826fd"的全局OptionSet的属性"sd_MyAttribute",我需要执行POST:

{
"@odata.type": "Microsoft.Dynamics.CRM.PicklistAttributeMetadata",
"GlobalOptionSet@odata.bind": "/GlobalOptionSetDefinitions(62654906-7A0b-ea11-a817-000d3ab826fd)",
"AttributeType": "Picklist",
"SchemaName": "sd_MyAttribute",
"Description": { ... },
"DisplayName": { ... },
"RequiredLevel": { ... }
}

如果实体的MetaDataId为"70916b01-edb2-4840-a16b-6a2efbc75d84",POST的URI将为"/api/data/v9.0/EntityDefinitions(70916b02-edb2-4840-a16b-6a 2efbc75d 84(/Attributes"(不支持逻辑或架构名称(。

希望我的问答能帮助到收到同样错误信息的人。

相关内容

最新更新