You need to enable JavaScript to run this app. Apex如何将HTTP响应key值回填至Salesforce Case对象
优惠活动
大模型
产品
解决方案
定价
更多

Apex如何将HTTP响应key值回填至Salesforce Case对象

核心实现逻辑
  • 原代码存在的核心问题是直接把整段HTTP响应体赋值给key变量,没有做JSON字段提取,也没有执行对Salesforce Case的更新操作,需要按三步补全逻辑:
    1. 接口调用完成后先校验响应状态码,确认请求成功再开展后续解析逻辑,避免接口报错时触发运行时异常
    2. 对JSON格式的响应体做解析,精准提取其中key字段的实际值
    3. 通过入参携带的CaseNumber定位到对应的Case记录,将提取到的key值赋值给Case上对应的业务存储字段,执行DML更新完成回填
  • 额外的健壮性优化:对请求接口时传入的参数做URL编码,避免参数内容里的特殊字符导致请求参数解析错乱
修正后的可运行代码
public static void createCase(String id, String Description, String Subject, String CaseNumber) {
    Http http = new Http();
    HttpRequest request = new HttpRequest();
    // 对描述参数做URL编码,避免特殊字符截断请求参数
    request.setEndpoint('https://TrainingAPAC.jitterbit.cc/v1.1/caseSyncInsert?id=' 
        + id 
        + '&Jid=' + Subject 
        + '&desc=' + EncodingUtil.urlEncode(Description, 'UTF-8') 
        + '&caseNumber=' + CaseNumber);
    request.setMethod('POST');
    request.setHeader('Content-Type', 'application/json;charset=UTF-8'); 
    
    HttpResponse response = http.send(request); 
    System.debug('接口返回状态码:' + response.getStatusCode());
    System.debug('接口返回全量响应体:' + response.getBody());

    // 仅在接口返回2xx成功状态时做后续处理
    if (response.getStatusCode() >= 200 && response.getStatusCode() < 300) {
        // 解析JSON响应,提取目标key值,替代原代码直接取全量响应体的错误写法
        Map<String, Object> responseBodyMap = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());
        String extractedKey = String.valueOf(responseBodyMap.get('key'));
        System.debug('提取到的目标key值:' + extractedKey);

        // 定位对应需要更新的Case记录
        // 注意:Jira_Issue_Key__c 为示例占位字段,需替换为你组织Case对象上实际存储该key值的字段API名
        List<Case> caseToUpdate = [
            SELECT Id, CaseNumber 
            FROM Case 
            WHERE CaseNumber = :CaseNumber 
            LIMIT 1
        ];

        // 完成赋值并执行更新
        if (!caseToUpdate.isEmpty() && String.isNotBlank(extractedKey)) {
            caseToUpdate[0].Jira_Issue_Key__c = extractedKey;
            update caseToUpdate;
        }
    } else {
        System.error('第三方接口调用失败,状态码:' + response.getStatusCode() + ',错误信息:' + response.getBody());
    }
}
实现注意事项
  • 代码中Jira_Issue_Key__c为示例占位字段,需要替换为你自己组织在Case对象上实际用于存储该key值的自定义字段API名称
  • 如果后续接口返回的JSON结构变得复杂,可以定义匹配响应结构的Apex实体类做反序列化,比非类型化的Map解析有更高的类型安全保障
  • 查询Case时建议保留LIMIT 1的限制,避免CaseNumber重复时批量更新多条无关记录

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 05:54:00