Salesforce创建自定义对象后写入记录失败:字段不存在报错求助
Salesforce自定义对象字段无法写入的问题解决
问题概述
通过simple_salesforce库创建CustomObject13__c(标签CO13)自定义对象成功,但写入包含Age__c和Description__c字段的记录时,收到以下错误:
simple_salesforce.exceptions.SalesforceMalformedRequest: Malformed request ... Response content: [{'message': "No such column 'Age__c' on sobject of type CustomObject13__c", 'errorCode': 'INVALID_FIELD'}]
查看对象管理器发现,自定义对象已存在,但未显示代码中定义的字段。
错误原因
创建自定义对象时,fields参数使用了普通字典而非md_api.CustomField实例。Salesforce Metadata API要求字段必须以CustomField对象形式传递,字典格式无法被正确解析,导致字段未实际创建。
修复方案
将字段定义替换为md_api.CustomField实例,并确保每个字段的类型、属性符合Metadata API要求。同时,对象创建后添加短暂延迟,等待元数据同步完成。
修改后的完整代码
import pandas as pd import time from simple_salesforce import Salesforce sf = Salesforce(username='user', password='pass', security_token='token') name = "CustomObject13__c" label = "CO13" md_api = sf.mdapi custom_object = md_api.CustomObject( fullName=name, label=label, pluralLabel="Custom Objects", nameField=md_api.CustomField( label="Name", type=md_api.FieldType("Text") ), fields=[ md_api.CustomField( fullName='Age__c', label='Age', type=md_api.FieldType('Text'), length=255 ), md_api.CustomField( fullName='Description__c', label='Description', type=md_api.FieldType('TextArea'), visibleLines=3 # TextArea字段可设置显示行数 ) ], deploymentStatus=md_api.DeploymentStatus("Deployed"), sharingModel=md_api.SharingModel("Read") ) # 创建自定义对象 md_api.CustomObject.create(custom_object) # 等待元数据同步,根据实际情况调整延迟时间 time.sleep(10) # 写入记录 df = pd.DataFrame({ 'Name': ['Sal Vulcano', 'James Murray'], "Age__c": ["34", "54"], "Description__c": ["tonight's big loser", "fool-proof plan"] }) for record in df.to_dict('records'): sf.__getattr__(name).create(record)
关键说明
- 字段定义方式:必须使用
md_api.CustomField实例来定义字段,而非字典,Metadata API才能正确识别并创建字段。 - 元数据同步延迟:Salesforce创建自定义对象和字段后,元数据需要时间同步到数据API,添加延迟可避免因同步未完成导致的字段不存在错误。
内容的提问来源于stack exchange,提问作者Ritik Kamra
相关产品推荐
相关产品推荐

