如何用Python 3写入Dynamics CRM 2013数据?已实现读取功能
解决方案:Dynamics CRM 2013 数据写入实现(基于OrganizationData.svc)
明确说明:Dynamics CRM 2013的OrganizationData.svc(OData 2.0端点)完全支持数据写入,包括创建、更新、删除操作,和读取使用相同的NTLM认证方式即可,无需额外配置。
核心操作步骤
1. 准备请求头
除NTLM认证所需配置外,写入操作需额外指定以下请求头:
Content-Type:application/json; charset=utf-8Accept:application/jsonX-HTTP-Method: 更新/删除操作时需要,创建操作无需设置
2. 数据创建(POST请求)
以创建联系人(Contact实体)为例,注意OrganizationData.svc的实体集为复数形式(Contacts):
import requests from requests_ntlm2 import HttpNtlmAuth # 基础配置 crm_url = "http://your-crm-server/XRMServices/2011/OrganizationData.svc" username = "DOMAIN\\user" password = "your-password" # 待创建的实体数据(字段为OrganizationData.svc逻辑名称,而非显示名) contact_data = { "FirstName": "John", "LastName": "Doe", "EmailAddress1": "john.doe@example.com", "Telephone1": "1234567890" } # 构建请求 create_url = f"{crm_url}/Contacts" headers = { "Content-Type": "application/json; charset=utf-8", "Accept": "application/json" } # 发送请求(建议先在测试环境验证) response = requests.post( create_url, json=contact_data, auth=HttpNtlmAuth(username, password), headers=headers ) # 结果验证 if response.status_code == 201: print("创建成功,返回数据:", response.json()) else: print(f"创建失败,状态码:{response.status_code},错误信息:{response.text}")
3. 数据更新(MERGE/PUT请求)
更新需指定实体的__metadata(包含uri),或直接拼接实体ID到URL:
# 假设已知联系人GUID为contact_id contact_id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" update_url = f"{crm_url}/Contacts(guid'{contact_id}')" # 待更新字段 update_data = { "FirstName": "John Updated", "__metadata": {"uri": update_url} # 必须包含该元数据字段 } headers["X-HTTP-Method"] = "MERGE" # MERGE仅更新指定字段,PUT会覆盖所有字段 response = requests.post( update_url, json=update_data, auth=HttpNtlmAuth(username, password), headers=headers ) if response.status_code == 204: print("更新成功") else: print(f"更新失败,状态码:{response.status_code},错误信息:{response.text}")
4. 数据删除(DELETE请求)
delete_url = f"{crm_url}/Contacts(guid'{contact_id}')" headers["X-HTTP-Method"] = "DELETE" response = requests.post( delete_url, auth=HttpNtlmAuth(username, password), headers=headers ) if response.status_code == 204: print("删除成功") else: print(f"删除失败,状态码:{response.status_code},错误信息:{response.text}")
生产环境注意事项
- 先在测试环境验证:复刻生产环境的CRM版本、权限配置,完整测试所有写入逻辑,确保实体集名称、字段逻辑名称正确,账号权限足够。
- 权限检查:确认认证账号拥有对应实体的创建/更新/删除权限(通过CRM安全角色配置)。
- 字段逻辑名称:OrganizationData.svc使用实体和字段的逻辑名称,而非显示名,可通过CRM自定义工具(设置→自定义→自定义系统→实体→字段)查看。
- 错误处理:生产环境需捕获网络异常、权限错误、字段验证错误等情况,避免数据异常。
内容的提问来源于stack exchange,提问作者Admir Ljubijankić
相关产品推荐
相关产品推荐

