Salesforce知识点: Callin 全解析:入站调用方式、限制与最佳实践

Salesforce入站调用全解析

Salesforce Callin 全解析:入站调用方式、限制与最佳实践

在 Salesforce 集成架构中,除了 Salesforce 主动调用外部系统的 Callout 外,还存在外部系统主动访问 Salesforce 的 Callin(入站调用)场景。本文将全面介绍 Salesforce 支持的所有 Callin 方式,分析其适用场景、优缺点及限制,并提供实战示例代码。

一、Callin 基础概念

Callin 指外部系统通过 API 或其他方式主动访问 Salesforce,实现数据交互或触发业务逻辑。常见用途包括:

  • 外部电商平台创建订单后同步到 Salesforce 生成 Opportunity
  • ERP 系统更新产品库存后实时同步到 Salesforce 产品对象
  • 第三方表单系统提交数据后在 Salesforce 创建 Lead
  • 物联网设备发送状态数据触发 Salesforce 工作流

Salesforce 提供了多种 Callin 接入方式,需根据外部系统能力、数据量和实时性要求选择合适方案。

二、主要 Callin 方式及实现

1. REST API Callin

适用场景:外部系统通过 HTTP/HTTPS 协议调用 Salesforce REST API,适合轻量级、实时性要求高的交互(如单条记录创建/更新、查询数据)。

实现方式:外部系统通过 OAuth 2.0 认证获取访问令牌,然后调用 Salesforce 标准 REST API 或自定义 Apex REST 接口。

关键信息
  • 认证方式:支持 OAuth 2.0(推荐)、用户名密码流、JWT Bearer 令牌等
  • 数据格式:JSON(推荐)或 XML
  • 端点格式https://your-instance.salesforce.com/services/data/vXX.X/(XX.X 为 API 版本)
示例 1:调用标准 REST API 创建 Account

步骤 1:获取访问令牌(OAuth 2.0 用户名密码流)

# 发送认证请求
curl -X POST https://login.salesforce.com/services/oauth2/token \
  -d "grant_type=password" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET" \
  -d "username=YOUR_USERNAME" \
  -d "password=YOUR_PASSWORD+SECURITY_TOKEN"

成功响应

{
   
   
  "access_token": "00Dxx0000001234!AQEAQ...",
  "instance_url": "https://your-instance.salesforce.com",
  "id": "https://login.salesforce.com/id/00Dxx0000001234EAQ/005xx000000ABCD",
  "token_type": "Bearer",
  "issued_at": "1620000000000",
  "signature": "abc123..."
}

步骤 2:使用令牌创建 Account

# 调用标准 REST API 创建账户
curl -X POST https://your-instance.salesforce.com/services/data/v58.0/sobjects/Account/ \
  -H "Authorization: Bearer 00Dxx0000001234!AQEAQ..." \
  -H "Content-Type: application/json" \
  -d '{
    "Name": "外部系统创建的公司",
    "Industry": "Technology",
    "Website": "https://example.com"
  }'

成功响应

{
   
   
  "id": "001xx00000ABCDE",
  "success": true,
  "errors": []
}
示例 2:自定义 Apex REST 接口(处理复杂业务)

当标准 API 无法满足需求时,可创建自定义 REST 接口:

@RestResource(urlMapping='/custom/order/*')  // 自定义端点路径
global with sharing class CustomOrderRestResource {
    // 处理 POST 请求:创建订单并关联机会
    @HttpPost
    global static String createOrder() {
        // 获取请求体
        RestRequest req = RestContext.request;
        RestResponse res = RestContext.response;
        
        try {
            // 解析 JSON 请求
            Map<String, Object> requestData = (Map<String, Object>)JSON.deserializeUntyped(req.requestBody.toString());
            
            // 验证必填字段
            if (!requestData.containsKey('opportunityId') || !requestData.containsKey('amount')) {
                res.statusCode = 400;  // 错误状态码:参数缺失
                return '错误:缺少必填字段(opportunityId 或 amount)';
            }
            
            // 创建订单记录
            Order ord = new Order(
                OpportunityId = (String)requestData.get('opportunityId'),
                Amount = (Decimal)requestData.get('amount'),
                Status = 'Draft',
                EffectiveDate = Date.today()
            );
            insert ord;
            
            // 返回成功结果
            return JSON.serialize(new Map<String, Object>{
                'success' => true,
                'orderId' => ord.Id,
                'message' => '订单创建成功'
            });
        } catch (Exception e) {
            res.statusCode = 500;  // 服务器错误
            return '处理失败:' + e.getMessage();
        }
    }
}

外部系统调用自定义接口

curl -X POST https://your-instance.salesforce.com/services/apexrest/custom/order/ \
  -H "Authorization: Bearer 00Dxx0000001234!AQEAQ..." \
  -H "Content-Type: application/json" \
  -d '{
    "opportunityId": "006xx00000ABCDE",
    "amount": 50000.00
  }'

优点

  • 轻量级、灵活,支持 JSON 格式
  • 标准 API 无需开发,开箱即用
  • 自定义接口可实现复杂业务逻辑

缺点

  • 单请求数据量有限(最大 6MB)
  • 不适合大批量数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liquad Li 李庆军

您的鼓励是我创作的动力哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值