如何向Dataverse查找列POST数据?代码问题求助
解决Dataverse查找列提交数据的问题
首先,你的代码存在两个核心问题:一是查找列的格式不符合Dataverse OData规范,二是数据结构与循环逻辑错误——当前jsonlistdf是单个字典,for i in jsonlistdf会遍历字典的键(如column1、lookupcolumn),而非数据条目,这会导致提交的数据完全不符合要求。
查找列的正确写法
Dataverse的查找列需要用[查找列逻辑名@odata.bind]的格式关联目标实体,值为目标实体的OData路径加其GUID。假设你的lookupcolumn对应的逻辑名称是accountid(关联Account表的主键),正确格式如下:
'accountid@odata.bind': '/accounts(12345678-1234-1234-1234-1234567890AB)'
其中12345678-1234-1234-1234-1234567890AB是你要关联的Account记录的accountid GUID值。
修改后的完整代码
单条数据提交场景
import json import http.client # 修正数据结构,使用正确的查找列格式 jsonlistdf = { 'column1': '0000098778', 'accountid@odata.bind': '/accounts(替换为实际的Account GUID)', # 替换为目标Account的真实GUID 'column2': 'London', 'column3': '8000' } conn = http.client.HTTPSConnection("{}.api.crm4.dynamics.com".format(url)) headers = { 'Authorization': 'Bearer ' + accesstoken, 'OData-MaxVersion': '4.0', 'OData-Version': '4.0', 'Accept': 'application/json', 'Content-Type': 'application/json; charset=utf-8', 'Prefer': 'return=representation' } # 单条数据直接序列化提交,无需循环 data = json.dumps(jsonlistdf, default=str) response = conn.request("POST", "/api/data/v9.2/tablewithlookupcolumn", data, headers) res = conn.getresponse() data = res.read() print(res.status, res.reason)
多条数据提交场景
import json import http.client # 多条数据需用列表包裹字典 jsonlistdf = [ { 'column1': '0000098778', 'accountid@odata.bind': '/accounts(替换为实际GUID1)', 'column2': 'London', 'column3': '8000' }, { 'column1': '0000098779', 'accountid@odata.bind': '/accounts(替换为实际GUID2)', 'column2': 'Paris', 'column3': '9000' } ] conn = http.client.HTTPSConnection("{}.api.crm4.dynamics.com".format(url)) headers = { 'Authorization': 'Bearer ' + accesstoken, 'OData-MaxVersion': '4.0', 'OData-Version': '4.0', 'Accept': 'application/json', 'Content-Type': 'application/json; charset=utf-8', 'Prefer': 'return=representation' } # 遍历列表中的每个数据条目 for item in jsonlistdf: data = json.dumps(item, default=str) response = conn.request("POST", "/api/data/v9.2/tablewithlookupcolumn", data, headers) res = conn.getresponse() data = res.read() print(res.status, res.reason)
关键注意事项
- 确认查找列的逻辑名称:不要用界面显示名称,需到Dataverse实体设计页查看该查找列的逻辑名(关联Account的查找列逻辑名通常为
accountid)。 - GUID格式要正确:必须是目标Account记录的
accountid值,为带连字符的标准GUID(如123e4567-e89b-12d3-a456-426614174000)。 - 循环逻辑需匹配数据结构:多条数据必须用列表包裹字典,遍历列表中的每个字典条目,而非单个字典的键。
内容的提问来源于stack exchange,提问作者kaarel
相关产品推荐
相关产品推荐

