获取SalesforceMalformedRequest:格式错误的请求错误

时间:2019-11-29 07:42:21

标签: python salesforce integration

我正在尝试执行以下代码,以使用simple_salesforce python库将数据推送到Salesforce:

from simple_salesforce import Salesforce

staging_df = hive.execute("select * from hdmni")
staging_df = staging_df.toPandas()
# # staging_df['birth_date']=  staging_df['birth_date'].dt.date
staging_df['birth_date'] = staging_df['birth_date'].astype(str)
staging_df['encounter_start_date'] = staging_df['encounter_start_date'].astype(str)
staging_df['encounter_end_date'] = staging_df['encounter_end_date'].astype(str)

bulk_data = []

for row in staging_df.itertuples():
    d= row._asdict()
    del d['Index']
    bulk_data.append(d)

sf = Salesforce(password='', username='', security_token='')
sf.bulk.Delivery_Detail__c.insert(bulk_data)

尝试将字典发送给salesforce时出现此错误:

  

SalesforceMalformedRequest:格式错误的请求   https://subhotutorial-dev-ed.my.salesforce.com/services/async/38.0/job/7500o00000HtWP6AAN/batch/7510o00000Q15TnAAJ/result。   响应内容:{'exceptionCode':'InvalidBatch',   'exceptionMessage':'未处理记录'}

1 个答案:

答案 0 :(得分:0)

关于您的查询的某些信息不正确。虽然我不知道您的用例,但通过阅读此行,可以告诉您您正在尝试插入Salesforce中的自定义对象/实体:

sf.bulk.Delivery_Detail__c.insert(bulk_data)

您之所以知道原因是因为后缀__c附加到自定义对象和字段上(顺便说一下,这是两个下划线)。

由于要插入自定义对象,因此您的字段也必须是自定义的。请注意,您尚未将后缀附加到它们之后。

我怀疑Salesforce在插入操作中期望的是这样的字段名称:

Birth_Date__c
Encounter_Start_Date__c
Encounter_End_Date__c

这些对象和字段均称为 API名称,并且只要代码与它们进行交互(无论是通过集成还是直接在Salesforce平台上执行的代码),您都需要确定您正在使用此API名称。

顺便说一句,您可以通过多种方式检索此API名称。可能最简单的方法是登录到Salesforce组织,然后在设置>对象管理器> [某些对象]>字段和关系中,您可以查看每个字段的详细信息,包括API名称。这是一个屏幕截图。

Field definition in Setup UI

您还可以在本地Apex代码中或通过集成RESTSOAP API使用SObject描述API。这是来自描述API请求到与我上面的UI示例相同的对象的描述REST端点的响应的一部分,位于https://[domain]/services/data/v47.0/sobjects/Expense__c/describe

SObject Field Describe Response

查看正在使用的simple-salesforce python库的文档,他们浮现了describe API。您可以在其他选项下找到一些info。您可以使用 sf.SObject.describe 调用它,其中“ SObject”是要查找其信息的实际对象。例如,在您的情况下,您将使用:

sf.Delivery_Detail__c.describe()

作为与Salesforce对象进行交互时的第一步,这是一个很好的故障排除步骤,我总是建议您仔细检查一下是否正确引用了API名称。我无法告诉您我遇到过几次小事情,例如添加或缺少下划线。特别是后缀__c