Dynamics CRM API插入数据:如何获取正确字段名及解决报错
问题背景
向crmdqe_quoteheaders实体插入数据时,收到OData错误:
Error identified in Payload provided by the user for Entity :'crmdqe_quoteheaders', ----> InnerException : Microsoft.OData.ODataException: An undeclared property 'crmdqe_accountlookup_account' which only has property annotations in the payload but no property value was found in the payload. In OData, only declared navigation properties and declared named streams can be represented as properties without values.
当前使用的POST请求体:
{ "crmdqe_accountlookup_account@odata.bind": "/accounts(accid)", "crmdqe_contactlookup_contact@odata.bind": "/contacts(cid)", "crmdqe_opportunitylookup_value@odata.bind": "/opportunities(oppid)", "transactioncurrencyid_value": "f98c011e-25e0-e211-9cd8-b4b52f67b674", "crmdqe_quoteownerlookup_value": "/accounts(acid)", "crmdqe_quotevalidityindays": 122960000, "crmdqe_totallistprice": 1000 }
获取可插入字段的方法
1. 通过Web API查询实体元数据
发送GET请求到目标环境的元数据接口,直接获取实体的所有可写字段:
- 请求地址:
https://alliedmodular.api.crm.dynamics.com/api/data/v9.2/EntityDefinitions(LogicalName='crmdqe_quoteheaders')/Attributes - 请求头需携带有效的身份验证令牌(如Bearer Token)
- 响应会返回每个字段的详细信息,重点关注:
LogicalName:字段的标准逻辑名称(插入操作必须使用此名称)IsValidForCreate:标记该字段是否支持插入操作AttributeType:字段类型(如Lookup、Money、Boolean等)RelatedEntityLogicalName:若为查找字段,显示关联的目标实体名称
2. 通过Dynamics 365界面查看
- 高级查找:在系统界面中打开高级查找,选择
crmdqe_quoteheaders实体,即可看到所有可用字段,可通过筛选确认哪些字段允许创建 - 解决方案资源管理器:进入系统解决方案,找到
crmdqe_quoteheaders实体,查看其字段列表,筛选出“可创建”属性的字段
3. 附带:修正当前请求的错误
当前报错是因为导航属性名称错误,从返回的实体数据可知,查找字段的逻辑名称为crmdqe_accountlookup(对应值字段_crmdqe_accountlookup_value),正确的绑定语法示例:
{ "crmdqe_accountlookup@odata.bind": "/accounts(accid)", "crmdqe_contactlookup@odata.bind": "/contacts(cid)", "crmdqe_opportunitylookup@odata.bind": "/opportunities(oppid)", "transactioncurrencyid@odata.bind": "/transactioncurrencies(f98c011e-25e0-e211-9cd8-b4b52f67b674)", "crmdqe_quotevalidityindays": 122960000, "crmdqe_totallistprice": 1000 }
注意:查找字段的绑定格式为[导航属性名]@odata.bind,无需额外的_value后缀或其他拼接字符。
内容的提问来源于stack exchange,提问作者ayadlin brintha

