如何通过REST API让外部系统自动向Salesforce推送10MB CSV文件?
方案建议:10MB CSV文件通过REST API自动推送至Salesforce
针对你描述的点对点自动集成场景,推荐以下两种可行方案,均无需中间件或手动操作:
方案一:ContentVersion存储 + Batch Apex 自定义解析
步骤说明
外部系统上传CSV至Salesforce
调用Salesforce REST API的ContentVersion对象创建接口,将CSV文件以Blob形式上传为Salesforce的内容文件记录:- 请求端点:
/services/data/vXX.X/sobjects/ContentVersion - 请求头:
Content-Type: multipart/form-data - 表单参数需包含:
PathOnClient: 文件名(如daily_data.csv)FirstPublishLocationId: 指定文件存储的位置(如库ID或记录ID,可选,默认存个人内容库)- 二进制文件字段:将CSV文件作为
VersionData参数传递
- 认证方式:使用OAuth 2.0的JWT或密码流获取AccessToken,确保外部系统有
ContentVersion.Create权限
- 请求端点:
触发自定义处理逻辑
- 为
ContentVersion对象编写触发器,当新的CSV文件上传完成后,触发Batch Apex作业 - Batch Apex中读取
ContentVersion.VersionData(Blob类型),转换为字符串后逐行解析CSV内容,完成目标对象的插入/更新操作 - 利用Batch Apex的分批次执行特性,避免处理大文件时出现超时问题
- 为
适用场景
适合需要自定义数据解析、字段映射或复杂业务逻辑处理的场景,比如CSV字段与Salesforce对象字段不直接匹配,需额外数据转换。
方案二:Salesforce Bulk API 2.0 直接导入
步骤说明
创建批量导入作业
外部系统调用Bulk API 2.0的作业创建接口,定义导入规则:- 请求端点:
/services/data/vXX.X/jobs/ingest - 请求体示例:
{ "object": "Target_Object__c", "operation": "insert", "contentType": "CSV", "lineEnding": "LF" } - 接口返回作业ID,用于后续上传文件
- 请求端点:
上传CSV文件并启动作业
调用作业的批量上传接口,推送CSV文件:- 请求端点:
/services/data/vXX.X/jobs/ingest/{jobId}/batches - 请求头:
Content-Type: text/csv - 请求体直接传入CSV文件内容
- 上传完成后调用
/services/data/vXX.X/jobs/ingest/{jobId}更新作业状态为UploadComplete,触发Salesforce自动处理数据导入
- 请求端点:
监控作业状态
定期调用作业状态查询接口,确认数据导入结果,处理异常情况
适用场景
适合CSV字段与目标对象字段直接匹配、无需复杂自定义逻辑的场景,无需编写自定义解析代码,由Salesforce原生处理批量数据操作,效率更高。
通用注意事项
- 权限配置:确保外部系统的API用户拥有目标对象的
Create权限、Bulk API权限(方案二)或ContentVersion相关权限(方案一) - 错误处理:外部系统需实现API调用的重试机制,Salesforce端需记录数据插入错误(如Batch Apex中捕获
Database.SaveResult的错误信息,存入自定义日志对象) - API版本:选用v50.0及以上的API版本,确保支持最新的Bulk API 2.0特性和ContentVersion接口能力
内容的提问来源于stack exchange,提问作者user53245
相关产品推荐
相关产品推荐

