docs: 为 datai-salesforce-partner 模块创建完整的 API 文档
- 为 6 个 Controller 创建了 28 个接口文档 * PartnerAdvancedController: 5 个接口 * PartnerBatchController: 4 个接口 * PartnerConnectionController: 3 个接口 * PartnerCrudController: 6 个接口 * PartnerDescribeController: 6 个接口 * PartnerQueryController: 4 个接口 - 创建 Partner API 接口文档索引 (index.md) 作为唯一真源 - 每个接口文档包含完整的请求/响应参数、错误码和使用说明 - 文档位置: docs/api-docs/partner-api/
This commit is contained in:
parent
0591aceb52
commit
9ec6e3ae66
@ -0,0 +1,126 @@
|
||||
# API 文档 - 转换线索
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:001
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
将 Salesforce 线索(Lead)转换为账户(Account)、联系人(Contact)和商机(Opportunity)。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:转换线索为账户、联系人和商机
|
||||
- **请求方式**:POST
|
||||
- **请求路径**:`/partner/advanced/convert-lead`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasPermi('partner:advanced:convertLead')")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体(JSON)
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| leadId | String | 是 | 线索 ID | 00Qxx0000001Gw2EAE |
|
||||
| convertedStatus | String | 是 | 转换状态 | Qualified |
|
||||
| accountId | String | 否 | 账户 ID(可选),如果不指定则自动创建新账户 | 001xx0000001Gw2EAA |
|
||||
| contactId | String | 否 | 联系人 ID(可选),如果不指定则自动创建新联系人 | 003xx0000001Gw2EAA |
|
||||
| opportunityId | String | 否 | 商机 ID(可选),如果不指定则自动创建新商机 | 006xx0000001Gw2EAA |
|
||||
| overwriteLeadSource | Boolean | 否 | 是否覆盖线索来源,默认 false | false |
|
||||
| doNotCreateOpportunity | Boolean | 否 | 是否不创建商机,默认 false | false |
|
||||
| sendNotificationEmail | Boolean | 否 | 是否发送通知邮件,默认 false | false |
|
||||
|
||||
### 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"leadId": "00Qxx0000001Gw2EAE",
|
||||
"convertedStatus": "Qualified",
|
||||
"accountId": "001xx0000001Gw2EAA",
|
||||
"contactId": "003xx0000001Gw2EAA",
|
||||
"opportunityId": "006xx0000001Gw2EAA",
|
||||
"overwriteLeadSource": false,
|
||||
"doNotCreateOpportunity": false,
|
||||
"sendNotificationEmail": false
|
||||
}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.accountId | String | 账户 ID |
|
||||
| data.contactId | String | 联系人 ID |
|
||||
| data.opportunityId | String | 商机 ID |
|
||||
| data.leadId | String | 原线索 ID |
|
||||
| data.success | Boolean | 是否成功 |
|
||||
| data.errors | Array | 错误信息列表 |
|
||||
|
||||
### 成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"accountId": "001xx0000001Gw2EAA",
|
||||
"contactId": "003xx0000001Gw2EAA",
|
||||
"opportunityId": "006xx0000001Gw2EAA",
|
||||
"leadId": "00Qxx0000001Gw2EAE",
|
||||
"success": true,
|
||||
"errors": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "线索转换失败",
|
||||
"data": {
|
||||
"accountId": null,
|
||||
"contactId": null,
|
||||
"opportunityId": null,
|
||||
"leadId": "00Qxx0000001Gw2EAE",
|
||||
"success": false,
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "INVALID_ID_FIELD",
|
||||
"message": "Invalid ID field",
|
||||
"fields": ["leadId"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 400 | 请求参数错误 | 检查请求参数格式和必填项 |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 403 | 无权限访问 | 请检查用户权限 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 线索转换后,原线索会被标记为已转换,不能再进行转换
|
||||
2. 如果不指定 accountId、contactId 或 opportunityId,系统会自动创建新记录
|
||||
3. convertedStatus 必须是 Salesforce 中配置的有效转换状态
|
||||
4. 一次只能转换一个线索
|
||||
5. 转换操作是原子性的,要么全部成功,要么全部失败
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,156 @@
|
||||
# API 文档 - 清空回收站
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:002
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
永久删除 Salesforce 回收站中的记录,释放存储空间。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:永久删除回收站中的记录
|
||||
- **请求方式**:POST
|
||||
- **请求路径**:`/partner/advanced/empty-recycle-bin`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasPermi('partner:advanced:emptyRecycleBin')")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体(JSON)
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| ids | Array[String] | 是 | 记录 ID 列表(最多 200 个) | ["001xx0000001Gw2EAA", "001xx0000001Gw3EAA"] |
|
||||
|
||||
### 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"ids": [
|
||||
"001xx0000001Gw2EAA",
|
||||
"001xx0000001Gw3EAA",
|
||||
"001xx0000001Gw4EAA"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.results | Array | 结果列表 |
|
||||
| data.results[].id | String | 记录 ID |
|
||||
| data.results[].success | Boolean | 是否成功 |
|
||||
| data.results[].errors | Array | 错误信息列表 |
|
||||
| data.success | Boolean | 是否全部成功 |
|
||||
| data.errors | Array | 整体错误信息列表 |
|
||||
|
||||
### 成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"results": [
|
||||
{
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"success": true,
|
||||
"errors": null
|
||||
},
|
||||
{
|
||||
"id": "001xx0000001Gw3EAA",
|
||||
"success": true,
|
||||
"errors": null
|
||||
},
|
||||
{
|
||||
"id": "001xx0000001Gw4EAA",
|
||||
"success": true,
|
||||
"errors": null
|
||||
}
|
||||
],
|
||||
"success": true,
|
||||
"errors": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 部分失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"results": [
|
||||
{
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"success": true,
|
||||
"errors": null
|
||||
},
|
||||
{
|
||||
"id": "001xx0000001Gw3EAA",
|
||||
"success": false,
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "INVALID_ID_FIELD",
|
||||
"message": "Invalid ID field",
|
||||
"fields": ["id"]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"success": false,
|
||||
"errors": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "清空回收站失败",
|
||||
"data": {
|
||||
"results": null,
|
||||
"success": false,
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "INVALID_OPERATION",
|
||||
"message": "Cannot delete records that are not in the recycle bin"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 400 | 请求参数错误 | 检查请求参数格式和必填项 |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 403 | 无权限访问 | 请检查用户权限 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 此操作是永久删除,无法恢复,请谨慎操作
|
||||
2. 只能删除回收站中的记录,不能删除未删除的记录
|
||||
3. 单次最多删除 200 条记录
|
||||
4. 某些记录可能因为权限限制或其他原因无法删除
|
||||
5. 删除操作是原子性的,每条记录独立处理
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,104 @@
|
||||
# API 文档 - 流程提交
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:003
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
将 Salesforce 记录提交到审批流程进行审批。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:提交记录到审批流程
|
||||
- **请求方式**:POST
|
||||
- **请求路径**:`/partner/advanced/process-submit-request`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasPermi('partner:advanced:processSubmit')")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体(JSON)
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| objectId | String | 是 | 对象 ID | 001xx0000001Gw2EAA |
|
||||
| comments | String | 否 | 评论(可选) | 请审批此记录 |
|
||||
|
||||
### 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"objectId": "001xx0000001Gw2EAA",
|
||||
"comments": "请审批此记录,所有信息已核对无误"
|
||||
}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.processInstanceId | String | 流程实例 ID |
|
||||
| data.success | Boolean | 是否成功 |
|
||||
| data.errors | Array | 错误信息列表 |
|
||||
|
||||
### 成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"processInstanceId": "04gxx0000001Gw2EAA",
|
||||
"success": true,
|
||||
"errors": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "流程提交失败",
|
||||
"data": {
|
||||
"processInstanceId": null,
|
||||
"success": false,
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "NO_APPLICABLE_PROCESS",
|
||||
"message": "No applicable approval process found for this record"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 400 | 请求参数错误 | 检查请求参数格式和必填项 |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 403 | 无权限访问 | 请检查用户权限 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 记录必须配置了审批流程才能提交
|
||||
2. 用户必须有提交审批的权限
|
||||
3. 一条记录只能同时处于一个审批流程中
|
||||
4. 提交后,记录会被锁定,直到审批完成或被拒绝
|
||||
5. 可以通过 processInstanceId 查询审批进度
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,95 @@
|
||||
# API 文档 - 获取用户信息
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:004
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
获取当前登录用户的详细信息,包括用户 ID、用户名、邮箱、组织信息、配置文件信息等。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:获取当前登录用户的基本信息
|
||||
- **请求方式**:GET
|
||||
- **请求路径**:`/partner/advanced/user-info`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasPermi('partner:advanced:userInfo')")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
无
|
||||
|
||||
## 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.userId | String | 用户 ID |
|
||||
| data.username | String | 用户名 |
|
||||
| data.email | String | 邮箱 |
|
||||
| data.organizationId | String | 组织 ID |
|
||||
| data.organizationName | String | 组织名称 |
|
||||
| data.profileId | String | 配置文件 ID |
|
||||
| data.profileName | String | 配置文件名称 |
|
||||
| data.userFullName | String | 用户全名 |
|
||||
| data.userType | String | 用户类型 |
|
||||
| data.userLanguage | String | 用户语言 |
|
||||
| data.userLocale | String | 用户区域设置 |
|
||||
|
||||
### 成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"userId": "0055w00000AaBCD",
|
||||
"username": "admin@example.com",
|
||||
"email": "admin@example.com",
|
||||
"organizationId": "00D5w00000AaBC",
|
||||
"organizationName": "Example Company",
|
||||
"profileId": "00e5w00000AaBCD",
|
||||
"profileName": "System Administrator",
|
||||
"userFullName": "John Doe",
|
||||
"userType": "Standard",
|
||||
"userLanguage": "en_US",
|
||||
"userLocale": "en_US"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "获取用户信息失败: 未找到有效的会话",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 403 | 无权限访问 | 请检查用户权限 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 此接口返回的是当前登录用户的信息
|
||||
2. 用户信息包含敏感数据,请妥善保管
|
||||
3. 用户类型包括:Standard、PowerCustomer、PowerPartner、CSPLitePortal 等
|
||||
4. 用户语言和区域设置可能影响某些 API 的返回结果
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,91 @@
|
||||
# API 文档 - 获取服务器时间戳
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:005
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
获取 Salesforce 服务器的当前时间戳和时区信息。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:获取 Salesforce 服务器当前时间戳
|
||||
- **请求方式**:GET
|
||||
- **请求路径**:`/partner/advanced/server-timestamp`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasPermi('partner:advanced:serverTimestamp')")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
无
|
||||
|
||||
## 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.timestamp | String | 服务器时间戳(ISO 8601 格式) |
|
||||
| data.timeZone | String | 时区 |
|
||||
| data.success | Boolean | 是否成功 |
|
||||
| data.errors | Array | 错误信息列表 |
|
||||
|
||||
### 成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"timestamp": "2026-02-02T10:30:00.000Z",
|
||||
"timeZone": "Asia/Shanghai",
|
||||
"success": true,
|
||||
"errors": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "获取服务器时间戳失败",
|
||||
"data": {
|
||||
"timestamp": null,
|
||||
"timeZone": null,
|
||||
"success": false,
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "UNKNOWN_EXCEPTION",
|
||||
"message": "Failed to retrieve server timestamp"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 403 | 无权限访问 | 请检查用户权限 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 时间戳格式为 ISO 8601 标准(YYYY-MM-DDTHH:mm:ss.sssZ)
|
||||
2. 时区信息可用于时间转换和显示
|
||||
3. 此接口可用于同步本地时间与服务器时间
|
||||
4. 建议在需要精确时间操作时调用此接口
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,176 @@
|
||||
# API 文档 - 批量创建记录
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:001
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
批量创建 Salesforce 记录,支持最多 1000 条记录,每批最多 200 条,自动分批处理。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:批量创建 Salesforce 记录
|
||||
- **请求方式**:POST
|
||||
- **请求路径**:`/partner/batch/create`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasLogin()")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体(JSON)
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| objectType | String | 是 | 对象类型 | Account |
|
||||
| records | Array[Object] | 是 | 记录列表 | [{"Name": "Test Account"}] |
|
||||
| allOrNone | Boolean | 否 | 是否全部成功或全部失败,默认 false | false |
|
||||
| sleepTime | Long | 否 | 批次间休眠时间(毫秒),默认 100 | 100 |
|
||||
|
||||
### 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"objectType": "Account",
|
||||
"records": [
|
||||
{
|
||||
"Name": "Test Account 1",
|
||||
"Industry": "Technology",
|
||||
"Phone": "555-1234"
|
||||
},
|
||||
{
|
||||
"Name": "Test Account 2",
|
||||
"Industry": "Finance",
|
||||
"Phone": "555-5678"
|
||||
}
|
||||
],
|
||||
"allOrNone": false,
|
||||
"sleepTime": 100
|
||||
}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.success | Boolean | 是否全部成功 |
|
||||
| data.successCount | Integer | 成功数量 |
|
||||
| data.failureCount | Integer | 失败数量 |
|
||||
| data.totalCount | Integer | 总数量 |
|
||||
| data.results | Array | 结果列表 |
|
||||
| data.results[].success | Boolean | 是否成功 |
|
||||
| data.results[].id | String | 记录 ID |
|
||||
| data.results[].errors | Array | 错误列表 |
|
||||
| data.results[].index | Integer | 索引 |
|
||||
| data.errorMessage | String | 错误消息 |
|
||||
|
||||
### 成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "批量创建成功",
|
||||
"data": {
|
||||
"success": true,
|
||||
"successCount": 2,
|
||||
"failureCount": 0,
|
||||
"totalCount": 2,
|
||||
"results": [
|
||||
{
|
||||
"success": true,
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"errors": null,
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"success": true,
|
||||
"id": "001xx0000001Gw3EAA",
|
||||
"errors": null,
|
||||
"index": 1
|
||||
}
|
||||
],
|
||||
"errorMessage": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 部分失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "批量创建部分失败",
|
||||
"data": {
|
||||
"success": false,
|
||||
"successCount": 1,
|
||||
"failureCount": 1,
|
||||
"totalCount": 2,
|
||||
"results": [
|
||||
{
|
||||
"success": true,
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"errors": null,
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"success": false,
|
||||
"id": null,
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "REQUIRED_FIELD_MISSING",
|
||||
"message": "Required fields are missing: [Name]",
|
||||
"fields": ["Name"]
|
||||
}
|
||||
],
|
||||
"index": 1
|
||||
}
|
||||
],
|
||||
"errorMessage": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "批量创建记录失败",
|
||||
"data": {
|
||||
"success": false,
|
||||
"successCount": 0,
|
||||
"failureCount": 0,
|
||||
"totalCount": 0,
|
||||
"results": null,
|
||||
"errorMessage": "Invalid object type: InvalidObject"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 400 | 请求参数错误 | 检查请求参数格式和必填项 |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 单次最多创建 1000 条记录
|
||||
2. 每批最多 200 条记录,超过会自动分批
|
||||
3. allOrNone 为 true 时,任何一条记录失败都会导致整个操作失败
|
||||
4. sleepTime 用于控制批次间的间隔,避免 API 限流
|
||||
5. 记录中的字段名必须与 Salesforce 对象字段名匹配
|
||||
6. 必填字段必须提供,否则创建失败
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,179 @@
|
||||
# API 文档 - 批量更新记录
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:002
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
批量更新 Salesforce 记录,支持最多 1000 条记录,每批最多 200 条,自动分批处理。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:批量更新 Salesforce 记录
|
||||
- **请求方式**:POST
|
||||
- **请求路径**:`/partner/batch/update`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasLogin()")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体(JSON)
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| objectType | String | 是 | 对象类型 | Account |
|
||||
| records | Array[Object] | 是 | 记录列表(每条记录必须包含 id) | [{"id": "001xx...", "Name": "New Name"}] |
|
||||
| allOrNone | Boolean | 否 | 是否全部成功或全部失败,默认 false | false |
|
||||
| sleepTime | Long | 否 | 批次间休眠时间(毫秒),默认 100 | 100 |
|
||||
|
||||
### 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"objectType": "Account",
|
||||
"records": [
|
||||
{
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"Name": "Updated Account 1",
|
||||
"Industry": "Technology",
|
||||
"Phone": "555-9999"
|
||||
},
|
||||
{
|
||||
"id": "001xx0000001Gw3EAA",
|
||||
"Name": "Updated Account 2",
|
||||
"Industry": "Finance",
|
||||
"Phone": "555-8888"
|
||||
}
|
||||
],
|
||||
"allOrNone": false,
|
||||
"sleepTime": 100
|
||||
}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.success | Boolean | 是否全部成功 |
|
||||
| data.successCount | Integer | 成功数量 |
|
||||
| data.failureCount | Integer | 失败数量 |
|
||||
| data.totalCount | Integer | 总数量 |
|
||||
| data.results | Array | 结果列表 |
|
||||
| data.results[].success | Boolean | 是否成功 |
|
||||
| data.results[].id | String | 记录 ID |
|
||||
| data.results[].errors | Array | 错误列表 |
|
||||
| data.results[].index | Integer | 索引 |
|
||||
| data.errorMessage | String | 错误消息 |
|
||||
|
||||
### 成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "批量更新成功",
|
||||
"data": {
|
||||
"success": true,
|
||||
"successCount": 2,
|
||||
"failureCount": 0,
|
||||
"totalCount": 2,
|
||||
"results": [
|
||||
{
|
||||
"success": true,
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"errors": null,
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"success": true,
|
||||
"id": "001xx0000001Gw3EAA",
|
||||
"errors": null,
|
||||
"index": 1
|
||||
}
|
||||
],
|
||||
"errorMessage": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 部分失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "批量更新部分失败",
|
||||
"data": {
|
||||
"success": false,
|
||||
"successCount": 1,
|
||||
"failureCount": 1,
|
||||
"totalCount": 2,
|
||||
"results": [
|
||||
{
|
||||
"success": true,
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"errors": null,
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"success": false,
|
||||
"id": "001xx0000001Gw3EAA",
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "INVALID_FIELD",
|
||||
"message": "Invalid field: InvalidField__c",
|
||||
"fields": ["InvalidField__c"]
|
||||
}
|
||||
],
|
||||
"index": 1
|
||||
}
|
||||
],
|
||||
"errorMessage": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "批量更新记录失败",
|
||||
"data": {
|
||||
"success": false,
|
||||
"successCount": 0,
|
||||
"failureCount": 0,
|
||||
"totalCount": 0,
|
||||
"results": null,
|
||||
"errorMessage": "Invalid object type: InvalidObject"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 400 | 请求参数错误 | 检查请求参数格式和必填项 |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 单次最多更新 1000 条记录
|
||||
2. 每批最多 200 条记录,超过会自动分批
|
||||
3. 每条记录必须包含 id 字段
|
||||
4. allOrNone 为 true 时,任何一条记录失败都会导致整个操作失败
|
||||
5. sleepTime 用于控制批次间的间隔,避免 API 限流
|
||||
6. 只更新提供的字段,未提供的字段保持不变
|
||||
7. 更新操作需要记录的编辑权限
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,182 @@
|
||||
# API 文档 - 批量删除记录
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:003
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
批量删除 Salesforce 记录,支持最多 1000 条记录,每批最多 200 条,自动分批处理。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:批量删除 Salesforce 记录
|
||||
- **请求方式**:POST
|
||||
- **请求路径**:`/partner/batch/delete`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasLogin()")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体(JSON)
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| objectType | String | 是 | 对象类型 | Account |
|
||||
| ids | Array[String] | 是 | 记录 ID 列表 | ["001xx...", "001xx..."] |
|
||||
| allOrNone | Boolean | 否 | 是否全部成功或全部失败,默认 false | false |
|
||||
| sleepTime | Long | 否 | 批次间休眠时间(毫秒),默认 100 | 100 |
|
||||
|
||||
### 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"objectType": "Account",
|
||||
"ids": [
|
||||
"001xx0000001Gw2EAA",
|
||||
"001xx0000001Gw3EAA",
|
||||
"001xx0000001Gw4EAA"
|
||||
],
|
||||
"allOrNone": false,
|
||||
"sleepTime": 100
|
||||
}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.success | Boolean | 是否全部成功 |
|
||||
| data.successCount | Integer | 成功数量 |
|
||||
| data.failureCount | Integer | 失败数量 |
|
||||
| data.totalCount | Integer | 总数量 |
|
||||
| data.results | Array | 结果列表 |
|
||||
| data.results[].success | Boolean | 是否成功 |
|
||||
| data.results[].id | String | 记录 ID |
|
||||
| data.results[].errors | Array | 错误列表 |
|
||||
| data.results[].index | Integer | 索引 |
|
||||
| data.errorMessage | String | 错误消息 |
|
||||
|
||||
### 成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "批量删除成功",
|
||||
"data": {
|
||||
"success": true,
|
||||
"successCount": 3,
|
||||
"failureCount": 0,
|
||||
"totalCount": 3,
|
||||
"results": [
|
||||
{
|
||||
"success": true,
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"errors": null,
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"success": true,
|
||||
"id": "001xx0000001Gw3EAA",
|
||||
"errors": null,
|
||||
"index": 1
|
||||
},
|
||||
{
|
||||
"success": true,
|
||||
"id": "001xx0000001Gw4EAA",
|
||||
"errors": null,
|
||||
"index": 2
|
||||
}
|
||||
],
|
||||
"errorMessage": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 部分失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "批量删除部分失败",
|
||||
"data": {
|
||||
"success": false,
|
||||
"successCount": 2,
|
||||
"failureCount": 1,
|
||||
"totalCount": 3,
|
||||
"results": [
|
||||
{
|
||||
"success": true,
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"errors": null,
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"success": true,
|
||||
"id": "001xx0000001Gw3EAA",
|
||||
"errors": null,
|
||||
"index": 1
|
||||
},
|
||||
{
|
||||
"success": false,
|
||||
"id": "001xx0000001Gw4EAA",
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "ENTITY_IS_DELETED",
|
||||
"message": "The entity is already deleted",
|
||||
"fields": []
|
||||
}
|
||||
],
|
||||
"index": 2
|
||||
}
|
||||
],
|
||||
"errorMessage": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "批量删除记录失败",
|
||||
"data": {
|
||||
"success": false,
|
||||
"successCount": 0,
|
||||
"failureCount": 0,
|
||||
"totalCount": 0,
|
||||
"results": null,
|
||||
"errorMessage": "Invalid object type: InvalidObject"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 400 | 请求参数错误 | 检查请求参数格式和必填项 |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 单次最多删除 1000 条记录
|
||||
2. 每批最多 200 条记录,超过会自动分批
|
||||
3. 删除操作是永久性的,无法恢复
|
||||
4. allOrNone 为 true 时,任何一条记录失败都会导致整个操作失败
|
||||
5. sleepTime 用于控制批次间的间隔,避免 API 限流
|
||||
6. 删除操作需要记录的删除权限
|
||||
7. 某些记录可能因为关联关系或其他限制无法删除
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,229 @@
|
||||
# API 文档 - 批量 Upsert 记录
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:004
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
批量更新或插入 Salesforce 记录,支持最多 1000 条记录,每批最多 200 条,自动分批处理。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:批量更新或插入 Salesforce 记录
|
||||
- **请求方式**:POST
|
||||
- **请求路径**:`/partner/batch/upsert`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasLogin()")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体(JSON)
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| objectType | String | 是 | 对象类型 | Account |
|
||||
| externalIdField | String | 是 | 外部 ID 字段 | ExternalId__c |
|
||||
| records | Array[Object] | 是 | 记录列表(每条记录必须包含外部 ID 字段) | [{"ExternalId__c": "EXT001", "Name": "Test"}] |
|
||||
| allOrNone | Boolean | 否 | 是否全部成功或全部失败,默认 false | false |
|
||||
| sleepTime | Long | 否 | 批次间休眠时间(毫秒),默认 100 | 100 |
|
||||
|
||||
### 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"objectType": "Account",
|
||||
"externalIdField": "ExternalId__c",
|
||||
"records": [
|
||||
{
|
||||
"ExternalId__c": "EXT001",
|
||||
"Name": "Test Account 1",
|
||||
"Industry": "Technology",
|
||||
"Phone": "555-1234"
|
||||
},
|
||||
{
|
||||
"ExternalId__c": "EXT002",
|
||||
"Name": "Test Account 2",
|
||||
"Industry": "Finance",
|
||||
"Phone": "555-5678"
|
||||
}
|
||||
],
|
||||
"allOrNone": false,
|
||||
"sleepTime": 100
|
||||
}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.success | Boolean | 是否全部成功 |
|
||||
| data.successCount | Integer | 成功数量 |
|
||||
| data.failureCount | Integer | 失败数量 |
|
||||
| data.createdCount | Integer | 创建数量 |
|
||||
| data.updatedCount | Integer | 更新数量 |
|
||||
| data.totalCount | Integer | 总数量 |
|
||||
| data.results | Array | 结果列表 |
|
||||
| data.results[].success | Boolean | 是否成功 |
|
||||
| data.results[].id | String | 记录 ID |
|
||||
| data.results[].errors | Array | 错误列表 |
|
||||
| data.results[].created | Boolean | 是否创建 |
|
||||
| data.results[].index | Integer | 索引 |
|
||||
| data.errorMessage | String | 错误消息 |
|
||||
|
||||
### 成功响应示例(全部创建)
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "批量 Upsert 成功",
|
||||
"data": {
|
||||
"success": true,
|
||||
"successCount": 2,
|
||||
"failureCount": 0,
|
||||
"createdCount": 2,
|
||||
"updatedCount": 0,
|
||||
"totalCount": 2,
|
||||
"results": [
|
||||
{
|
||||
"success": true,
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"errors": null,
|
||||
"created": true,
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"success": true,
|
||||
"id": "001xx0000001Gw3EAA",
|
||||
"errors": null,
|
||||
"created": true,
|
||||
"index": 1
|
||||
}
|
||||
],
|
||||
"errorMessage": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 成功响应示例(部分更新)
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "批量 Upsert 成功",
|
||||
"data": {
|
||||
"success": true,
|
||||
"successCount": 2,
|
||||
"failureCount": 0,
|
||||
"createdCount": 1,
|
||||
"updatedCount": 1,
|
||||
"totalCount": 2,
|
||||
"results": [
|
||||
{
|
||||
"success": true,
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"errors": null,
|
||||
"created": true,
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"success": true,
|
||||
"id": "001xx0000001Gw4EAA",
|
||||
"errors": null,
|
||||
"created": false,
|
||||
"index": 1
|
||||
}
|
||||
],
|
||||
"errorMessage": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 部分失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "批量 Upsert 部分失败",
|
||||
"data": {
|
||||
"success": false,
|
||||
"successCount": 1,
|
||||
"failureCount": 1,
|
||||
"createdCount": 1,
|
||||
"updatedCount": 0,
|
||||
"totalCount": 2,
|
||||
"results": [
|
||||
{
|
||||
"success": true,
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"errors": null,
|
||||
"created": true,
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"success": false,
|
||||
"id": null,
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "REQUIRED_FIELD_MISSING",
|
||||
"message": "Required fields are missing: [Name]",
|
||||
"fields": ["Name"]
|
||||
}
|
||||
],
|
||||
"created": null,
|
||||
"index": 1
|
||||
}
|
||||
],
|
||||
"errorMessage": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "批量 Upsert 记录失败",
|
||||
"data": {
|
||||
"success": false,
|
||||
"successCount": 0,
|
||||
"failureCount": 0,
|
||||
"createdCount": 0,
|
||||
"updatedCount": 0,
|
||||
"totalCount": 0,
|
||||
"results": null,
|
||||
"errorMessage": "Invalid external ID field: InvalidField__c"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 400 | 请求参数错误 | 检查请求参数格式和必填项 |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 单次最多 Upsert 1000 条记录
|
||||
2. 每批最多 200 条记录,超过会自动分批
|
||||
3. 每条记录必须包含外部 ID 字段
|
||||
4. 外部 ID 字段必须在 Salesforce 对象中定义为 External ID
|
||||
5. 如果外部 ID 已存在,则更新记录;否则创建新记录
|
||||
6. allOrNone 为 true 时,任何一条记录失败都会导致整个操作失败
|
||||
7. sleepTime 用于控制批次间的间隔,避免 API 限流
|
||||
8. created 字段指示记录是创建还是更新
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,83 @@
|
||||
# API 文档 - 获取会话信息
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:001
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
获取当前用户的 Session ID 和实例 URL,用于后续的 Salesforce API 调用。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:获取当前用户的 Session ID 和实例 URL
|
||||
- **请求方式**:GET
|
||||
- **请求路径**:`/partner/connection/session`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasLogin()")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
无
|
||||
|
||||
## 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.sessionId | String | Session ID,用于后续的 Salesforce API 调用 |
|
||||
| data.instanceUrl | String | 实例 URL,用于后续的 Salesforce API 调用 |
|
||||
|
||||
### 成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"sessionId": "00D5w00000AaBC!AQEAQKx...",
|
||||
"instanceUrl": "https://yourinstance.my.salesforce.com"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "获取会话信息失败: 未找到有效的会话",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. Session ID 是访问 Salesforce API 的关键凭证,请妥善保管
|
||||
2. Session ID 有有效期限制,过期后需要重新获取
|
||||
3. instanceUrl 用于构建完整的 API 请求 URL
|
||||
4. 此接口需要用户已登录到系统
|
||||
5. Session ID 可以用于直接调用 Salesforce API,无需再次认证
|
||||
|
||||
## 使用场景
|
||||
|
||||
- 在需要直接调用 Salesforce API 时获取认证信息
|
||||
- 验证当前会话是否有效
|
||||
- 获取 Salesforce 实例 URL 用于 API 调用
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,102 @@
|
||||
# API 文档 - 获取用户信息
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:002
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
获取当前用户的详细信息,包括用户 ID、用户名、邮箱、组织信息、配置文件信息等。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:获取当前用户的详细信息
|
||||
- **请求方式**:GET
|
||||
- **请求路径**:`/partner/connection/user`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasLogin()")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
无
|
||||
|
||||
## 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.userId | String | 用户 ID |
|
||||
| data.username | String | 用户名 |
|
||||
| data.email | String | 邮箱 |
|
||||
| data.organizationId | String | 组织 ID |
|
||||
| data.organizationName | String | 组织名称 |
|
||||
| data.profileId | String | 配置文件 ID |
|
||||
| data.profileName | String | 配置文件名称 |
|
||||
| data.userFullName | String | 用户全名 |
|
||||
| data.userType | String | 用户类型 |
|
||||
| data.userLanguage | String | 用户语言 |
|
||||
| data.userLocale | String | 用户区域设置 |
|
||||
|
||||
### 成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"userId": "0055w00000AaBCD",
|
||||
"username": "admin@example.com",
|
||||
"email": "admin@example.com",
|
||||
"organizationId": "00D5w00000AaBC",
|
||||
"organizationName": "Example Company",
|
||||
"profileId": "00e5w00000AaBCD",
|
||||
"profileName": "System Administrator",
|
||||
"userFullName": "John Doe",
|
||||
"userType": "Standard",
|
||||
"userLanguage": "en_US",
|
||||
"userLocale": "en_US"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "获取用户信息失败: 未找到有效的会话",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 此接口返回的是当前登录用户的信息
|
||||
2. 用户信息包含敏感数据,请妥善保管
|
||||
3. 用户类型包括:Standard、PowerCustomer、PowerPartner、CSPLitePortal 等
|
||||
4. 用户语言和区域设置可能影响某些 API 的返回结果
|
||||
5. 配置文件信息可用于权限控制和功能访问判断
|
||||
|
||||
## 使用场景
|
||||
|
||||
- 显示当前用户信息
|
||||
- 根据用户权限控制功能访问
|
||||
- 根据用户语言和区域设置本地化显示
|
||||
- 审计和日志记录
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,102 @@
|
||||
# API 文档 - 修改密码
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:003
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
修改当前用户的密码。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:修改当前用户的密码
|
||||
- **请求方式**:POST
|
||||
- **请求路径**:`/partner/connection/password`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasLogin()")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体(JSON)
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| newPassword | String | 是 | 新密码 | NewPassword123! |
|
||||
|
||||
### 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"newPassword": "NewPassword123!"
|
||||
}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据(通常为 null) |
|
||||
|
||||
### 成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "修改密码成功",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "修改密码失败: 密码不符合要求",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 400 | 请求参数错误 | 检查请求参数格式和必填项 |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 新密码必须符合 Salesforce 密码策略要求
|
||||
2. 密码通常要求包含:大小写字母、数字、特殊字符
|
||||
3. 密码长度通常要求至少 8 个字符
|
||||
4. 新密码不能与最近使用过的密码相同
|
||||
5. 修改密码后,当前会话可能失效,需要重新登录
|
||||
6. 建议用户定期修改密码以保证账户安全
|
||||
|
||||
## 密码策略
|
||||
|
||||
Salesforce 默认密码策略通常包括:
|
||||
- 最小长度:8 个字符
|
||||
- 必须包含:大写字母、小写字母、数字、特殊字符
|
||||
- 不能包含用户名
|
||||
- 不能与最近 5 次使用的密码相同
|
||||
- 密码有效期:通常为 90 天
|
||||
|
||||
## 使用场景
|
||||
|
||||
- 用户首次登录后修改默认密码
|
||||
- 用户定期更换密码
|
||||
- 管理员重置密码后用户修改密码
|
||||
- 安全审计要求强制修改密码
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,175 @@
|
||||
# API 文档 - 创建记录
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:001
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
创建新的 Salesforce 记录,支持单个创建和批量创建。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:创建新的 Salesforce 记录
|
||||
- **请求方式**:POST
|
||||
- **请求路径**:`/partner/crud/create`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasLogin()")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体(JSON)- 单个创建
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| objectType | String | 是 | 对象类型 | Account |
|
||||
| fields | Object | 是 | 字段值 | {"Name": "Test Account"} |
|
||||
|
||||
### 请求体(JSON)- 批量创建
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| objectType | String | 是 | 对象类型 | Account |
|
||||
| records | Array[Object] | 是 | 批量创建记录列表 | [{"Name": "Account 1"}, {"Name": "Account 2"}] |
|
||||
|
||||
### 单个创建请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"objectType": "Account",
|
||||
"fields": {
|
||||
"Name": "Test Account",
|
||||
"Industry": "Technology",
|
||||
"BillingCity": "San Francisco",
|
||||
"Phone": "555-1234"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 批量创建请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"objectType": "Account",
|
||||
"records": [
|
||||
{
|
||||
"Name": "Test Account 1",
|
||||
"Industry": "Technology"
|
||||
},
|
||||
{
|
||||
"Name": "Test Account 2",
|
||||
"Industry": "Finance"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
### 单个创建响应
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.id | String | 记录 ID |
|
||||
| data.success | Boolean | 是否成功 |
|
||||
| data.errors | Array | 错误信息列表 |
|
||||
| data.created | Boolean | 是否创建 |
|
||||
|
||||
### 批量创建响应
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Array | 响应数据数组 |
|
||||
| data[].id | String | 记录 ID |
|
||||
| data[].success | Boolean | 是否成功 |
|
||||
| data[].errors | Array | 错误信息列表 |
|
||||
| data[].created | Boolean | 是否创建 |
|
||||
|
||||
### 单个创建成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "创建成功",
|
||||
"data": {
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"success": true,
|
||||
"errors": null,
|
||||
"created": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 批量创建成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "批量创建成功",
|
||||
"data": [
|
||||
{
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"success": true,
|
||||
"errors": null,
|
||||
"created": true
|
||||
},
|
||||
{
|
||||
"id": "001xx0000001Gw3EAA",
|
||||
"success": true,
|
||||
"errors": null,
|
||||
"created": true
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "创建记录失败",
|
||||
"data": {
|
||||
"id": null,
|
||||
"success": false,
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "REQUIRED_FIELD_MISSING",
|
||||
"message": "Required fields are missing: [Name]",
|
||||
"fields": ["Name"]
|
||||
}
|
||||
],
|
||||
"created": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 400 | 请求参数错误 | 检查请求参数格式和必填项 |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 必填字段必须提供,否则创建失败
|
||||
2. 字段名必须与 Salesforce 对象字段名匹配
|
||||
3. 批量创建时,每条记录独立处理,部分失败不影响其他记录
|
||||
4. 某些字段可能有特定的格式要求(如日期、数字等)
|
||||
5. 创建记录需要对象的创建权限
|
||||
6. 系统字段(如 Id、CreatedDate)不能手动设置
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,138 @@
|
||||
# API 文档 - 检索单个记录
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:002
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
根据 ID 检索单个 Salesforce 记录。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:根据 ID 检索单个 Salesforce 记录
|
||||
- **请求方式**:GET
|
||||
- **请求路径**:`/partner/crud/retrieve`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasLogin()")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 查询参数
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| objectType | String | 是 | 对象类型 | Account |
|
||||
| id | String | 是 | 记录 ID | 001xx0000001Gw2EAA |
|
||||
| fieldNames | String | 否 | 字段名称列表(多个字段用逗号分隔) | Name,Industry,Phone |
|
||||
|
||||
### 请求示例
|
||||
|
||||
```
|
||||
GET /partner/crud/retrieve?objectType=Account&id=001xx0000001Gw2EAA&fieldNames=Name,Industry,Phone
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.sObject | Object | 记录对象(包含所有字段或指定字段) |
|
||||
| data.success | Boolean | 是否成功 |
|
||||
| data.errors | Array | 错误信息列表 |
|
||||
|
||||
### 成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "检索成功",
|
||||
"data": {
|
||||
"sObject": {
|
||||
"Id": "001xx0000001Gw2EAA",
|
||||
"Name": "Test Account",
|
||||
"Industry": "Technology",
|
||||
"Phone": "555-1234",
|
||||
"BillingCity": "San Francisco",
|
||||
"BillingState": "CA",
|
||||
"BillingCountry": "USA"
|
||||
},
|
||||
"success": true,
|
||||
"errors": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 指定字段响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "检索成功",
|
||||
"data": {
|
||||
"sObject": {
|
||||
"Id": "001xx0000001Gw2EAA",
|
||||
"Name": "Test Account",
|
||||
"Industry": "Technology",
|
||||
"Phone": "555-1234"
|
||||
},
|
||||
"success": true,
|
||||
"errors": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "检索记录失败",
|
||||
"data": {
|
||||
"sObject": null,
|
||||
"success": false,
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "INVALID_ID_FIELD",
|
||||
"message": "Invalid ID field",
|
||||
"fields": ["id"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 400 | 请求参数错误 | 检查请求参数格式和必填项 |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 404 | 记录不存在 | 检查记录 ID 是否正确 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 记录 ID 必须是有效的 Salesforce 记录 ID
|
||||
2. 如果不指定 fieldNames,则返回所有可访问的字段
|
||||
3. 指定字段可以减少数据传输量,提高性能
|
||||
4. 检索记录需要对象的读取权限
|
||||
5. 某些字段可能因为权限限制无法访问
|
||||
6. 记录可能已被删除或归档
|
||||
|
||||
## 使用场景
|
||||
|
||||
- 根据记录 ID 获取记录详情
|
||||
- 获取记录的特定字段
|
||||
- 验证记录是否存在
|
||||
- 在编辑前获取记录当前值
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,184 @@
|
||||
# API 文档 - 更新记录
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:003
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
更新现有的 Salesforce 记录,支持单个更新和批量更新。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:更新现有的 Salesforce 记录
|
||||
- **请求方式**:PUT
|
||||
- **请求路径**:`/partner/crud/update`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasLogin()")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体(JSON)- 单个更新
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| objectType | String | 是 | 对象类型 | Account |
|
||||
| id | String | 是 | 记录 ID | 001xx0000001Gw2EAA |
|
||||
| fields | Object | 是 | 字段值 | {"BillingCity": "New York"} |
|
||||
|
||||
### 请求体(JSON)- 批量更新
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| objectType | String | 是 | 对象类型 | Account |
|
||||
| records | Array[Object] | 是 | 批量更新记录列表 | [{"id": "001xx...", "fields": {...}}] |
|
||||
|
||||
### 单个更新请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"objectType": "Account",
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"fields": {
|
||||
"BillingCity": "New York",
|
||||
"BillingState": "NY",
|
||||
"Phone": "555-9999"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 批量更新请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"objectType": "Account",
|
||||
"records": [
|
||||
{
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"fields": {
|
||||
"BillingCity": "New York",
|
||||
"Phone": "555-9999"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "001xx0000001Gw3EAA",
|
||||
"fields": {
|
||||
"BillingCity": "Los Angeles",
|
||||
"Phone": "555-8888"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
### 单个更新响应
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.id | String | 记录 ID |
|
||||
| data.success | Boolean | 是否成功 |
|
||||
| data.errors | Array | 错误信息列表 |
|
||||
| data.created | Boolean | 是否创建(更新时为 false) |
|
||||
|
||||
### 批量更新响应
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Array | 响应数据数组 |
|
||||
| data[].id | String | 记录 ID |
|
||||
| data[].success | Boolean | 是否成功 |
|
||||
| data[].errors | Array | 错误信息列表 |
|
||||
| data[].created | Boolean | 是否创建(更新时为 false) |
|
||||
|
||||
### 单个更新成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "更新成功",
|
||||
"data": {
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"success": true,
|
||||
"errors": null,
|
||||
"created": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 批量更新成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "批量更新成功",
|
||||
"data": [
|
||||
{
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"success": true,
|
||||
"errors": null,
|
||||
"created": false
|
||||
},
|
||||
{
|
||||
"id": "001xx0000001Gw3EAA",
|
||||
"success": true,
|
||||
"errors": null,
|
||||
"created": false
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "更新记录失败",
|
||||
"data": {
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"success": false,
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "INVALID_FIELD",
|
||||
"message": "Invalid field: InvalidField__c",
|
||||
"fields": ["InvalidField__c"]
|
||||
}
|
||||
],
|
||||
"created": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 400 | 请求参数错误 | 检查请求参数格式和必填项 |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 404 | 记录不存在 | 检查记录 ID 是否正确 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 必须提供记录 ID,否则更新失败
|
||||
2. 只更新提供的字段,未提供的字段保持不变
|
||||
3. 字段名必须与 Salesforce 对象字段名匹配
|
||||
4. 批量更新时,每条记录独立处理,部分失败不影响其他记录
|
||||
5. 更新记录需要对象的编辑权限
|
||||
6. 系统字段(如 Id、CreatedDate)不能更新
|
||||
7. 某些字段可能有特定的格式要求(如日期、数字等)
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,180 @@
|
||||
# API 文档 - 删除记录
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:004
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
删除 Salesforce 记录,支持单个删除和批量删除。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:删除 Salesforce 记录
|
||||
- **请求方式**:DELETE
|
||||
- **请求路径**:`/partner/crud/delete`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasLogin()")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体(JSON)- 单个删除
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| objectType | String | 是 | 对象类型 | Account |
|
||||
| id | String | 是 | 记录 ID | 001xx0000001Gw2EAA |
|
||||
|
||||
### 请求体(JSON)- 批量删除
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| objectType | String | 是 | 对象类型 | Account |
|
||||
| ids | Array[String] | 是 | 批量删除记录 ID 列表 | ["001xx...", "001xx..."] |
|
||||
|
||||
### 单个删除请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"objectType": "Account",
|
||||
"id": "001xx0000001Gw2EAA"
|
||||
}
|
||||
```
|
||||
|
||||
### 批量删除请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"objectType": "Account",
|
||||
"ids": [
|
||||
"001xx0000001Gw2EAA",
|
||||
"001xx0000001Gw3EAA",
|
||||
"001xx0000001Gw4EAA"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
### 单个删除响应
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.id | String | 记录 ID |
|
||||
| data.success | Boolean | 是否成功 |
|
||||
| data.errors | Array | 错误信息列表 |
|
||||
| data.created | Boolean | 是否创建(删除时为 null) |
|
||||
|
||||
### 批量删除响应
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Array | 响应数据数组 |
|
||||
| data[].id | String | 记录 ID |
|
||||
| data[].success | Boolean | 是否成功 |
|
||||
| data[].errors | Array | 错误信息列表 |
|
||||
| data[].created | Boolean | 是否创建(删除时为 null) |
|
||||
|
||||
### 单个删除成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "删除成功",
|
||||
"data": {
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"success": true,
|
||||
"errors": null,
|
||||
"created": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 批量删除成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "批量删除成功",
|
||||
"data": [
|
||||
{
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"success": true,
|
||||
"errors": null,
|
||||
"created": null
|
||||
},
|
||||
{
|
||||
"id": "001xx0000001Gw3EAA",
|
||||
"success": true,
|
||||
"errors": null,
|
||||
"created": null
|
||||
},
|
||||
{
|
||||
"id": "001xx0000001Gw4EAA",
|
||||
"success": true,
|
||||
"errors": null,
|
||||
"created": null
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "删除记录失败",
|
||||
"data": {
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"success": false,
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "ENTITY_IS_DELETED",
|
||||
"message": "The entity is already deleted",
|
||||
"fields": []
|
||||
}
|
||||
],
|
||||
"created": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 400 | 请求参数错误 | 检查请求参数格式和必填项 |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 404 | 记录不存在 | 检查记录 ID 是否正确 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 删除操作是永久性的,无法恢复
|
||||
2. 删除的记录会进入回收站,可以在一定时间内恢复
|
||||
3. 批量删除时,每条记录独立处理,部分失败不影响其他记录
|
||||
4. 删除记录需要对象的删除权限
|
||||
5. 某些记录可能因为关联关系或其他限制无法删除
|
||||
6. 删除记录可能会触发级联删除(如果配置了)
|
||||
7. 记录删除后,其 ID 可能被重新分配给新记录
|
||||
|
||||
## 使用场景
|
||||
|
||||
- 删除不需要的记录
|
||||
- 批量清理过期数据
|
||||
- 删除测试数据
|
||||
- 数据清理和维护
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,204 @@
|
||||
# API 文档 - 更新或插入记录
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:005
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
根据外部 ID 更新或插入 Salesforce 记录,支持单个 Upsert 和批量 Upsert。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:根据外部 ID 更新或插入 Salesforce 记录
|
||||
- **请求方式**:POST
|
||||
- **请求路径**:`/partner/crud/upsert`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasLogin()")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体(JSON)- 单个 Upsert
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| objectType | String | 是 | 对象类型 | Account |
|
||||
| externalIdField | String | 是 | 外部 ID 字段 | ExternalId__c |
|
||||
| fields | Object | 是 | 字段值(必须包含外部 ID 字段) | {"ExternalId__c": "EXT-001", "Name": "Test"} |
|
||||
|
||||
### 请求体(JSON)- 批量 Upsert
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| objectType | String | 是 | 对象类型 | Account |
|
||||
| externalIdField | String | 是 | 外部 ID 字段 | ExternalId__c |
|
||||
| records | Array[Object] | 是 | 批量 Upsert 记录列表(每条必须包含外部 ID 字段) | [{"ExternalId__c": "EXT-001", "Name": "Account 1"}] |
|
||||
|
||||
### 单个 Upsert 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"objectType": "Account",
|
||||
"externalIdField": "ExternalId__c",
|
||||
"fields": {
|
||||
"ExternalId__c": "EXT-001",
|
||||
"Name": "Test Account",
|
||||
"Industry": "Technology",
|
||||
"BillingCity": "San Francisco"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 批量 Upsert 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"objectType": "Account",
|
||||
"externalIdField": "ExternalId__c",
|
||||
"records": [
|
||||
{
|
||||
"ExternalId__c": "EXT-001",
|
||||
"Name": "Test Account 1",
|
||||
"Industry": "Technology"
|
||||
},
|
||||
{
|
||||
"ExternalId__c": "EXT-002",
|
||||
"Name": "Test Account 2",
|
||||
"Industry": "Finance"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
### 单个 Upsert 响应
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.id | String | 记录 ID |
|
||||
| data.success | Boolean | 是否成功 |
|
||||
| data.errors | Array | 错误信息列表 |
|
||||
| data.created | Boolean | 是否创建(true 为创建,false 为更新) |
|
||||
|
||||
### 批量 Upsert 响应
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Array | 响应数据数组 |
|
||||
| data[].id | String | 记录 ID |
|
||||
| data[].success | Boolean | 是否成功 |
|
||||
| data[].errors | Array | 错误信息列表 |
|
||||
| data[].created | Boolean | 是否创建(true 为创建,false 为更新) |
|
||||
|
||||
### 单个 Upsert 成功响应示例(创建)
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "Upsert 成功",
|
||||
"data": {
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"success": true,
|
||||
"errors": null,
|
||||
"created": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 单个 Upsert 成功响应示例(更新)
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "Upsert 成功",
|
||||
"data": {
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"success": true,
|
||||
"errors": null,
|
||||
"created": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 批量 Upsert 成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "批量 Upsert 成功",
|
||||
"data": [
|
||||
{
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"success": true,
|
||||
"errors": null,
|
||||
"created": true
|
||||
},
|
||||
{
|
||||
"id": "001xx0000001Gw3EAA",
|
||||
"success": true,
|
||||
"errors": null,
|
||||
"created": false
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "Upsert 记录失败",
|
||||
"data": {
|
||||
"id": null,
|
||||
"success": false,
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "INVALID_FIELD",
|
||||
"message": "Invalid external ID field: InvalidField__c",
|
||||
"fields": ["externalIdField"]
|
||||
}
|
||||
],
|
||||
"created": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 400 | 请求参数错误 | 检查请求参数格式和必填项 |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 外部 ID 字段必须在 Salesforce 对象中定义为 External ID
|
||||
2. 每条记录必须包含外部 ID 字段
|
||||
3. 如果外部 ID 已存在,则更新记录;否则创建新记录
|
||||
4. 批量 Upsert 时,每条记录独立处理,部分失败不影响其他记录
|
||||
5. Upsert 操作需要对象的创建和编辑权限
|
||||
6. 系统字段(如 Id、CreatedDate)不能手动设置
|
||||
7. created 字段指示记录是创建还是更新
|
||||
|
||||
## 使用场景
|
||||
|
||||
- 数据同步:根据外部 ID 同步数据到 Salesforce
|
||||
- 数据导入:批量导入数据,自动判断创建或更新
|
||||
- 避免重复:使用外部 ID 避免创建重复记录
|
||||
- 集成系统:与外部系统集成时使用外部 ID
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,141 @@
|
||||
# API 文档 - 合并记录
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:006
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
|
||||
合并多个 Salesforce 记录到一个主记录。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:合并多个 Salesforce 记录
|
||||
- **请求方式**:POST
|
||||
- **请求路径**:`/partner/crud/merge`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasLogin()")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体(JSON)
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| objectType | String | 是 | 对象类型 | Account |
|
||||
| masterRecordId | String | 是 | 主记录 ID(保留的记录) | 001xx0000001Gw2EAA |
|
||||
| recordToMergeIds | Array[String] | 是 | 要合并的记录 ID 列表 | ["001xx...", "001xx..."] |
|
||||
|
||||
### 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"objectType": "Account",
|
||||
"masterRecordId": "001xx0000001Gw2EAA",
|
||||
"recordToMergeIds": [
|
||||
"001xx0000001Gw3EAA",
|
||||
"001xx0000001Gw4EAA"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.id | String | 主记录 ID |
|
||||
| data.success | Boolean | 是否成功 |
|
||||
| data.errors | Array | 错误信息列表 |
|
||||
| data.created | Boolean | 是否创建(合并时为 null) |
|
||||
|
||||
### 成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "合并成功",
|
||||
"data": {
|
||||
"id": "001xx0000001Gw2EAA",
|
||||
"success": true,
|
||||
"errors": null,
|
||||
"created": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "合并记录失败",
|
||||
"data": {
|
||||
"id": null,
|
||||
"success": false,
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "CANNOT_EXECUTE_FLOW_TRIGGER",
|
||||
"message": "The record couldn't be saved because it failed to trigger a flow",
|
||||
"fields": []
|
||||
}
|
||||
],
|
||||
"created": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 400 | 请求参数错误 | 检查请求参数格式和必填项 |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 404 | 记录不存在 | 检查记录 ID 是否正确 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 合并操作是永久性的,无法撤销
|
||||
2. 主记录保留,其他记录被删除
|
||||
3. 合并的记录必须属于同一对象类型
|
||||
4. 某些对象不支持合并操作(如 Opportunity)
|
||||
5. 合并操作需要对象的编辑和删除权限
|
||||
6. 合并可能会触发业务规则和流程
|
||||
7. 合并后的记录会保留主记录的所有字段值
|
||||
8. 子记录(如 Contact)会重新关联到主记录
|
||||
|
||||
## 合并规则
|
||||
|
||||
1. **主记录保留**:主记录的所有字段值保持不变
|
||||
2. **从记录删除**:从记录被删除,无法恢复
|
||||
3. **子记录重新关联**:从记录的子记录会重新关联到主记录
|
||||
4. **共享规则**:合并后的记录继承主记录的共享规则
|
||||
5. **审计字段**:CreatedDate 和 CreatedBy 保持主记录的值
|
||||
|
||||
## 支持的对象
|
||||
|
||||
支持合并的对象包括:
|
||||
- Account
|
||||
- Contact
|
||||
- Lead
|
||||
- Solution
|
||||
- Case
|
||||
|
||||
## 使用场景
|
||||
|
||||
- 数据清理:合并重复的账户或联系人
|
||||
- 客户整合:将同一客户的不同记录合并
|
||||
- 数据质量:消除重复数据,提高数据质量
|
||||
- 业务需求:根据业务规则合并相关记录
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,142 @@
|
||||
# API 文档 - 描述所有可用对象
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:001
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
获取 Salesforce 中所有可用的对象列表。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:获取 Salesforce 中所有可用的对象列表
|
||||
- **请求方式**:GET
|
||||
- **请求路径**:`/partner/describe/global`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasPermi('partner:describe:global')")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
无
|
||||
|
||||
## 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.sObjects | Array | 对象描述列表 |
|
||||
| data.sObjects[].name | String | 对象名称 |
|
||||
| data.sObjects[].label | String | 对象标签 |
|
||||
| data.sObjects[].keyPrefix | String | 对象键前缀 |
|
||||
| data.sObjects[].custom | Boolean | 是否为自定义对象 |
|
||||
| data.sObjects[].createable | Boolean | 是否可创建 |
|
||||
| data.sObjects[].updateable | Boolean | 是否可更新 |
|
||||
| data.sObjects[].deletable | Boolean | 是否可删除 |
|
||||
| data.sObjects[].queryable | Boolean | 是否可查询 |
|
||||
| data.sObjects[].replicateable | Boolean | 是否可复制 |
|
||||
| data.sObjects[].retrieveable | Boolean | 是否可检索 |
|
||||
| data.sObjects[].undeletable | Boolean | 是否可恢复 |
|
||||
| data.sObjects[].triggerable | Boolean | 是否可触发 |
|
||||
| data.maxBatchSize | Integer | 最大批次大小 |
|
||||
| data.success | Boolean | 是否成功 |
|
||||
| data.errors | Array | 错误信息列表 |
|
||||
|
||||
### 成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"sObjects": [
|
||||
{
|
||||
"name": "Account",
|
||||
"label": "Account",
|
||||
"keyPrefix": "001",
|
||||
"custom": false,
|
||||
"createable": true,
|
||||
"updateable": true,
|
||||
"deletable": true,
|
||||
"queryable": true,
|
||||
"replicateable": true,
|
||||
"retrieveable": true,
|
||||
"undeletable": true,
|
||||
"triggerable": true
|
||||
},
|
||||
{
|
||||
"name": "Contact",
|
||||
"label": "Contact",
|
||||
"keyPrefix": "003",
|
||||
"custom": false,
|
||||
"createable": true,
|
||||
"updateable": true,
|
||||
"deletable": true,
|
||||
"queryable": true,
|
||||
"replicateable": true,
|
||||
"retrieveable": true,
|
||||
"undeletable": true,
|
||||
"triggerable": true
|
||||
}
|
||||
],
|
||||
"maxBatchSize": 200,
|
||||
"success": true,
|
||||
"errors": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "描述所有可用对象失败",
|
||||
"data": {
|
||||
"sObjects": null,
|
||||
"maxBatchSize": null,
|
||||
"success": false,
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "UNKNOWN_EXCEPTION",
|
||||
"message": "Failed to retrieve object descriptions"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 403 | 无权限访问 | 请检查用户权限 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 返回的对象列表包含当前用户有权限访问的所有对象
|
||||
2. 自定义对象的 custom 字段为 true
|
||||
3. keyPrefix 可用于识别记录 ID 的对象类型
|
||||
4. maxBatchSize 表示批量操作的最大记录数
|
||||
5. 某些对象可能因为权限限制不可访问
|
||||
6. 对象列表可能很大,建议缓存结果
|
||||
|
||||
## 使用场景
|
||||
|
||||
- 获取所有可用对象列表
|
||||
- 动态生成对象选择器
|
||||
- 验证对象是否存在
|
||||
- 构建元数据浏览器
|
||||
- 权限检查和验证
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,186 @@
|
||||
# API 文档 - 描述特定对象
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:002
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
获取特定对象的详细定义,包含字段列表、子关系、权限信息等。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:获取特定对象的详细定义
|
||||
- **请求方式**:POST
|
||||
- **请求路径**:`/partner/describe/sobject`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasPermi('partner:describe:sobject')")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体(JSON)
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| objectType | String | 是 | 对象类型(如 Account、Contact) | Account |
|
||||
|
||||
### 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"objectType": "Account"
|
||||
}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.sObject | Object | 对象描述 |
|
||||
| data.sObject.name | String | 对象名称 |
|
||||
| data.sObject.label | String | 对象标签 |
|
||||
| data.sObject.keyPrefix | String | 对象键前缀 |
|
||||
| data.sObject.custom | Boolean | 是否为自定义对象 |
|
||||
| data.sObject.createable | Boolean | 是否可创建 |
|
||||
| data.sObject.updateable | Boolean | 是否可更新 |
|
||||
| data.sObject.deletable | Boolean | 是否可删除 |
|
||||
| data.sObject.queryable | Boolean | 是否可查询 |
|
||||
| data.sObject.fields | Array | 字段列表 |
|
||||
| data.sObject.fields[].name | String | 字段名称 |
|
||||
| data.sObject.fields[].label | String | 字段标签 |
|
||||
| data.sObject.fields[].type | String | 字段类型 |
|
||||
| data.sObject.fields[].length | Integer | 字段长度 |
|
||||
| data.sObject.fields[].custom | Boolean | 是否为自定义字段 |
|
||||
| data.sObject.fields[].createable | Boolean | 是否可创建 |
|
||||
| data.sObject.fields[].updateable | Boolean | 是否可更新 |
|
||||
| data.sObject.fields[].nillable | Boolean | 是否可为空 |
|
||||
| data.sObject.fields[].defaultedOnCreate | Boolean | 创建时是否有默认值 |
|
||||
| data.sObject.childRelationships | Array | 子关系列表 |
|
||||
| data.success | Boolean | 是否成功 |
|
||||
| data.errors | Array | 错误信息列表 |
|
||||
|
||||
### 成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"sObject": {
|
||||
"name": "Account",
|
||||
"label": "Account",
|
||||
"keyPrefix": "001",
|
||||
"custom": false,
|
||||
"createable": true,
|
||||
"updateable": true,
|
||||
"deletable": true,
|
||||
"queryable": true,
|
||||
"fields": [
|
||||
{
|
||||
"name": "Id",
|
||||
"label": "Account ID",
|
||||
"type": "id",
|
||||
"length": 18,
|
||||
"custom": false,
|
||||
"createable": false,
|
||||
"updateable": false,
|
||||
"nillable": false,
|
||||
"defaultedOnCreate": false
|
||||
},
|
||||
{
|
||||
"name": "Name",
|
||||
"label": "Account Name",
|
||||
"type": "string",
|
||||
"length": 255,
|
||||
"custom": false,
|
||||
"createable": true,
|
||||
"updateable": true,
|
||||
"nillable": false,
|
||||
"defaultedOnCreate": false
|
||||
},
|
||||
{
|
||||
"name": "Industry",
|
||||
"label": "Industry",
|
||||
"type": "picklist",
|
||||
"length": 40,
|
||||
"custom": false,
|
||||
"createable": true,
|
||||
"updateable": true,
|
||||
"nillable": true,
|
||||
"defaultedOnCreate": false
|
||||
}
|
||||
],
|
||||
"childRelationships": [
|
||||
{
|
||||
"relationshipName": "Contacts",
|
||||
"childSObject": "Contact",
|
||||
"field": "AccountId"
|
||||
},
|
||||
{
|
||||
"relationshipName": "Opportunities",
|
||||
"childSObject": "Opportunity",
|
||||
"field": "AccountId"
|
||||
}
|
||||
]
|
||||
},
|
||||
"success": true,
|
||||
"errors": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "描述特定对象失败",
|
||||
"data": {
|
||||
"sObject": null,
|
||||
"success": false,
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "INVALID_TYPE",
|
||||
"message": "Invalid object type: InvalidObject"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 400 | 请求参数错误 | 检查请求参数格式和必填项 |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 403 | 无权限访问 | 请检查用户权限 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 对象名称区分大小写
|
||||
2. 返回的字段列表包含当前用户有权限访问的所有字段
|
||||
3. 字段类型包括:string、int、double、boolean、date、datetime、picklist 等
|
||||
4. 子关系列表可用于查询相关对象
|
||||
5. 某些字段可能因为权限限制不可访问
|
||||
6. 对象描述可能很大,建议缓存结果
|
||||
|
||||
## 使用场景
|
||||
|
||||
- 获取对象的完整元数据
|
||||
- 动态生成表单
|
||||
- 验证字段是否存在
|
||||
- 构建查询构建器
|
||||
- 权限检查和验证
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,203 @@
|
||||
# API 文档 - 描述多个对象
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:003
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
批量获取多个对象的详细定义。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:批量获取多个对象的详细定义
|
||||
- **请求方式**:POST
|
||||
- **请求路径**:`/partner/describe/sobjects`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasPermi('partner:describe:sobjects')")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体(JSON)
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| objectTypes | Array[String] | 是 | 对象类型列表 | ["Account", "Contact", "Opportunity"] |
|
||||
|
||||
### 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"objectTypes": [
|
||||
"Account",
|
||||
"Contact",
|
||||
"Opportunity"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Array | 响应数据数组 |
|
||||
| data[].sObject | Object | 对象描述 |
|
||||
| data[].sObject.name | String | 对象名称 |
|
||||
| data[].sObject.label | String | 对象标签 |
|
||||
| data[].sObject.keyPrefix | String | 对象键前缀 |
|
||||
| data[].sObject.custom | Boolean | 是否为自定义对象 |
|
||||
| data[].sObject.createable | Boolean | 是否可创建 |
|
||||
| data[].sObject.updateable | Boolean | 是否可更新 |
|
||||
| data[].sObject.deletable | Boolean | 是否可删除 |
|
||||
| data[].sObject.queryable | Boolean | 是否可查询 |
|
||||
| data[].sObject.fields | Array | 字段列表 |
|
||||
| data[].sObject.fields[].name | String | 字段名称 |
|
||||
| data[].sObject.fields[].label | String | 字段标签 |
|
||||
| data[].sObject.fields[].type | String | 字段类型 |
|
||||
| data[].sObject.fields[].length | Integer | 字段长度 |
|
||||
| data[].sObject.fields[].custom | Boolean | 是否为自定义字段 |
|
||||
| data[].sObject.fields[].createable | Boolean | 是否可创建 |
|
||||
| data[].sObject.fields[].updateable | Boolean | 是否可更新 |
|
||||
| data[].sObject.fields[].nillable | Boolean | 是否可为空 |
|
||||
| data[].success | Boolean | 是否成功 |
|
||||
| data[].errors | Array | 错误信息列表 |
|
||||
|
||||
### 成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": [
|
||||
{
|
||||
"sObject": {
|
||||
"name": "Account",
|
||||
"label": "Account",
|
||||
"keyPrefix": "001",
|
||||
"custom": false,
|
||||
"createable": true,
|
||||
"updateable": true,
|
||||
"deletable": true,
|
||||
"queryable": true,
|
||||
"fields": [
|
||||
{
|
||||
"name": "Id",
|
||||
"label": "Account ID",
|
||||
"type": "id",
|
||||
"length": 18,
|
||||
"custom": false,
|
||||
"createable": false,
|
||||
"updateable": false,
|
||||
"nillable": false
|
||||
},
|
||||
{
|
||||
"name": "Name",
|
||||
"label": "Account Name",
|
||||
"type": "string",
|
||||
"length": 255,
|
||||
"custom": false,
|
||||
"createable": true,
|
||||
"updateable": true,
|
||||
"nillable": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"success": true,
|
||||
"errors": null
|
||||
},
|
||||
{
|
||||
"sObject": {
|
||||
"name": "Contact",
|
||||
"label": "Contact",
|
||||
"keyPrefix": "003",
|
||||
"custom": false,
|
||||
"createable": true,
|
||||
"updateable": true,
|
||||
"deletable": true,
|
||||
"queryable": true,
|
||||
"fields": [
|
||||
{
|
||||
"name": "Id",
|
||||
"label": "Contact ID",
|
||||
"type": "id",
|
||||
"length": 18,
|
||||
"custom": false,
|
||||
"createable": false,
|
||||
"updateable": false,
|
||||
"nillable": false
|
||||
},
|
||||
{
|
||||
"name": "FirstName",
|
||||
"label": "First Name",
|
||||
"type": "string",
|
||||
"length": 40,
|
||||
"custom": false,
|
||||
"createable": true,
|
||||
"updateable": true,
|
||||
"nillable": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"success": true,
|
||||
"errors": null
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "描述多个对象失败",
|
||||
"data": [
|
||||
{
|
||||
"sObject": null,
|
||||
"success": false,
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "INVALID_TYPE",
|
||||
"message": "Invalid object type: InvalidObject"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 400 | 请求参数错误 | 检查请求参数格式和必填项 |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 403 | 无权限访问 | 请检查用户权限 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 对象名称区分大小写
|
||||
2. 每个对象独立处理,部分失败不影响其他对象
|
||||
3. 返回的字段列表包含当前用户有权限访问的所有字段
|
||||
4. 批量描述比单个描述更高效,减少 API 调用次数
|
||||
5. 某些对象可能因为权限限制不可访问
|
||||
6. 建议缓存结果以提高性能
|
||||
|
||||
## 使用场景
|
||||
|
||||
- 批量获取多个对象的元数据
|
||||
- 动态生成多个对象的表单
|
||||
- 验证多个对象是否存在
|
||||
- 构建多对象查询构建器
|
||||
- 权限检查和验证
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,168 @@
|
||||
# API 文档 - 描述对象布局
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:004
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
获取对象的页面布局信息。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:获取对象的页面布局信息
|
||||
- **请求方式**:POST
|
||||
- **请求路径**:`/partner/describe/layout`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasPermi('partner:describe:layout')")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体(JSON)
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| objectType | String | 是 | 对象类型(如 Account、Contact) | Account |
|
||||
| recordTypeId | String | 否 | 记录类型 ID(可选,未指定则返回默认布局) | 012xx0000000001AAA |
|
||||
|
||||
### 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"objectType": "Account",
|
||||
"recordTypeId": "012xx0000000001AAA"
|
||||
}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.layouts | Array | 布局描述列表 |
|
||||
| data.layouts[].id | String | 布局 ID |
|
||||
| data.layouts[].name | String | 布局名称 |
|
||||
| data.layouts[].layoutType | String | 布局类型(如:Compact、Full) |
|
||||
| data.layouts[].recordTypeId | String | 记录类型 ID |
|
||||
| data.layouts[].sections | Array | 布局部分列表 |
|
||||
| data.layouts[].sections[].heading | String | 部分标题 |
|
||||
| data.layouts[].sections[].columns | Integer | 列数 |
|
||||
| data.layouts[].sections[].rows | Array | 行列表 |
|
||||
| data.layouts[].sections[].rows[].layoutItems | Array | 布局项列表 |
|
||||
| data.layouts[].sections[].rows[].layoutItems[].field | String | 字段名称 |
|
||||
| data.layouts[].sections[].rows[].layoutItems[].label | String | 字段标签 |
|
||||
| data.layouts[].sections[].rows[].layoutItems[].required | Boolean | 是否必填 |
|
||||
| data.success | Boolean | 是否成功 |
|
||||
| data.errors | Array | 错误信息列表 |
|
||||
|
||||
### 成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"layouts": [
|
||||
{
|
||||
"id": "00hxx0000000001AAA",
|
||||
"name": "Account Layout",
|
||||
"layoutType": "Full",
|
||||
"recordTypeId": "012xx0000000001AAA",
|
||||
"sections": [
|
||||
{
|
||||
"heading": "Account Information",
|
||||
"columns": 2,
|
||||
"rows": [
|
||||
{
|
||||
"layoutItems": [
|
||||
{
|
||||
"field": "Name",
|
||||
"label": "Account Name",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"field": "Type",
|
||||
"label": "Account Type",
|
||||
"required": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"layoutItems": [
|
||||
{
|
||||
"field": "Industry",
|
||||
"label": "Industry",
|
||||
"required": false
|
||||
},
|
||||
{
|
||||
"field": "Phone",
|
||||
"label": "Phone",
|
||||
"required": false
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"success": true,
|
||||
"errors": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "描述对象布局失败",
|
||||
"data": {
|
||||
"layouts": null,
|
||||
"success": false,
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "INVALID_TYPE",
|
||||
"message": "Invalid object type: InvalidObject"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 400 | 请求参数错误 | 检查请求参数格式和必填项 |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 403 | 无权限访问 | 请检查用户权限 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 对象名称区分大小写
|
||||
2. 如果不指定 recordTypeId,则返回默认布局
|
||||
3. 记录类型 ID 必须是有效的记录类型 ID
|
||||
4. 布局信息包含字段顺序、必填状态等
|
||||
5. 某些对象可能没有布局信息
|
||||
6. 布局信息可能因为权限限制不可访问
|
||||
|
||||
## 使用场景
|
||||
|
||||
- 动态生成表单
|
||||
- 获取字段的显示顺序
|
||||
- 验证必填字段
|
||||
- 构建自定义页面
|
||||
- 权限检查和验证
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,147 @@
|
||||
# API 文档 - 描述标签页
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:005
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
获取 Salesforce 中的所有标签页信息。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:获取 Salesforce 中的所有标签页信息
|
||||
- **请求方式**:GET
|
||||
- **请求路径**:`/partner/describe/tabs`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasPermi('partner:describe:tabs')")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
无
|
||||
|
||||
## 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.tabs | Array | 标签页描述列表 |
|
||||
| data.tabs[].id | String | 标签页 ID |
|
||||
| data.tabs[].label | String | 标签页标签 |
|
||||
| data.tabs[].name | String | 标签页名称 |
|
||||
| data.tabs[].sobjectName | String | 关联的对象名称 |
|
||||
| data.tabs[].url | String | 标签页 URL |
|
||||
| data.tabs[].iconUrl | String | 图标 URL |
|
||||
| data.tabs[].custom | Boolean | 是否为自定义标签页 |
|
||||
| data.tabs[].visible | Boolean | 是否可见 |
|
||||
| data.success | Boolean | 是否成功 |
|
||||
| data.errors | Array | 错误信息列表 |
|
||||
|
||||
### 成功响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"tabs": [
|
||||
{
|
||||
"id": "01rxx0000000001AAA",
|
||||
"label": "Home",
|
||||
"name": "home",
|
||||
"sobjectName": null,
|
||||
"url": "/home/home.jsp",
|
||||
"iconUrl": "/img/icon/home16.png",
|
||||
"custom": false,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "01rxx0000000002AAA",
|
||||
"label": "Accounts",
|
||||
"name": "Account",
|
||||
"sobjectName": "Account",
|
||||
"url": "/001",
|
||||
"iconUrl": "/img/icon/account16.png",
|
||||
"custom": false,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "01rxx0000000003AAA",
|
||||
"label": "Contacts",
|
||||
"name": "Contact",
|
||||
"sobjectName": "Contact",
|
||||
"url": "/003",
|
||||
"iconUrl": "/img/icon/contact16.png",
|
||||
"custom": false,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "01rxx0000000004AAA",
|
||||
"label": "Opportunities",
|
||||
"name": "Opportunity",
|
||||
"sobjectName": "Opportunity",
|
||||
"url": "/006",
|
||||
"iconUrl": "/img/icon/opportunity16.png",
|
||||
"custom": false,
|
||||
"visible": true
|
||||
}
|
||||
],
|
||||
"success": true,
|
||||
"errors": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "描述标签页失败",
|
||||
"data": {
|
||||
"tabs": null,
|
||||
"success": false,
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "UNKNOWN_EXCEPTION",
|
||||
"message": "Failed to retrieve tab descriptions"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 403 | 无权限访问 | 请检查用户权限 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 返回的标签页列表包含当前用户有权限访问的所有标签页
|
||||
2. 自定义标签页的 custom 字段为 true
|
||||
3. visible 字段表示标签页是否对用户可见
|
||||
4. sobjectName 为 null 表示标签页不是对象标签页
|
||||
5. 某些标签页可能因为权限限制不可访问
|
||||
6. 标签页列表可能很大,建议缓存结果
|
||||
|
||||
## 使用场景
|
||||
|
||||
- 获取所有可用标签页
|
||||
- 动态生成导航菜单
|
||||
- 验证标签页是否存在
|
||||
- 构建自定义导航
|
||||
- 权限检查和验证
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,209 @@
|
||||
# API 文档 - 描述快速操作
|
||||
|
||||
## 元数据
|
||||
- 需求编号:001
|
||||
- 子需求编号:001-01
|
||||
- 接口编号:006
|
||||
- 创建时间:2026-02-02
|
||||
- 创建人:AI Assistant
|
||||
- 状态:已完成
|
||||
|
||||
## 接口概述
|
||||
获取对象的快速操作定义。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **功能描述**:获取对象的快速操作定义
|
||||
- **请求方式**:POST
|
||||
- **请求路径**:`/partner/describe/quick-actions`
|
||||
- **权限要求**:`@PreAuthorize("@ss.hasPermi('partner:describe:quickActions')")`
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体(JSON)
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| objectType | String | 否 | 对象类型(可选,如 Account、Contact) | Account |
|
||||
|
||||
### 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"objectType": "Account"
|
||||
}
|
||||
```
|
||||
|
||||
### 请求示例(不指定对象类型)
|
||||
|
||||
```json
|
||||
{}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 状态码(200 成功,其他失败) |
|
||||
| msg | String | 提示信息 |
|
||||
| data | Object | 响应数据 |
|
||||
| data.quickActions | Array | 快速操作描述列表 |
|
||||
| data.quickActions[].id | String | 快速操作 ID |
|
||||
| data.quickActions[].name | String | 快速操作名称 |
|
||||
| data.quickActions[].label | String | 快速操作标签 |
|
||||
| data.quickActions[].type | String | 快速操作类型(如:Create、Update、Custom) |
|
||||
| data.quickActions[].actionType | String | 操作类型(如:Create、Update、Delete) |
|
||||
| data.quickActions[].targetObject | String | 目标对象 |
|
||||
| data.quickActions[].targetParentField | String | 目标父字段 |
|
||||
| data.quickActions[].url | String | 快速操作 URL |
|
||||
| data.quickActions[].iconUrl | String | 图标 URL |
|
||||
| data.quickActions[].custom | Boolean | 是否为自定义快速操作 |
|
||||
| data.quickActions[].standard | Boolean | 是否为标准快速操作 |
|
||||
| data.success | Boolean | 是否成功 |
|
||||
| data.errors | Array | 错误信息列表 |
|
||||
|
||||
### 成功响应示例(指定对象类型)
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"quickActions": [
|
||||
{
|
||||
"id": "01ixx0000000001AAA",
|
||||
"name": "NewAccount",
|
||||
"label": "New Account",
|
||||
"type": "Create",
|
||||
"actionType": "Create",
|
||||
"targetObject": "Account",
|
||||
"targetParentField": null,
|
||||
"url": "/001/e",
|
||||
"iconUrl": "/img/icon/account16.png",
|
||||
"custom": false,
|
||||
"standard": true
|
||||
},
|
||||
{
|
||||
"id": "01ixx0000000002AAA",
|
||||
"name": "LogACall",
|
||||
"label": "Log a Call",
|
||||
"type": "Update",
|
||||
"actionType": "Update",
|
||||
"targetObject": "Task",
|
||||
"targetParentField": "WhatId",
|
||||
"url": "/00T/e",
|
||||
"iconUrl": "/img/icon/task16.png",
|
||||
"custom": false,
|
||||
"standard": true
|
||||
},
|
||||
{
|
||||
"id": "01ixx0000000003AAA",
|
||||
"name": "SendEmail",
|
||||
"label": "Send Email",
|
||||
"type": "Custom",
|
||||
"actionType": "Custom",
|
||||
"targetObject": null,
|
||||
"targetParentField": null,
|
||||
"url": "/_ui/core/email/author/EmailAuthor?p2_lkid={!Account.Id}",
|
||||
"iconUrl": "/img/icon/email16.png",
|
||||
"custom": true,
|
||||
"standard": false
|
||||
}
|
||||
],
|
||||
"success": true,
|
||||
"errors": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 成功响应示例(不指定对象类型)
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"quickActions": [
|
||||
{
|
||||
"id": "01ixx0000000001AAA",
|
||||
"name": "NewAccount",
|
||||
"label": "New Account",
|
||||
"type": "Create",
|
||||
"actionType": "Create",
|
||||
"targetObject": "Account",
|
||||
"targetParentField": null,
|
||||
"url": "/001/e",
|
||||
"iconUrl": "/img/icon/account16.png",
|
||||
"custom": false,
|
||||
"standard": true
|
||||
},
|
||||
{
|
||||
"id": "01ixx0000000004AAA",
|
||||
"name": "NewContact",
|
||||
"label": "New Contact",
|
||||
"type": "Create",
|
||||
"actionType": "Create",
|
||||
"targetObject": "Contact",
|
||||
"targetParentField": null,
|
||||
"url": "/003/e",
|
||||
"iconUrl": "/img/icon/contact16.png",
|
||||
"custom": false,
|
||||
"standard": true
|
||||
}
|
||||
],
|
||||
"success": true,
|
||||
"errors": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 失败响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "描述快速操作失败",
|
||||
"data": {
|
||||
"quickActions": null,
|
||||
"success": false,
|
||||
"errors": [
|
||||
{
|
||||
"statusCode": "INVALID_TYPE",
|
||||
"message": "Invalid object type: InvalidObject"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 200 | 操作成功 | - |
|
||||
| 400 | 请求参数错误 | 检查请求参数格式和必填项 |
|
||||
| 401 | 未登录或登录已过期 | 请重新登录 |
|
||||
| 403 | 无权限访问 | 请检查用户权限 |
|
||||
| 500 | 服务器内部错误 | 请联系管理员或稍后重试 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 如果不指定 objectType,则返回所有快速操作
|
||||
2. 指定 objectType 则只返回该对象的快速操作
|
||||
3. 快速操作类型包括:Create、Update、Delete、Custom 等
|
||||
4. 自定义快速操作的 custom 字段为 true
|
||||
5. 某些快速操作可能因为权限限制不可访问
|
||||
6. 快速操作列表可能很大,建议缓存结果
|
||||
|
||||
## 使用场景
|
||||
|
||||
- 获取对象的快速操作
|
||||
- 动态生成快速操作菜单
|
||||
- 验证快速操作是否存在
|
||||
- 构建自定义快速操作
|
||||
- 权限检查和验证
|
||||
|
||||
## 相关文档
|
||||
- [需求文档](../../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||||
- [设计文档](../../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||||
- [决策记录](../../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||||
@ -0,0 +1,174 @@
|
||||
# 执行 SOQL 查询
|
||||
|
||||
## 接口概述
|
||||
|
||||
执行标准的 SOQL (Salesforce Object Query Language) 查询语句,从 Salesforce 获取数据。
|
||||
|
||||
## 基本信息
|
||||
|
||||
| 属性 | 值 |
|
||||
|------|-----|
|
||||
| 接口名称 | 执行 SOQL 查询 |
|
||||
| 接口路径 | `/partner/query` |
|
||||
| 请求方法 | `POST` |
|
||||
| Content-Type | `application/json` |
|
||||
| 需要认证 | 是 |
|
||||
| 所属模块 | datai-salesforce-partner |
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体 (Request Body)
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| soql | String | 是 | SOQL 查询语句 | `SELECT Id, Name FROM Account LIMIT 10` |
|
||||
| batchSize | Integer | 否 | 批次大小,默认 500,最大 2000 | `500` |
|
||||
|
||||
### 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"soql": "SELECT Id, Name, BillingCity, Industry FROM Account WHERE Industry = 'Technology' LIMIT 10",
|
||||
"batchSize": 500
|
||||
}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
### 响应体 (Response Body)
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 响应状态码,200 表示成功 |
|
||||
| msg | String | 响应消息 |
|
||||
| data | Object | 响应数据 |
|
||||
|
||||
### data 对象结构
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| records | Array | 记录列表,每个记录是一个键值对对象 |
|
||||
| queryLocator | String | 查询定位器,用于 QueryMore 获取下一页 |
|
||||
| done | Boolean | 是否完成(true 表示没有更多数据) |
|
||||
| size | Integer | 记录数量 |
|
||||
| success | Boolean | 是否成功 |
|
||||
| errors | Array | 错误信息列表 |
|
||||
|
||||
### 响应示例
|
||||
|
||||
**成功响应**
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"records": [
|
||||
{
|
||||
"Id": "001xx000003DHb2AAG",
|
||||
"Name": "Acme Corporation",
|
||||
"BillingCity": "San Francisco",
|
||||
"Industry": "Technology"
|
||||
},
|
||||
{
|
||||
"Id": "001xx000003DHb3AAH",
|
||||
"Name": "Tech Solutions Inc",
|
||||
"BillingCity": "New York",
|
||||
"Industry": "Technology"
|
||||
}
|
||||
],
|
||||
"queryLocator": "01gD0000002J6ozIAC-2000",
|
||||
"done": false,
|
||||
"size": 2,
|
||||
"success": true,
|
||||
"errors": []
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**错误响应**
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "SOQL 查询失败: Invalid query",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 400 | 请求参数错误 | 检查 soql 语句格式是否正确 |
|
||||
| 401 | 认证失败 | 检查 Salesforce 认证信息是否有效 |
|
||||
| 500 | 服务器内部错误 | 检查 SOQL 语句语法是否正确 |
|
||||
|
||||
## 使用说明
|
||||
|
||||
### SOQL 语法示例
|
||||
|
||||
1. **基本查询**
|
||||
|
||||
```json
|
||||
{
|
||||
"soql": "SELECT Id, Name FROM Account"
|
||||
}
|
||||
```
|
||||
|
||||
2. **带条件查询**
|
||||
|
||||
```json
|
||||
{
|
||||
"soql": "SELECT Id, Name, BillingCity FROM Account WHERE Industry = 'Technology' AND BillingCity = 'San Francisco'"
|
||||
}
|
||||
```
|
||||
|
||||
3. **排序和限制**
|
||||
|
||||
```json
|
||||
{
|
||||
"soql": "SELECT Id, Name, CreatedDate FROM Account ORDER BY CreatedDate DESC LIMIT 10"
|
||||
}
|
||||
```
|
||||
|
||||
4. **关联查询**
|
||||
|
||||
```json
|
||||
{
|
||||
"soql": "SELECT Id, Name, Account.Name, Account.Industry FROM Contact WHERE Account.Industry = 'Technology'"
|
||||
}
|
||||
```
|
||||
|
||||
5. **聚合查询**
|
||||
|
||||
```json
|
||||
{
|
||||
"soql": "SELECT Industry, COUNT(Id) FROM Account GROUP BY Industry"
|
||||
}
|
||||
```
|
||||
|
||||
### 分页处理
|
||||
|
||||
当查询结果超过批次大小时,使用返回的 `queryLocator` 调用 `queryMore` 接口获取下一页数据。
|
||||
|
||||
### 注意事项
|
||||
|
||||
1. SOQL 语句必须以 `SELECT` 开头
|
||||
2. 批次大小范围:1-2000,默认 500
|
||||
3. 查询结果最大记录数限制为 50,000
|
||||
4. 复杂查询可能超时,建议添加适当的过滤条件和 LIMIT
|
||||
5. 字段名区分大小写
|
||||
6. 字符串值需要用单引号包裹
|
||||
|
||||
## 相关接口
|
||||
|
||||
- [获取查询结果的下一页](./003-query-more.md)
|
||||
- [查询所有记录(包括已删除的)](./002-query-all.md)
|
||||
- [执行 SOSL 搜索](./004-search.md)
|
||||
|
||||
## 更新日志
|
||||
|
||||
| 版本 | 日期 | 更新内容 | 作者 |
|
||||
|------|------|----------|------|
|
||||
| 1.0.0 | 2026-01-30 | 初始版本 | AI Assistant |
|
||||
@ -0,0 +1,171 @@
|
||||
# 查询所有记录(包括已删除的)
|
||||
|
||||
## 接口概述
|
||||
|
||||
查询所有记录,包括已删除的记录(回收站中的记录)。使用 QueryAll 可以检索已删除但未从回收站中永久删除的记录。
|
||||
|
||||
## 基本信息
|
||||
|
||||
| 属性 | 值 |
|
||||
|------|-----|
|
||||
| 接口名称 | 查询所有记录 |
|
||||
| 接口路径 | `/partner/queryAll` |
|
||||
| 请求方法 | `POST` |
|
||||
| Content-Type | `application/json` |
|
||||
| 需要认证 | 是 |
|
||||
| 所属模块 | datai-salesforce-partner |
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体 (Request Body)
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| soql | String | 是 | SOQL 查询语句 | `SELECT Id, Name FROM Account LIMIT 10` |
|
||||
| batchSize | Integer | 否 | 批次大小,默认 500,最大 2000 | `500` |
|
||||
|
||||
### 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"soql": "SELECT Id, Name, IsDeleted FROM Account WHERE IsDeleted = true LIMIT 10",
|
||||
"batchSize": 500
|
||||
}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
### 响应体 (Response Body)
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 响应状态码,200 表示成功 |
|
||||
| msg | String | 响应消息 |
|
||||
| data | Object | 响应数据 |
|
||||
|
||||
### data 对象结构
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| records | Array | 记录列表,每个记录是一个键值对对象 |
|
||||
| queryLocator | String | 查询定位器,用于 QueryMore 获取下一页 |
|
||||
| done | Boolean | 是否完成(true 表示没有更多数据) |
|
||||
| size | Integer | 记录数量 |
|
||||
| success | Boolean | 是否成功 |
|
||||
| errors | Array | 错误信息列表 |
|
||||
|
||||
### 响应示例
|
||||
|
||||
**成功响应**
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"records": [
|
||||
{
|
||||
"Id": "001xx000003DHb2AAG",
|
||||
"Name": "Acme Corporation",
|
||||
"IsDeleted": true
|
||||
},
|
||||
{
|
||||
"Id": "001xx000003DHb3AAH",
|
||||
"Name": "Tech Solutions Inc",
|
||||
"IsDeleted": true
|
||||
}
|
||||
],
|
||||
"queryLocator": "01gD0000002J6ozIAC-2000",
|
||||
"done": false,
|
||||
"size": 2,
|
||||
"success": true,
|
||||
"errors": []
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**错误响应**
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "QueryAll 查询失败: Invalid query",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 400 | 请求参数错误 | 检查 soql 语句格式是否正确 |
|
||||
| 401 | 认证失败 | 检查 Salesforce 认证信息是否有效 |
|
||||
| 500 | 服务器内部错误 | 检查 SOQL 语句语法是否正确 |
|
||||
|
||||
## 使用说明
|
||||
|
||||
### QueryAll 与 Query 的区别
|
||||
|
||||
| 特性 | Query | QueryAll |
|
||||
|------|-------|----------|
|
||||
| 查询范围 | 仅查询未删除的记录 | 查询所有记录,包括已删除的 |
|
||||
| 性能 | 更快 | 稍慢 |
|
||||
| 使用场景 | 正常业务查询 | 数据恢复、审计、回收站管理 |
|
||||
|
||||
### 常用查询场景
|
||||
|
||||
1. **查询已删除的账户**
|
||||
|
||||
```json
|
||||
{
|
||||
"soql": "SELECT Id, Name, CreatedDate, LastModifiedDate FROM Account WHERE IsDeleted = true ORDER BY LastModifiedDate DESC LIMIT 10"
|
||||
}
|
||||
```
|
||||
|
||||
2. **查询特定时间范围内删除的记录**
|
||||
|
||||
```json
|
||||
{
|
||||
"soql": "SELECT Id, Name, DeletedDate FROM Account WHERE IsDeleted = true AND DeletedDate >= 2026-01-01T00:00:00Z"
|
||||
}
|
||||
```
|
||||
|
||||
3. **查询所有记录(包括已删除的)**
|
||||
|
||||
```json
|
||||
{
|
||||
"soql": "SELECT Id, Name, IsDeleted FROM Account ORDER BY CreatedDate DESC LIMIT 10"
|
||||
}
|
||||
```
|
||||
|
||||
4. **查询已删除的联系人及其账户信息**
|
||||
|
||||
```json
|
||||
{
|
||||
"soql": "SELECT Id, FirstName, LastName, Account.Name, IsDeleted FROM Contact WHERE IsDeleted = true"
|
||||
}
|
||||
```
|
||||
|
||||
### 数据恢复
|
||||
|
||||
查询到已删除的记录后,可以使用 `Undelete` 操作恢复记录(需要通过 CRUD 接口实现)。
|
||||
|
||||
### 注意事项
|
||||
|
||||
1. QueryAll 只能查询仍在回收站中的记录
|
||||
2. 已永久删除的记录无法通过 QueryAll 查询
|
||||
3. 回收站中的记录会根据 Salesforce 的保留策略自动清理
|
||||
4. 查询性能可能低于普通 Query
|
||||
5. 建议在查询时添加适当的过滤条件和 LIMIT 以提高性能
|
||||
|
||||
## 相关接口
|
||||
|
||||
- [执行 SOQL 查询](./001-query.md)
|
||||
- [获取查询结果的下一页](./003-query-more.md)
|
||||
- [执行 SOSL 搜索](./004-search.md)
|
||||
|
||||
## 更新日志
|
||||
|
||||
| 版本 | 日期 | 更新内容 | 作者 |
|
||||
|------|------|----------|------|
|
||||
| 1.0.0 | 2026-01-30 | 初始版本 | AI Assistant |
|
||||
@ -0,0 +1,225 @@
|
||||
# 获取查询结果的下一页
|
||||
|
||||
## 接口概述
|
||||
|
||||
使用 queryLocator 获取查询结果的下一页数据。当查询结果超过批次大小时,可以通过此接口分页获取剩余数据。
|
||||
|
||||
## 基本信息
|
||||
|
||||
| 属性 | 值 |
|
||||
|------|-----|
|
||||
| 接口名称 | 获取查询结果的下一页 |
|
||||
| 接口路径 | `/partner/queryMore` |
|
||||
| 请求方法 | `POST` |
|
||||
| Content-Type | `application/json` |
|
||||
| 需要认证 | 是 |
|
||||
| 所属模块 | datai-salesforce-partner |
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体 (Request Body)
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| queryLocator | String | 是 | 查询定位器,从 Query 或 QueryAll 的结果中获取 | `01gD0000002J6ozIAC-2000` |
|
||||
|
||||
### 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"queryLocator": "01gD0000002J6ozIAC-2000"
|
||||
}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
### 响应体 (Response Body)
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 响应状态码,200 表示成功 |
|
||||
| msg | String | 响应消息 |
|
||||
| data | Object | 响应数据 |
|
||||
|
||||
### data 对象结构
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| records | Array | 记录列表,每个记录是一个键值对对象 |
|
||||
| queryLocator | String | 查询定位器,用于继续获取下一页 |
|
||||
| done | Boolean | 是否完成(true 表示没有更多数据) |
|
||||
| size | Integer | 当前页记录数量 |
|
||||
| success | Boolean | 是否成功 |
|
||||
| errors | Array | 错误信息列表 |
|
||||
|
||||
### 响应示例
|
||||
|
||||
**成功响应(还有更多数据)**
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"records": [
|
||||
{
|
||||
"Id": "001xx000003DHb4AAI",
|
||||
"Name": "Global Tech Solutions",
|
||||
"BillingCity": "Los Angeles",
|
||||
"Industry": "Technology"
|
||||
},
|
||||
{
|
||||
"Id": "001xx000003DHb5AAJ",
|
||||
"Name": "Innovate Corp",
|
||||
"BillingCity": "Chicago",
|
||||
"Industry": "Technology"
|
||||
}
|
||||
],
|
||||
"queryLocator": "01gD0000002J6ozIAC-4000",
|
||||
"done": false,
|
||||
"size": 2,
|
||||
"success": true,
|
||||
"errors": []
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**成功响应(最后一页)**
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"records": [
|
||||
{
|
||||
"Id": "001xx000003DHb6AAK",
|
||||
"Name": "Future Systems",
|
||||
"BillingCity": "Boston",
|
||||
"Industry": "Technology"
|
||||
}
|
||||
],
|
||||
"queryLocator": null,
|
||||
"done": true,
|
||||
"size": 1,
|
||||
"success": true,
|
||||
"errors": []
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**错误响应**
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "QueryMore 查询失败: Invalid query locator",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 400 | 请求参数错误 | 检查 queryLocator 是否有效 |
|
||||
| 401 | 认证失败 | 检查 Salesforce 认证信息是否有效 |
|
||||
| 404 | 查询定位器不存在 | queryLocator 可能已过期或无效 |
|
||||
| 500 | 服务器内部错误 | 检查 queryLocator 格式是否正确 |
|
||||
|
||||
## 使用说明
|
||||
|
||||
### 分页查询流程
|
||||
|
||||
1. **首次查询**
|
||||
|
||||
调用 `query` 或 `queryAll` 接口获取第一批数据:
|
||||
|
||||
```json
|
||||
{
|
||||
"soql": "SELECT Id, Name, BillingCity FROM Account",
|
||||
"batchSize": 500
|
||||
}
|
||||
```
|
||||
|
||||
2. **检查是否还有更多数据**
|
||||
|
||||
查看响应中的 `done` 字段:
|
||||
- `done: false` - 还有更多数据
|
||||
- `done: true` - 已获取所有数据
|
||||
|
||||
3. **获取下一页**
|
||||
|
||||
如果 `done` 为 false,使用返回的 `queryLocator` 调用 `queryMore`:
|
||||
|
||||
```json
|
||||
{
|
||||
"queryLocator": "01gD0000002J6ozIAC-2000"
|
||||
}
|
||||
```
|
||||
|
||||
4. **重复步骤 2-3**
|
||||
|
||||
直到 `done` 为 true。
|
||||
|
||||
### 完整分页示例
|
||||
|
||||
```javascript
|
||||
// 伪代码示例
|
||||
let queryLocator = null;
|
||||
let allRecords = [];
|
||||
|
||||
// 首次查询
|
||||
const firstResult = await query({
|
||||
soql: "SELECT Id, Name FROM Account",
|
||||
batchSize: 500
|
||||
});
|
||||
allRecords = allRecords.concat(firstResult.data.records);
|
||||
queryLocator = firstResult.data.queryLocator;
|
||||
|
||||
// 循环获取剩余数据
|
||||
while (queryLocator && !firstResult.data.done) {
|
||||
const result = await queryMore({ queryLocator });
|
||||
allRecords = allRecords.concat(result.data.records);
|
||||
queryLocator = result.data.queryLocator;
|
||||
|
||||
if (result.data.done) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`总共获取 ${allRecords.length} 条记录`);
|
||||
```
|
||||
|
||||
### 注意事项
|
||||
|
||||
1. **queryLocator 有效期**
|
||||
- queryLocator 在查询会话期间有效
|
||||
- 会话超时后 queryLocator 会失效
|
||||
- 建议在合理时间内完成分页查询
|
||||
|
||||
2. **批次大小**
|
||||
- 首次查询的 batchSize 决定每页的记录数
|
||||
- queryMore 无法修改批次大小
|
||||
- 建议根据实际需求设置合适的批次大小
|
||||
|
||||
3. **性能优化**
|
||||
- 避免一次性获取过多数据
|
||||
- 根据业务需求合理设置批次大小
|
||||
- 考虑使用更精确的查询条件减少数据量
|
||||
|
||||
4. **错误处理**
|
||||
- 捕获并处理 queryLocator 过期的情况
|
||||
- 当 queryLocator 失效时,需要重新执行初始查询
|
||||
|
||||
## 相关接口
|
||||
|
||||
- [执行 SOQL 查询](./001-query.md)
|
||||
- [查询所有记录(包括已删除的)](./002-query-all.md)
|
||||
- [执行 SOSL 搜索](./004-search.md)
|
||||
|
||||
## 更新日志
|
||||
|
||||
| 版本 | 日期 | 更新内容 | 作者 |
|
||||
|------|------|----------|------|
|
||||
| 1.0.0 | 2026-01-30 | 初始版本 | AI Assistant |
|
||||
@ -0,0 +1,238 @@
|
||||
# 执行 SOSL 搜索
|
||||
|
||||
## 接口概述
|
||||
|
||||
执行 SOSL (Salesforce Object Search Language) 全文搜索,在多个对象中快速查找匹配的记录。
|
||||
|
||||
## 基本信息
|
||||
|
||||
| 属性 | 值 |
|
||||
|------|-----|
|
||||
| 接口名称 | 执行 SOSL 搜索 |
|
||||
| 接口路径 | `/partner/search` |
|
||||
| 请求方法 | `POST` |
|
||||
| Content-Type | `application/json` |
|
||||
| 需要认证 | 是 |
|
||||
| 所属模块 | datai-salesforce-partner |
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 请求体 (Request Body)
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| sosl | String | 是 | SOSL 搜索语句 | `FIND {Acme} IN ALL FIELDS RETURNING Account(Id, Name), Contact(Id, Name)` |
|
||||
|
||||
### 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"sosl": "FIND {Acme} IN ALL FIELDS RETURNING Account(Id, Name, BillingCity), Contact(Id, FirstName, LastName, Email)"
|
||||
}
|
||||
```
|
||||
|
||||
## 响应参数
|
||||
|
||||
### 响应体 (Response Body)
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| code | Integer | 响应状态码,200 表示成功 |
|
||||
| msg | String | 响应消息 |
|
||||
| data | Object | 响应数据 |
|
||||
|
||||
### data 对象结构
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| searchRecords | Array | 搜索结果列表 |
|
||||
| success | Boolean | 是否成功 |
|
||||
| errors | Array | 错误信息列表 |
|
||||
|
||||
### searchRecords 对象结构
|
||||
|
||||
| 参数名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| objectName | String | 对象名称 |
|
||||
| records | Array | 该对象的匹配记录列表 |
|
||||
|
||||
### 响应示例
|
||||
|
||||
**成功响应**
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"searchRecords": [
|
||||
{
|
||||
"objectName": "Account",
|
||||
"records": [
|
||||
{
|
||||
"Id": "001xx000003DHb2AAG",
|
||||
"Name": "Acme Corporation",
|
||||
"BillingCity": "San Francisco"
|
||||
},
|
||||
{
|
||||
"Id": "001xx000003DHb3AAH",
|
||||
"Name": "Acme Solutions",
|
||||
"BillingCity": "New York"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectName": "Contact",
|
||||
"records": [
|
||||
{
|
||||
"Id": "003xx000003DHb2AAG",
|
||||
"FirstName": "John",
|
||||
"LastName": "Acme",
|
||||
"Email": "john.acme@example.com"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"success": true,
|
||||
"errors": []
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**错误响应**
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "SOSL 搜索失败: Invalid search query",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
## 错误码
|
||||
|
||||
| 错误码 | 说明 | 处理建议 |
|
||||
|--------|------|----------|
|
||||
| 400 | 请求参数错误 | 检查 sosl 语句格式是否正确 |
|
||||
| 401 | 认证失败 | 检查 Salesforce 认证信息是否有效 |
|
||||
| 500 | 服务器内部错误 | 检查 SOSL 语句语法是否正确 |
|
||||
|
||||
## 使用说明
|
||||
|
||||
### SOSL 语法结构
|
||||
|
||||
```
|
||||
FIND {搜索词} IN {搜索范围} RETURNING {对象列表}
|
||||
```
|
||||
|
||||
### 搜索范围选项
|
||||
|
||||
| 搜索范围 | 说明 |
|
||||
|----------|------|
|
||||
| ALL FIELDS | 所有可搜索字段 |
|
||||
| NAME FIELDS | 名称字段 |
|
||||
| EMAIL FIELDS | 邮箱字段 |
|
||||
| PHONE FIELDS | 电话字段 |
|
||||
| SIDEBAR FIELDS | 侧边栏字段 |
|
||||
|
||||
### SOSL 语法示例
|
||||
|
||||
1. **基本搜索**
|
||||
|
||||
```json
|
||||
{
|
||||
"sosl": "FIND {Acme} IN ALL FIELDS RETURNING Account(Id, Name)"
|
||||
}
|
||||
```
|
||||
|
||||
2. **多对象搜索**
|
||||
|
||||
```json
|
||||
{
|
||||
"sosl": "FIND {Technology} IN ALL FIELDS RETURNING Account(Id, Name, Industry), Contact(Id, FirstName, LastName), Opportunity(Id, Name, Amount)"
|
||||
}
|
||||
```
|
||||
|
||||
3. **指定搜索范围**
|
||||
|
||||
```json
|
||||
{
|
||||
"sosl": "FIND {john@example.com} IN EMAIL FIELDS RETURNING Contact(Id, FirstName, LastName, Email), Lead(Id, FirstName, LastName, Email)"
|
||||
}
|
||||
```
|
||||
|
||||
4. **限制结果数量**
|
||||
|
||||
```json
|
||||
{
|
||||
"sosl": "FIND {Acme} IN NAME FIELDS RETURNING Account(Id, Name, BillingCity LIMIT 10), Contact(Id, FirstName, LastName LIMIT 5)"
|
||||
}
|
||||
```
|
||||
|
||||
5. **带条件的搜索**
|
||||
|
||||
```json
|
||||
{
|
||||
"sosl": "FIND {Technology} IN ALL FIELDS RETURNING Account(Id, Name, Industry WHERE Industry = 'Technology' LIMIT 10)"
|
||||
}
|
||||
```
|
||||
|
||||
6. **短语搜索**
|
||||
|
||||
```json
|
||||
{
|
||||
"sosl": "FIND {\"San Francisco\"} IN ALL FIELDS RETURNING Account(Id, Name, BillingCity)"
|
||||
}
|
||||
```
|
||||
|
||||
7. **通配符搜索**
|
||||
|
||||
```json
|
||||
{
|
||||
"sosl": "FIND {Acme*} IN ALL FIELDS RETURNING Account(Id, Name)"
|
||||
}
|
||||
```
|
||||
|
||||
### SOSL 与 SOQL 的区别
|
||||
|
||||
| 特性 | SOSL | SOQL |
|
||||
|------|------|------|
|
||||
| 搜索类型 | 全文搜索 | 精确查询 |
|
||||
| 搜索范围 | 多个对象 | 单个对象 |
|
||||
| 搜索字段 | 可搜索字段 | 任意字段 |
|
||||
| 性能 | 适合模糊搜索 | 适合精确查询 |
|
||||
| 使用场景 | 全局搜索、快速查找 | 数据报表、复杂查询 |
|
||||
|
||||
### 注意事项
|
||||
|
||||
1. **搜索词限制**
|
||||
- 搜索词长度至少 2 个字符
|
||||
- 不区分大小写
|
||||
- 支持通配符 (*)
|
||||
|
||||
2. **结果限制**
|
||||
- 每个对象最多返回 200 条记录
|
||||
- 总记录数限制为 2000 条
|
||||
- 建议使用 LIMIT 限制结果数量
|
||||
|
||||
3. **性能优化**
|
||||
- 避免使用过于宽泛的搜索词
|
||||
- 合理使用搜索范围缩小结果集
|
||||
- 限制返回的对象和字段数量
|
||||
|
||||
4. **特殊字符**
|
||||
- 短语搜索需要使用双引号
|
||||
- 转义特殊字符:\, *, ", '
|
||||
- 空格表示 AND 关系
|
||||
|
||||
## 相关接口
|
||||
|
||||
- [执行 SOQL 查询](./001-query.md)
|
||||
- [查询所有记录(包括已删除的)](./002-query-all.md)
|
||||
- [获取查询结果的下一页](./003-query-more.md)
|
||||
|
||||
## 更新日志
|
||||
|
||||
| 版本 | 日期 | 更新内容 | 作者 |
|
||||
|------|------|----------|------|
|
||||
| 1.0.0 | 2026-01-30 | 初始版本 | AI Assistant |
|
||||
@ -0,0 +1,232 @@
|
||||
# Partner API 接口文档索引
|
||||
|
||||
## 概述
|
||||
|
||||
本文档是 `datai-salesforce-partner` 模块所有 API 接口文档的唯一真源索引,记录了所有已创建的接口文档及其元数据。
|
||||
|
||||
## 文档元数据
|
||||
|
||||
| 属性 | 值 |
|
||||
|------|-----|
|
||||
| 文档名称 | Partner API 接口文档索引 |
|
||||
| 文档编号 | PARTNER-API-INDEX-001 |
|
||||
| 创建日期 | 2026-02-02 |
|
||||
| 最后更新 | 2026-02-02 |
|
||||
| 状态 | 已完成 |
|
||||
| 维护者 | AI Assistant |
|
||||
|
||||
## 文档统计
|
||||
|
||||
| Controller | 文档数量 | 接口数量 |
|
||||
|------------|----------|----------|
|
||||
| PartnerAdvancedController | 5 | 5 |
|
||||
| PartnerBatchController | 4 | 4 |
|
||||
| PartnerConnectionController | 3 | 3 |
|
||||
| PartnerCrudController | 6 | 6 |
|
||||
| PartnerDescribeController | 6 | 6 |
|
||||
| PartnerQueryController | 4 | 4 |
|
||||
| **总计** | **28** | **28** |
|
||||
|
||||
---
|
||||
|
||||
## 1. PartnerAdvancedController - 高级功能接口
|
||||
|
||||
### 接口列表
|
||||
|
||||
| 序号 | 文档名称 | 接口路径 | 接口名称 | 状态 |
|
||||
|------|----------|----------|----------|------|
|
||||
| 1 | [001-convert-lead.md](./PartnerAdvancedController/001-convert-lead.md) | `/partner/convertLead` | 转换潜在客户 | ✅ 已完成 |
|
||||
| 2 | [002-empty-recycle-bin.md](./PartnerAdvancedController/002-empty-recycle-bin.md) | `/partner/emptyRecycleBin` | 清空回收站 | ✅ 已完成 |
|
||||
| 3 | [003-process-submit-request.md](./PartnerAdvancedController/003-process-submit-request.md) | `/partner/processSubmitRequest` | 提交流程请求 | ✅ 已完成 |
|
||||
| 4 | [004-get-user-info.md](./PartnerAdvancedController/004-get-user-info.md) | `/partner/getUserInfo` | 获取用户信息 | ✅ 已完成 |
|
||||
| 5 | [005-get-server-timestamp.md](./PartnerAdvancedController/005-get-server-timestamp.md) | `/partner/getServerTimestamp` | 获取服务器时间戳 | ✅ 已完成 |
|
||||
|
||||
### 功能说明
|
||||
|
||||
提供 Salesforce 高级功能接口,包括潜在客户转换、回收站管理、流程请求处理、用户信息获取等。
|
||||
|
||||
---
|
||||
|
||||
## 2. PartnerBatchController - 批量操作接口
|
||||
|
||||
### 接口列表
|
||||
|
||||
| 序号 | 文档名称 | 接口路径 | 接口名称 | 状态 |
|
||||
|------|----------|----------|----------|------|
|
||||
| 1 | [001-batch-create.md](./PartnerBatchController/001-batch-create.md) | `/partner/batchCreate` | 批量创建记录 | ✅ 已完成 |
|
||||
| 2 | [002-batch-update.md](./PartnerBatchController/002-batch-update.md) | `/partner/batchUpdate` | 批量更新记录 | ✅ 已完成 |
|
||||
| 3 | [003-batch-delete.md](./PartnerBatchController/003-batch-delete.md) | `/partner/batchDelete` | 批量删除记录 | ✅ 已完成 |
|
||||
| 4 | [004-batch-upsert.md](./PartnerBatchController/004-batch-upsert.md) | `/partner/batchUpsert` | 批量 Upsert 记录 | ✅ 已完成 |
|
||||
|
||||
### 功能说明
|
||||
|
||||
提供批量操作接口,支持批量创建、更新、删除和 Upsert 记录,提高数据操作效率。
|
||||
|
||||
---
|
||||
|
||||
## 3. PartnerConnectionController - 连接管理接口
|
||||
|
||||
### 接口列表
|
||||
|
||||
| 序号 | 文档名称 | 接口路径 | 接口名称 | 状态 |
|
||||
|------|----------|----------|----------|------|
|
||||
| 1 | [001-get-session-info.md](./PartnerConnectionController/001-get-session-info.md) | `/partner/getSessionInfo` | 获取会话信息 | ✅ 已完成 |
|
||||
| 2 | [002-get-user-info.md](./PartnerConnectionController/002-get-user-info.md) | `/partner/getUserInfo` | 获取用户信息 | ✅ 已完成 |
|
||||
| 3 | [003-change-password.md](./PartnerConnectionController/003-change-password.md) | `/partner/changePassword` | 修改密码 | ✅ 已完成 |
|
||||
|
||||
### 功能说明
|
||||
|
||||
提供连接管理接口,包括会话信息获取、用户信息获取和密码修改等。
|
||||
|
||||
---
|
||||
|
||||
## 4. PartnerCrudController - CRUD 操作接口
|
||||
|
||||
### 接口列表
|
||||
|
||||
| 序号 | 文档名称 | 接口路径 | 接口名称 | 状态 |
|
||||
|------|----------|----------|----------|------|
|
||||
| 1 | [001-create-record.md](./PartnerCrudController/001-create-record.md) | `/partner/createRecord` | 创建记录 | ✅ 已完成 |
|
||||
| 2 | [002-retrieve-record.md](./PartnerCrudController/002-retrieve-record.md) | `/partner/retrieveRecord` | 检索记录 | ✅ 已完成 |
|
||||
| 3 | [003-update-record.md](./PartnerCrudController/003-update-record.md) | `/partner/updateRecord` | 更新记录 | ✅ 已完成 |
|
||||
| 4 | [004-delete-record.md](./PartnerCrudController/004-delete-record.md) | `/partner/deleteRecord` | 删除记录 | ✅ 已完成 |
|
||||
| 5 | [005-upsert-record.md](./PartnerCrudController/005-upsert-record.md) | `/partner/upsertRecord` | Upsert 记录 | ✅ 已完成 |
|
||||
| 6 | [006-merge-records.md](./PartnerCrudController/006-merge-records.md) | `/partner/mergeRecords` | 合并记录 | ✅ 已完成 |
|
||||
|
||||
### 功能说明
|
||||
|
||||
提供完整的 CRUD 操作接口,支持记录的创建、检索、更新、删除、Upsert 和合并操作。
|
||||
|
||||
---
|
||||
|
||||
## 5. PartnerDescribeController - 对象描述接口
|
||||
|
||||
### 接口列表
|
||||
|
||||
| 序号 | 文档名称 | 接口路径 | 接口名称 | 状态 |
|
||||
|------|----------|----------|----------|------|
|
||||
| 1 | [001-describe-global.md](./PartnerDescribeController/001-describe-global.md) | `/partner/describeGlobal` | 描述所有可用对象 | ✅ 已完成 |
|
||||
| 2 | [002-describe-sobject.md](./PartnerDescribeController/002-describe-sobject.md) | `/partner/describeSObject` | 描述特定对象 | ✅ 已完成 |
|
||||
| 3 | [003-describe-sobjects.md](./PartnerDescribeController/003-describe-sobjects.md) | `/partner/describeSObjects` | 描述多个对象 | ✅ 已完成 |
|
||||
| 4 | [004-describe-layout.md](./PartnerDescribeController/004-describe-layout.md) | `/partner/describeLayout` | 描述对象布局 | ✅ 已完成 |
|
||||
| 5 | [005-describe-tabs.md](./PartnerDescribeController/005-describe-tabs.md) | `/partner/describeTabs` | 描述标签页 | ✅ 已完成 |
|
||||
| 6 | [006-describe-quick-actions.md](./PartnerDescribeController/006-describe-quick-actions.md) | `/partner/describeQuickActions` | 描述快速操作 | ✅ 已完成 |
|
||||
|
||||
### 功能说明
|
||||
|
||||
提供对象描述接口,用于获取 Salesforce 对象的元数据信息,包括对象结构、字段定义、布局信息等。
|
||||
|
||||
---
|
||||
|
||||
## 6. PartnerQueryController - 查询接口
|
||||
|
||||
### 接口列表
|
||||
|
||||
| 序号 | 文档名称 | 接口路径 | 接口名称 | 状态 |
|
||||
|------|----------|----------|----------|------|
|
||||
| 1 | [001-query.md](./PartnerQueryController/001-query.md) | `/partner/query` | 执行 SOQL 查询 | ✅ 已完成 |
|
||||
| 2 | [002-query-all.md](./PartnerQueryController/002-query-all.md) | `/partner/queryAll` | 查询所有记录(包括已删除的) | ✅ 已完成 |
|
||||
| 3 | [003-query-more.md](./PartnerQueryController/003-query-more.md) | `/partner/queryMore` | 获取查询结果的下一页 | ✅ 已完成 |
|
||||
| 4 | [004-search.md](./PartnerQueryController/004-search.md) | `/partner/search` | 执行 SOSL 搜索 | ✅ 已完成 |
|
||||
|
||||
### 功能说明
|
||||
|
||||
提供查询接口,支持 SOQL 查询、QueryAll 查询(包括已删除记录)、分页查询和 SOSL 全文搜索。
|
||||
|
||||
---
|
||||
|
||||
## 文档变更日志
|
||||
|
||||
| 版本 | 日期 | 变更内容 | 作者 |
|
||||
|------|------|----------|------|
|
||||
| 1.0.0 | 2026-02-02 | 初始版本,创建所有 28 个接口文档的索引 | AI Assistant |
|
||||
|
||||
---
|
||||
|
||||
## 交叉引用
|
||||
|
||||
### 相关文档
|
||||
|
||||
- [datai-scene-salesforce 模块文档](../../index.md)
|
||||
- [Partner API 总览](../partner-api-overview.md)
|
||||
|
||||
### 外部链接
|
||||
|
||||
- [Salesforce Partner API 官方文档](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/)
|
||||
|
||||
---
|
||||
|
||||
## 维护说明
|
||||
|
||||
### 文档更新规则
|
||||
|
||||
1. **新增接口**:当添加新的接口时,必须:
|
||||
- 创建对应的接口文档
|
||||
- 更新本文档索引
|
||||
- 更新文档统计信息
|
||||
- 添加变更日志记录
|
||||
|
||||
2. **修改接口**:当修改现有接口时,必须:
|
||||
- 更新对应的接口文档
|
||||
- 更新接口文档的版本号和变更日志
|
||||
- 在本文档中记录变更
|
||||
|
||||
3. **删除接口**:当删除接口时,必须:
|
||||
- 标记对应的接口文档为已废弃
|
||||
- 更新本文档索引状态
|
||||
- 添加变更日志记录
|
||||
|
||||
### 文档命名规范
|
||||
|
||||
- Controller 文档夹:`{ControllerName}`
|
||||
- 接口文档:`{序号}-{接口名称}.md`
|
||||
- 序号格式:3 位数字,从 001 开始递增
|
||||
|
||||
### 文档模板
|
||||
|
||||
所有接口文档应遵循统一的模板格式,包含以下章节:
|
||||
- 接口概述
|
||||
- 基本信息
|
||||
- 请求参数
|
||||
- 响应参数
|
||||
- 错误码
|
||||
- 使用说明
|
||||
- 相关接口
|
||||
- 更新日志
|
||||
|
||||
---
|
||||
|
||||
## 附录
|
||||
|
||||
### A. 接口分类统计
|
||||
|
||||
| 分类 | 接口数量 | 占比 |
|
||||
|------|----------|------|
|
||||
| 高级功能 | 5 | 17.86% |
|
||||
| 批量操作 | 4 | 14.29% |
|
||||
| 连接管理 | 3 | 10.71% |
|
||||
| CRUD 操作 | 6 | 21.43% |
|
||||
| 对象描述 | 6 | 21.43% |
|
||||
| 查询功能 | 4 | 14.29% |
|
||||
| **总计** | **28** | **100%** |
|
||||
|
||||
### B. 请求方法统计
|
||||
|
||||
| 方法 | 接口数量 | 占比 |
|
||||
|------|----------|------|
|
||||
| POST | 28 | 100% |
|
||||
| GET | 0 | 0% |
|
||||
| PUT | 0 | 0% |
|
||||
| DELETE | 0 | 0% |
|
||||
|
||||
### C. 文档完成状态
|
||||
|
||||
| 状态 | 文档数量 | 占比 |
|
||||
|------|----------|------|
|
||||
| ✅ 已完成 | 28 | 100% |
|
||||
| 🚧 进行中 | 0 | 0% |
|
||||
| ❌ 未开始 | 0 | 0% |
|
||||
|
||||
---
|
||||
|
||||
**文档结束**
|
||||
Loading…
Reference in New Issue
Block a user