如何通过Salesforce REST API调用APEX执行记录合并等功能?
可以通过REST API运行Apex实现记录合并需求
你可以通过两种方式实现通过REST API触发Apex执行记录合并:
1. 自定义REST服务(推荐用于生产环境)
在Salesforce中编写带@RestResource注解的Apex类,暴露自定义REST端点,外部系统直接调用该端点执行合并逻辑。
示例Apex类:
@RestResource(urlMapping='/MergeRecords/*') global with sharing class MergeRecordsRestService { @HttpPost global static String mergeRecords(String masterRecordId, String[] mergeRecordIds) { try { // 获取主记录和待合并记录,建议使用绑定变量避免注入风险 SObject masterRecord = [SELECT Id FROM Account WHERE Id = :masterRecordId]; List<SObject> recordsToMerge = [SELECT Id FROM Account WHERE Id IN :mergeRecordIds]; // 执行合并操作,第二个参数为true表示删除待合并记录 Database.MergeResult[] results = Database.merge(masterRecord, recordsToMerge, true); // 返回结构化合并结果 return JSON.serialize(results); } catch(Exception e) { RestContext.response.statusCode = 500; return '合并失败:' + e.getMessage(); } } }
调用方式:
外部系统发送POST请求到https://<你的Salesforce域名>/services/data/v59.0/apexrest/MergeRecords,请求体为JSON格式:
{ "masterRecordId": "001D000000K0fXOIAZ", "mergeRecordIds": ["001D000000K0fXPIAZ", "001D000000K0fXQIAZ"] }
请求需携带有效的OAuth2认证令牌。
2. 使用Tooling API执行匿名Apex
通过Salesforce Tooling API的executeAnonymous端点,直接发送Apex脚本执行合并操作。
调用示例:
发送POST请求到https://<你的Salesforce域名>/services/data/v59.0/tooling/executeAnonymous,请求体为:
{ "anonymousBody": "Account master = [SELECT Id FROM Account WHERE Id='001D000000K0fXOIAZ']; List<Account> toMerge = [SELECT Id FROM Account WHERE Id IN ('001D000000K0fXPIAZ', '001D000000K0fXQIAZ')]; Database.merge(master, toMerge, true);" }
请求同样需要OAuth2认证,执行后会返回包含执行状态、日志的响应,可用于验证结果。
注意事项
- 权限:集成用户需要具备记录合并权限、Author Apex权限(Tooling API方式需要),以及对应对象的读写权限。
- 安全:自定义服务中优先使用绑定变量编写SOQL,避免注入风险;匿名Apex执行需谨慎处理用户输入。
- 错误处理:自定义服务可通过HTTP状态码和返回信息传递错误;Tooling API会在响应中返回执行异常详情。
内容的提问来源于stack exchange,提问作者Darren Oakey
相关产品推荐
相关产品推荐

