970 lines
20 KiB
Markdown
970 lines
20 KiB
Markdown
# API 文档
|
||
|
||
## 元数据
|
||
- 需求编号:001
|
||
- 子需求编号:001-02
|
||
- 创建时间:2026-01-30
|
||
- 创建人:AI Assistant
|
||
- 版本号:v1.0.0
|
||
|
||
## API 概述
|
||
|
||
本 API 文档描述了 Salesforce Partner API 的 CRUD 操作接口,包括 Create(创建)、Retrieve(查询)、Update(更新)、Delete(删除)、Upsert(更新或插入)、Merge(合并)六个核心操作。所有接口都支持单条记录和批量记录操作(最多 200 条),并提供完整的参数验证、异常处理、权限控制和 Swagger 文档。
|
||
|
||
### 核心功能
|
||
|
||
- **创建记录(Create)**:创建新的 Salesforce 记录,支持单条记录和批量记录创建
|
||
- **查询记录(Retrieve)**:查询 Salesforce 记录,支持单条记录和批量记录查询
|
||
- **更新记录(Update)**:更新现有的 Salesforce 记录,支持单条记录和批量记录更新
|
||
- **删除记录(Delete)**:删除 Salesforce 记录,支持单条记录和批量记录删除
|
||
- **更新或插入记录(Upsert)**:更新或插入 Salesforce 记录,支持单条记录和批量记录 Upsert
|
||
- **合并记录(Merge)**:合并三条 Salesforce 记录
|
||
|
||
### 技术栈
|
||
|
||
- **框架**:Spring Boot 3.x、Spring Security 6.x、若依框架
|
||
- **API 规范**:RESTful API
|
||
- **文档工具**:Swagger/OpenAPI
|
||
- **权限控制**:Spring Security(@PreAuthorize)
|
||
- **参数验证**:Spring Boot Validation
|
||
- **异常处理**:datai-salesforce-common 模块异常体系
|
||
|
||
### 认证方式
|
||
|
||
所有接口都需要用户认证,使用 Spring Security 的 `@PreAuthorize("@ss.hasLogin()")` 注解进行权限控制。用户必须登录后才能访问这些接口。
|
||
|
||
### 基础 URL
|
||
|
||
```
|
||
http://localhost:8080/partner/crud
|
||
```
|
||
|
||
### 响应格式
|
||
|
||
所有接口使用统一的响应格式:
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "操作成功",
|
||
"data": {}
|
||
}
|
||
```
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| code | Integer | 状态码(200 成功,其他失败) |
|
||
| msg | String | 提示信息 |
|
||
| data | Object | 返回数据 |
|
||
|
||
## 接口列表
|
||
|
||
### 接口 1:创建记录
|
||
|
||
#### 功能描述
|
||
创建新的 Salesforce 记录,支持单条记录和批量记录创建(最多 200 条)。
|
||
|
||
#### 请求方式
|
||
POST
|
||
|
||
#### 请求路径
|
||
`/partner/crud/create`
|
||
|
||
#### 请求参数
|
||
|
||
**单条记录创建**:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| objectType | String | 是 | 对象类型(如 "Account"、"Contact") |
|
||
| fields | Map<String, Object> | 是 | 字段值(如 {"Name": "Test Account", "BillingCity": "San Francisco"}) |
|
||
| records | List<Map<String, Object>> | 否 | 批量创建记录列表(如果提供,则忽略 objectType 和 fields) |
|
||
|
||
**批量记录创建**:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| records | List<Map<String, Object>> | 是 | 批量创建记录列表(最多 200 条) |
|
||
|
||
#### 请求示例
|
||
|
||
**单条记录创建**:
|
||
|
||
```json
|
||
{
|
||
"objectType": "Account",
|
||
"fields": {
|
||
"Name": "Test Account",
|
||
"BillingCity": "San Francisco",
|
||
"BillingState": "CA",
|
||
"AnnualRevenue": 1000000.00
|
||
}
|
||
}
|
||
```
|
||
|
||
**批量记录创建**:
|
||
|
||
```json
|
||
{
|
||
"records": [
|
||
{
|
||
"Name": "Account 1",
|
||
"BillingCity": "San Francisco"
|
||
},
|
||
{
|
||
"Name": "Account 2",
|
||
"BillingCity": "New York"
|
||
},
|
||
{
|
||
"Name": "Account 3",
|
||
"BillingCity": "Los Angeles"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
#### 响应参数
|
||
|
||
**单条记录创建**:
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| id | String | 记录 ID |
|
||
| success | Boolean | 是否成功 |
|
||
| errors | List<ErrorVo> | 错误信息列表 |
|
||
| created | Boolean | 是否创建 |
|
||
|
||
**批量记录创建**:
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| - | List<RecordResultVo> | 记录操作结果列表 |
|
||
|
||
#### 响应示例
|
||
|
||
**成功示例(单条记录)**:
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "创建成功",
|
||
"data": {
|
||
"id": "001xx000003DHb2AAG",
|
||
"success": true,
|
||
"errors": [],
|
||
"created": true
|
||
}
|
||
}
|
||
```
|
||
|
||
**成功示例(批量记录)**:
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "批量创建成功",
|
||
"data": [
|
||
{
|
||
"id": "001xx000003DHb2AAG",
|
||
"success": true,
|
||
"errors": [],
|
||
"created": true
|
||
},
|
||
{
|
||
"id": "001xx000003DHb3AAH",
|
||
"success": true,
|
||
"errors": [],
|
||
"created": true
|
||
},
|
||
{
|
||
"id": "001xx000003DHb4AAI",
|
||
"success": true,
|
||
"errors": [],
|
||
"created": true
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**失败示例**:
|
||
|
||
```json
|
||
{
|
||
"code": 500,
|
||
"msg": "创建记录失败: INVALID_FIELD: No such column 'InvalidField' on sobject of type Account",
|
||
"data": null
|
||
}
|
||
```
|
||
|
||
#### 错误码
|
||
|
||
| 错误码 | 说明 |
|
||
|--------|------|
|
||
| 500 | 创建记录失败 |
|
||
| INVALID_FIELD | 字段不存在或无效 |
|
||
| INVALID_ID | ID 无效 |
|
||
| MALFORMED_QUERY | 查询语法错误 |
|
||
| INVALID_OPERATION | 操作无效 |
|
||
| DUPLICATE_VALUE | 值重复 |
|
||
| ENTITY_IS_DELETED | 记录已删除 |
|
||
| INSUFFICIENT_ACCESS | 权限不足 |
|
||
| INVALID_CROSS_REFERENCE_KEY | 跨引用键无效 |
|
||
|
||
---
|
||
|
||
### 接口 2:查询记录
|
||
|
||
#### 功能描述
|
||
查询 Salesforce 记录,支持单条记录和批量记录查询(最多 200 条)。
|
||
|
||
#### 请求方式
|
||
GET
|
||
|
||
#### 请求路径
|
||
`/partner/crud/retrieve`
|
||
|
||
#### 请求参数
|
||
|
||
**单条记录查询**:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| objectType | String | 是 | 对象类型(如 "Account"、"Contact") |
|
||
| id | String | 是 | 记录 ID |
|
||
| fieldNames | String | 否 | 字段名称列表(逗号分隔,如 "Name,BillingCity,BillingState") |
|
||
|
||
**批量记录查询**:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| objectType | String | 是 | 对象类型(如 "Account"、"Contact") |
|
||
| ids | String | 是 | 记录 ID 列表(逗号分隔,最多 200 条) |
|
||
| fieldNames | String | 否 | 字段名称列表(逗号分隔,如 "Name,BillingCity,BillingState") |
|
||
|
||
#### 请求示例
|
||
|
||
**单条记录查询**:
|
||
|
||
```
|
||
GET /partner/crud/retrieve?objectType=Account&id=001xx000003DHb2AAG&fieldNames=Name,BillingCity,BillingState
|
||
```
|
||
|
||
**批量记录查询**:
|
||
|
||
```
|
||
GET /partner/crud/retrieve?objectType=Account&ids=001xx000003DHb2AAG,001xx000003DHb3AAH,001xx000003DHb4AAI&fieldNames=Name,BillingCity,BillingState
|
||
```
|
||
|
||
#### 响应参数
|
||
|
||
**单条记录查询**:
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| objectType | String | 对象类型 |
|
||
| id | String | 记录 ID |
|
||
| fields | Map<String, Object> | 字段值 |
|
||
| success | Boolean | 是否成功 |
|
||
| errors | List<ErrorVo> | 错误信息列表 |
|
||
|
||
**批量记录查询**:
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| - | List<RetrieveResultVo> | 查询结果列表 |
|
||
|
||
#### 响应示例
|
||
|
||
**成功示例(单条记录)**:
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "查询成功",
|
||
"data": {
|
||
"objectType": "Account",
|
||
"id": "001xx000003DHb2AAG",
|
||
"fields": {
|
||
"Name": "Test Account",
|
||
"BillingCity": "San Francisco",
|
||
"BillingState": "CA"
|
||
},
|
||
"success": true,
|
||
"errors": []
|
||
}
|
||
}
|
||
```
|
||
|
||
**成功示例(批量记录)**:
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "查询成功",
|
||
"data": [
|
||
{
|
||
"objectType": "Account",
|
||
"id": "001xx000003DHb2AAG",
|
||
"fields": {
|
||
"Name": "Account 1",
|
||
"BillingCity": "San Francisco",
|
||
"BillingState": "CA"
|
||
},
|
||
"success": true,
|
||
"errors": []
|
||
},
|
||
{
|
||
"objectType": "Account",
|
||
"id": "001xx000003DHb3AAH",
|
||
"fields": {
|
||
"Name": "Account 2",
|
||
"BillingCity": "New York",
|
||
"BillingState": "NY"
|
||
},
|
||
"success": true,
|
||
"errors": []
|
||
},
|
||
{
|
||
"objectType": "Account",
|
||
"id": "001xx000003DHb4AAI",
|
||
"fields": {
|
||
"Name": "Account 3",
|
||
"BillingCity": "Los Angeles",
|
||
"BillingState": "CA"
|
||
},
|
||
"success": true,
|
||
"errors": []
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**失败示例**:
|
||
|
||
```json
|
||
{
|
||
"code": 500,
|
||
"msg": "查询记录失败: INVALID_ID: Invalid ID: 001xx000003DHb2AAG",
|
||
"data": null
|
||
}
|
||
```
|
||
|
||
#### 错误码
|
||
|
||
| 错误码 | 说明 |
|
||
|--------|------|
|
||
| 500 | 查询记录失败 |
|
||
| INVALID_ID | ID 无效 |
|
||
| INVALID_FIELD | 字段不存在或无效 |
|
||
| ENTITY_IS_DELETED | 记录已删除 |
|
||
| INSUFFICIENT_ACCESS | 权限不足 |
|
||
|
||
---
|
||
|
||
### 接口 3:更新记录
|
||
|
||
#### 功能描述
|
||
更新现有的 Salesforce 记录,支持单条记录和批量记录更新(最多 200 条)。
|
||
|
||
#### 请求方式
|
||
PUT
|
||
|
||
#### 请求路径
|
||
`/partner/crud/update`
|
||
|
||
#### 请求参数
|
||
|
||
**单条记录更新**:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| objectType | String | 是 | 对象类型(如 "Account"、"Contact") |
|
||
| id | String | 是 | 记录 ID |
|
||
| fields | Map<String, Object> | 是 | 字段值(如 {"BillingCity": "New York"}) |
|
||
| records | List<UpdateRecordItem> | 否 | 批量更新记录列表(如果提供,则忽略 objectType、id 和 fields) |
|
||
|
||
**批量记录更新**:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| records | List<UpdateRecordItem> | 是 | 批量更新记录列表(最多 200 条) |
|
||
|
||
**UpdateRecordItem**:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| id | String | 是 | 记录 ID |
|
||
| fields | Map<String, Object> | 是 | 字段值 |
|
||
|
||
#### 请求示例
|
||
|
||
**单条记录更新**:
|
||
|
||
```json
|
||
{
|
||
"objectType": "Account",
|
||
"id": "001xx000003DHb2AAG",
|
||
"fields": {
|
||
"BillingCity": "New York",
|
||
"BillingState": "NY",
|
||
"AnnualRevenue": 2000000.00
|
||
}
|
||
}
|
||
```
|
||
|
||
**批量记录更新**:
|
||
|
||
```json
|
||
{
|
||
"records": [
|
||
{
|
||
"id": "001xx000003DHb2AAG",
|
||
"fields": {
|
||
"BillingCity": "New York",
|
||
"BillingState": "NY"
|
||
}
|
||
},
|
||
{
|
||
"id": "001xx000003DHb3AAH",
|
||
"fields": {
|
||
"BillingCity": "Los Angeles",
|
||
"BillingState": "CA"
|
||
}
|
||
},
|
||
{
|
||
"id": "001xx000003DHb4AAI",
|
||
"fields": {
|
||
"BillingCity": "Chicago",
|
||
"BillingState": "IL"
|
||
}
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
#### 响应参数
|
||
|
||
**单条记录更新**:
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| id | String | 记录 ID |
|
||
| success | Boolean | 是否成功 |
|
||
| errors | List<ErrorVo> | 错误信息列表 |
|
||
|
||
**批量记录更新**:
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| - | List<RecordResultVo> | 记录操作结果列表 |
|
||
|
||
#### 响应示例
|
||
|
||
**成功示例(单条记录)**:
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "更新成功",
|
||
"data": {
|
||
"id": "001xx000003DHb2AAG",
|
||
"success": true,
|
||
"errors": []
|
||
}
|
||
}
|
||
```
|
||
|
||
**成功示例(批量记录)**:
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "批量更新成功",
|
||
"data": [
|
||
{
|
||
"id": "001xx000003DHb2AAG",
|
||
"success": true,
|
||
"errors": []
|
||
},
|
||
{
|
||
"id": "001xx000003DHb3AAH",
|
||
"success": true,
|
||
"errors": []
|
||
},
|
||
{
|
||
"id": "001xx000003DHb4AAI",
|
||
"success": true,
|
||
"errors": []
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**失败示例**:
|
||
|
||
```json
|
||
{
|
||
"code": 500,
|
||
"msg": "更新记录失败: INVALID_ID: Invalid ID: 001xx000003DHb2AAG",
|
||
"data": null
|
||
}
|
||
```
|
||
|
||
#### 错误码
|
||
|
||
| 错误码 | 说明 |
|
||
|--------|------|
|
||
| 500 | 更新记录失败 |
|
||
| INVALID_ID | ID 无效 |
|
||
| INVALID_FIELD | 字段不存在或无效 |
|
||
| ENTITY_IS_DELETED | 记录已删除 |
|
||
| INSUFFICIENT_ACCESS | 权限不足 |
|
||
|
||
---
|
||
|
||
### 接口 4:删除记录
|
||
|
||
#### 功能描述
|
||
删除 Salesforce 记录,支持单条记录和批量记录删除(最多 200 条)。
|
||
|
||
#### 请求方式
|
||
DELETE
|
||
|
||
#### 请求路径
|
||
`/partner/crud/delete`
|
||
|
||
#### 请求参数
|
||
|
||
**单条记录删除**:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| objectType | String | 是 | 对象类型(如 "Account"、"Contact") |
|
||
| id | String | 是 | 记录 ID |
|
||
| ids | String | 否 | 记录 ID 列表(逗号分隔,最多 200 条) |
|
||
|
||
**批量记录删除**:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| objectType | String | 是 | 对象类型(如 "Account"、"Contact") |
|
||
| ids | String | 是 | 记录 ID 列表(逗号分隔,最多 200 条) |
|
||
|
||
#### 请求示例
|
||
|
||
**单条记录删除**:
|
||
|
||
```
|
||
DELETE /partner/crud/delete?objectType=Account&id=001xx000003DHb2AAG
|
||
```
|
||
|
||
**批量记录删除**:
|
||
|
||
```
|
||
DELETE /partner/crud/delete?objectType=Account&ids=001xx000003DHb2AAG,001xx000003DHb3AAH,001xx000003DHb4AAI
|
||
```
|
||
|
||
#### 响应参数
|
||
|
||
**单条记录删除**:
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| id | String | 记录 ID |
|
||
| success | Boolean | 是否成功 |
|
||
| errors | List<ErrorVo> | 错误信息列表 |
|
||
|
||
**批量记录删除**:
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| - | List<RecordResultVo> | 记录操作结果列表 |
|
||
|
||
#### 响应示例
|
||
|
||
**成功示例(单条记录)**:
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "删除成功",
|
||
"data": {
|
||
"id": "001xx000003DHb2AAG",
|
||
"success": true,
|
||
"errors": []
|
||
}
|
||
}
|
||
```
|
||
|
||
**成功示例(批量记录)**:
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "批量删除成功",
|
||
"data": [
|
||
{
|
||
"id": "001xx000003DHb2AAG",
|
||
"success": true,
|
||
"errors": []
|
||
},
|
||
{
|
||
"id": "001xx000003DHb3AAH",
|
||
"success": true,
|
||
"errors": []
|
||
},
|
||
{
|
||
"id": "001xx000003DHb4AAI",
|
||
"success": true,
|
||
"errors": []
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**失败示例**:
|
||
|
||
```json
|
||
{
|
||
"code": 500,
|
||
"msg": "删除记录失败: INVALID_ID: Invalid ID: 001xx000003DHb2AAG",
|
||
"data": null
|
||
}
|
||
```
|
||
|
||
#### 错误码
|
||
|
||
| 错误码 | 说明 |
|
||
|--------|------|
|
||
| 500 | 删除记录失败 |
|
||
| INVALID_ID | ID 无效 |
|
||
| ENTITY_IS_DELETED | 记录已删除 |
|
||
| ENTITY_IS_LOCKED_FOR_DELETION | 记录被锁定,无法删除 |
|
||
| INSUFFICIENT_ACCESS | 权限不足 |
|
||
|
||
---
|
||
|
||
### 接口 5:更新或插入记录
|
||
|
||
#### 功能描述
|
||
更新或插入 Salesforce 记录,支持单条记录和批量记录 Upsert(最多 200 条)。如果记录存在则更新,如果不存在则创建。
|
||
|
||
#### 请求方式
|
||
POST
|
||
|
||
#### 请求路径
|
||
`/partner/crud/upsert`
|
||
|
||
#### 请求参数
|
||
|
||
**单条记录 Upsert**:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| objectType | String | 是 | 对象类型(如 "Account"、"Contact") |
|
||
| externalIdField | String | 是 | 外部 ID 字段名称(如 "ExternalId__c") |
|
||
| fields | Map<String, Object> | 是 | 字段值(必须包含外部 ID 字段的值) |
|
||
| records | List<Map<String, Object>> | 否 | 批量 Upsert 记录列表(如果提供,则忽略 objectType、externalIdField 和 fields) |
|
||
|
||
**批量记录 Upsert**:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| objectType | String | 是 | 对象类型(如 "Account"、"Contact") |
|
||
| externalIdField | String | 是 | 外部 ID 字段名称(如 "ExternalId__c") |
|
||
| records | List<Map<String, Object>> | 是 | 批量 Upsert 记录列表(最多 200 条,每条记录必须包含外部 ID 字段的值) |
|
||
|
||
#### 请求示例
|
||
|
||
**单条记录 Upsert**:
|
||
|
||
```json
|
||
{
|
||
"objectType": "Account",
|
||
"externalIdField": "ExternalId__c",
|
||
"fields": {
|
||
"ExternalId__c": "EXT001",
|
||
"Name": "Test Account",
|
||
"BillingCity": "San Francisco"
|
||
}
|
||
}
|
||
```
|
||
|
||
**批量记录 Upsert**:
|
||
|
||
```json
|
||
{
|
||
"objectType": "Account",
|
||
"externalIdField": "ExternalId__c",
|
||
"records": [
|
||
{
|
||
"ExternalId__c": "EXT001",
|
||
"Name": "Account 1",
|
||
"BillingCity": "San Francisco"
|
||
},
|
||
{
|
||
"ExternalId__c": "EXT002",
|
||
"Name": "Account 2",
|
||
"BillingCity": "New York"
|
||
},
|
||
{
|
||
"ExternalId__c": "EXT003",
|
||
"Name": "Account 3",
|
||
"BillingCity": "Los Angeles"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
#### 响应参数
|
||
|
||
**单条记录 Upsert**:
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| id | String | 记录 ID |
|
||
| success | Boolean | 是否成功 |
|
||
| errors | List<ErrorVo> | 错误信息列表 |
|
||
| created | Boolean | 是否创建 |
|
||
|
||
**批量记录 Upsert**:
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| - | List<RecordResultVo> | 记录操作结果列表 |
|
||
|
||
#### 响应示例
|
||
|
||
**成功示例(单条记录,创建)**:
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "Upsert 成功",
|
||
"data": {
|
||
"id": "001xx000003DHb2AAG",
|
||
"success": true,
|
||
"errors": [],
|
||
"created": true
|
||
}
|
||
}
|
||
```
|
||
|
||
**成功示例(单条记录,更新)**:
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "Upsert 成功",
|
||
"data": {
|
||
"id": "001xx000003DHb2AAG",
|
||
"success": true,
|
||
"errors": [],
|
||
"created": false
|
||
}
|
||
}
|
||
```
|
||
|
||
**成功示例(批量记录)**:
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "批量 Upsert 成功",
|
||
"data": [
|
||
{
|
||
"id": "001xx000003DHb2AAG",
|
||
"success": true,
|
||
"errors": [],
|
||
"created": true
|
||
},
|
||
{
|
||
"id": "001xx000003DHb3AAH",
|
||
"success": true,
|
||
"errors": [],
|
||
"created": false
|
||
},
|
||
{
|
||
"id": "001xx000003DHb4AAI",
|
||
"success": true,
|
||
"errors": [],
|
||
"created": true
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**失败示例**:
|
||
|
||
```json
|
||
{
|
||
"code": 500,
|
||
"msg": "Upsert 记录失败: INVALID_FIELD: No such column 'ExternalId__c' on sobject of type Account",
|
||
"data": null
|
||
}
|
||
```
|
||
|
||
#### 错误码
|
||
|
||
| 错误码 | 说明 |
|
||
|--------|------|
|
||
| 500 | Upsert 记录失败 |
|
||
| INVALID_FIELD | 字段不存在或无效 |
|
||
| INVALID_ID | ID 无效 |
|
||
| ENTITY_IS_DELETED | 记录已删除 |
|
||
| INSUFFICIENT_ACCESS | 权限不足 |
|
||
| DUPLICATE_VALUE | 值重复 |
|
||
|
||
---
|
||
|
||
### 接口 6:合并记录
|
||
|
||
#### 功能描述
|
||
合并三条 Salesforce 记录,将两条记录合并到主记录中。
|
||
|
||
#### 请求方式
|
||
POST
|
||
|
||
#### 请求路径
|
||
`/partner/crud/merge`
|
||
|
||
#### 请求参数
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| objectType | String | 是 | 对象类型(如 "Account"、"Contact") |
|
||
| masterRecordId | String | 是 | 主记录 ID |
|
||
| recordToMergeIds | List<String> | 是 | 待合并记录 ID 列表(最多 2 条) |
|
||
|
||
#### 请求示例
|
||
|
||
```json
|
||
{
|
||
"objectType": "Account",
|
||
"masterRecordId": "001xx000003DHb2AAG",
|
||
"recordToMergeIds": [
|
||
"001xx000003DHb3AAH",
|
||
"001xx000003DHb4AAI"
|
||
]
|
||
}
|
||
```
|
||
|
||
#### 响应参数
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| id | String | 记录 ID |
|
||
| success | Boolean | 是否成功 |
|
||
| errors | List<ErrorVo> | 错误信息列表 |
|
||
|
||
#### 响应示例
|
||
|
||
**成功示例**:
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "合并成功",
|
||
"data": {
|
||
"id": "001xx000003DHb2AAG",
|
||
"success": true,
|
||
"errors": []
|
||
}
|
||
}
|
||
```
|
||
|
||
**失败示例**:
|
||
|
||
```json
|
||
{
|
||
"code": 500,
|
||
"msg": "合并记录失败: INVALID_ID: Invalid ID: 001xx000003DHb2AAG",
|
||
"data": null
|
||
}
|
||
```
|
||
|
||
#### 错误码
|
||
|
||
| 错误码 | 说明 |
|
||
|--------|------|
|
||
| 500 | 合并记录失败 |
|
||
| INVALID_ID | ID 无效 |
|
||
| ENTITY_IS_DELETED | 记录已删除 |
|
||
| INSUFFICIENT_ACCESS | 权限不足 |
|
||
| CANNOT_MERGE_RECORD | 无法合并记录(如记录类型不同) |
|
||
|
||
---
|
||
|
||
## 数据模型
|
||
|
||
### RecordResultVo
|
||
|
||
记录操作结果。
|
||
|
||
| 字段名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| id | String | 记录 ID |
|
||
| success | Boolean | 是否成功 |
|
||
| errors | List<ErrorVo> | 错误信息列表 |
|
||
| created | Boolean | 是否创建(仅 Upsert 操作) |
|
||
|
||
### RetrieveResultVo
|
||
|
||
查询结果。
|
||
|
||
| 字段名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| objectType | String | 对象类型 |
|
||
| id | String | 记录 ID |
|
||
| fields | Map<String, Object> | 字段值 |
|
||
| success | Boolean | 是否成功 |
|
||
| errors | List<ErrorVo> | 错误信息列表 |
|
||
|
||
### ErrorVo
|
||
|
||
错误信息。
|
||
|
||
| 字段名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| statusCode | String | 状态代码 |
|
||
| message | String | 错误消息 |
|
||
| fields | List<String> | 相关字段列表 |
|
||
|
||
## 错误码
|
||
|
||
### 通用错误码
|
||
|
||
| 错误码 | 说明 |
|
||
|--------|------|
|
||
| 200 | 操作成功 |
|
||
| 400 | 请求参数错误 |
|
||
| 401 | 未授权 |
|
||
| 403 | 权限不足 |
|
||
| 404 | 资源不存在 |
|
||
| 500 | 服务器内部错误 |
|
||
|
||
### Salesforce 错误码
|
||
|
||
| 错误码 | 说明 |
|
||
|--------|------|
|
||
| INVALID_FIELD | 字段不存在或无效 |
|
||
| INVALID_ID | ID 无效 |
|
||
| MALFORMED_QUERY | 查询语法错误 |
|
||
| INVALID_OPERATION | 操作无效 |
|
||
| DUPLICATE_VALUE | 值重复 |
|
||
| ENTITY_IS_DELETED | 记录已删除 |
|
||
| ENTITY_IS_LOCKED_FOR_DELETION | 记录被锁定,无法删除 |
|
||
| INSUFFICIENT_ACCESS | 权限不足 |
|
||
| INVALID_CROSS_REFERENCE_KEY | 跨引用键无效 |
|
||
| CANNOT_MERGE_RECORD | 无法合并记录 |
|
||
|
||
## 相关文档
|
||
|
||
- [需求文档](../requirements/sub/2026-01-28-001-02-CRUD操作.md)
|
||
- [设计文档](../design/2026-01-30-002-CRUD操作-设计.md)
|
||
- [决策记录](../decisions/2026-01-30-002-ADR-CRUD操作技术选型.md)
|
||
- [提示词](../prompts/2026-01-30-002-prompt-CRUD操作.md)
|
||
- [变更日志](../changelog/2026-01-30-002-changelog.md)
|
||
- [复盘文档](../retros/2026-01-30-002-retro.md)
|
||
- [会话记录](../sessions/2026-01-28-001-session.md)
|