You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:10:31