# API 文档 ## 元数据 - 需求编号:004-05 - 创建时间:2026-02-06 - 创建人:AI Assistant - 版本号:v1.0.0 - 模块:Tooling API - 动作和自动化 ## API 概述 ### 功能描述 Tooling API 动作和自动化功能提供 Salesforce 动作覆盖(ActionOverride)和可操作列表(ActionableList)的管理能力,包括创建、更新、删除、查询动作覆盖,查询可操作列表,以及获取各种枚举类型。 ### 基础信息 - **基础路径**:`/salesforce/tooling/action-automation` - **认证方式**:JWT Token(通过 Header 传递) - **权限控制**:基于若依权限系统 - **数据格式**:JSON ### 通用响应格式 ```json { "code": 200, "msg": "操作成功", "data": { ... } } ``` ### 通用错误响应格式 ```json { "code": 500, "msg": "错误信息", "data": { ... } } ``` ## 接口列表 ### 1. 创建动作覆盖 - **功能描述**:创建新的动作覆盖(ActionOverride) - **请求方式**:POST - **请求路径**:`/salesforce/tooling/action-automation/action-override/create` - **权限要求**:`tooling:action:create` #### 请求参数 | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | actionName | String | 是 | 动作名称,长度 1-255 字符 | | content | String | 否 | 动作内容,长度 0-131072 字符 | | formFactor | String | 否 | 表单因子(如 Large, Medium, Small) | | pageOrSobjectType | String | 是 | 页面或 SObject 类型,长度 1-255 字符 | | recordType | String | 否 | 记录类型 ID,长度 18 字符 | | type | String | 是 | 动作覆盖类型(如 Default, Flexipage 等) | #### 请求示例 ```json { "actionName": "New", "content": "{}", "formFactor": "Large", "pageOrSobjectType": "Account", "type": "Default" } ``` #### 响应参数 | 参数名 | 类型 | 说明 | |--------|------|------| | code | Integer | 状态码(200 成功,其他失败) | | msg | String | 提示信息 | | data | Object | 操作结果 | | data.success | Boolean | 是否成功 | | data.id | String | 创建的记录 ID | | data.createdDate | String | 创建时间 | | data.errorCode | String | 错误码(失败时) | | data.errorMessage | String | 错误信息(失败时) | #### 成功响应示例 ```json { "code": 200, "msg": "创建动作覆盖成功", "data": { "success": true, "id": "01Ixx0000000001EAA", "createdDate": "2026-02-06T10:30:00", "lastModifiedDate": "2026-02-06T10:30:00" } } ``` #### 失败响应示例 ```json { "code": 500, "msg": "创建动作覆盖失败", "data": { "success": false, "errorCode": "TOOLING_ACTION_002", "errorMessage": "ActionOverride with the specified name already exists" } } ``` --- ### 2. 更新动作覆盖 - **功能描述**:更新现有的动作覆盖 - **请求方式**:PUT - **请求路径**:`/salesforce/tooling/action-automation/action-override/update` - **权限要求**:`tooling:action:update` #### 请求参数 | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | id | String | 是 | 动作覆盖 ID,长度 18 字符 | | actionName | String | 否 | 动作名称,长度 1-255 字符 | | content | String | 否 | 动作内容,长度 0-131072 字符 | | formFactor | String | 否 | 表单因子 | | pageOrSobjectType | String | 否 | 页面或 SObject 类型 | | recordType | String | 否 | 记录类型 ID | | type | String | 否 | 动作覆盖类型 | #### 请求示例 ```json { "id": "01Ixx0000000001EAA", "actionName": "New", "content": "{\"updated\": true}", "formFactor": "Large", "pageOrSobjectType": "Account", "type": "Flexipage" } ``` #### 响应参数 | 参数名 | 类型 | 说明 | |--------|------|------| | code | Integer | 状态码 | | msg | String | 提示信息 | | data | Object | 操作结果 | | data.success | Boolean | 是否成功 | | data.id | String | 更新的记录 ID | | data.lastModifiedDate | String | 最后修改时间 | #### 成功响应示例 ```json { "code": 200, "msg": "更新动作覆盖成功", "data": { "success": true, "id": "01Ixx0000000001EAA", "lastModifiedDate": "2026-02-06T11:00:00" } } ``` --- ### 3. 删除动作覆盖 - **功能描述**:删除指定的动作覆盖 - **请求方式**:DELETE - **请求路径**:`/salesforce/tooling/action-automation/action-override/delete/{id}` - **权限要求**:`tooling:action:delete` #### 路径参数 | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | id | String | 是 | 动作覆盖 ID,长度 18 字符 | #### 响应参数 | 参数名 | 类型 | 说明 | |--------|------|------| | code | Integer | 状态码 | | msg | String | 提示信息 | | data | Object | 操作结果 | | data.success | Boolean | 是否成功 | | data.id | String | 删除的记录 ID | #### 成功响应示例 ```json { "code": 200, "msg": "删除动作覆盖成功", "data": { "success": true, "id": "01Ixx0000000001EAA" } } ``` --- ### 4. 查询动作覆盖 - **功能描述**:分页查询动作覆盖列表 - **请求方式**:GET - **请求路径**:`/salesforce/tooling/action-automation/action-override/query` - **权限要求**:`tooling:action:query` #### 查询参数 | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | actionName | String | 否 | 动作名称,支持模糊查询 | | pageOrSobjectType | String | 否 | 页面或 SObject 类型 | | type | String | 否 | 动作覆盖类型 | | pageNum | Integer | 否 | 页码,默认 1 | | pageSize | Integer | 否 | 每页大小,默认 10 | #### 响应参数 | 参数名 | 类型 | 说明 | |--------|------|------| | code | Integer | 状态码 | | msg | String | 提示信息 | | data | Object | 分页结果 | | data.total | Long | 总记录数 | | data.rows | Array | 动作覆盖列表 | | data.rows[].id | String | 记录 ID | | data.rows[].actionName | String | 动作名称 | | data.rows[].pageOrSobjectType | String | 页面或 SObject 类型 | | data.rows[].type | String | 动作覆盖类型 | | data.rows[].createdDate | String | 创建时间 | | data.rows[].lastModifiedDate | String | 最后修改时间 | #### 成功响应示例 ```json { "code": 200, "msg": "查询动作覆盖成功", "data": { "total": 25, "rows": [ { "id": "01Ixx0000000001EAA", "actionName": "New", "pageOrSobjectType": "Account", "type": "Default", "createdDate": "2026-02-06T10:30:00", "lastModifiedDate": "2026-02-06T11:00:00" } ] } } ``` --- ### 5. 查询可操作列表 - **功能描述**:分页查询可操作列表(ActionableList) - **请求方式**:GET - **请求路径**:`/salesforce/tooling/action-automation/actionable-list/query` - **权限要求**:`tooling:action:query` #### 查询参数 | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | name | String | 否 | 列表名称,支持模糊查询 | | type | String | 否 | 列表类型 | | pageNum | Integer | 否 | 页码,默认 1 | | pageSize | Integer | 否 | 每页大小,默认 10 | #### 响应参数 | 参数名 | 类型 | 说明 | |--------|------|------| | code | Integer | 状态码 | | msg | String | 提示信息 | | data | Object | 分页结果 | | data.total | Long | 总记录数 | | data.rows | Array | 可操作列表 | | data.rows[].id | String | 记录 ID | | data.rows[].name | String | 列表名称 | | data.rows[].type | String | 列表类型 | | data.rows[].sourceType | String | 源类型 | | data.rows[].createdDate | String | 创建时间 | #### 成功响应示例 ```json { "code": 200, "msg": "查询可操作列表成功", "data": { "total": 10, "rows": [ { "id": "00Dxx0000000001EAA", "name": "My Actionable List", "type": "List", "sourceType": "Sobject", "createdDate": "2026-02-06T10:30:00" } ] } } ``` --- ### 6. 获取动作覆盖类型 - **功能描述**:获取所有支持的动作覆盖类型 - **请求方式**:GET - **请求路径**:`/salesforce/tooling/action-automation/action-override/types` - **权限要求**:`tooling:action:query` #### 响应参数 | 参数名 | 类型 | 说明 | |--------|------|------| | code | Integer | 状态码 | | msg | String | 提示信息 | | data | Array | 动作覆盖类型列表 | | data[].value | String | 类型值 | | data[].label | String | 类型标签 | #### 成功响应示例 ```json { "code": 200, "msg": "获取动作覆盖类型成功", "data": [ { "value": "Default", "label": "Default" }, { "value": "Flexipage", "label": "Flexipage" }, { "value": "LightningComponent", "label": "Lightning Component" }, { "value": "Scontrol", "label": "Scontrol" }, { "value": "Standard", "label": "Standard" }, { "value": "Visualforce", "label": "Visualforce" } ] } ``` --- ### 7. 获取动作子类型 - **功能描述**:获取所有支持的动作子类型 - **请求方式**:GET - **请求路径**:`/salesforce/tooling/action-automation/action/subtypes` - **权限要求**:`tooling:action:query` #### 响应参数 | 参数名 | 类型 | 说明 | |--------|------|------| | code | Integer | 状态码 | | msg | String | 提示信息 | | data | Array | 动作子类型列表 | #### 成功响应示例 ```json { "code": 200, "msg": "获取动作子类型成功", "data": [ { "value": "ActionLink", "label": "Action Link" }, { "value": "Flow", "label": "Flow" }, { "value": "InvocableAction", "label": "Invocable Action" }, { "value": "ProductivityAction", "label": "Productivity Action" }, { "value": "QuickAction", "label": "Quick Action" } ] } ``` --- ### 8. 获取可操作列表类型 - **功能描述**:获取所有支持的可操作列表类型 - **请求方式**:GET - **请求路径**:`/salesforce/tooling/action-automation/actionable-list/types` - **权限要求**:`tooling:action:query` #### 响应参数 | 参数名 | 类型 | 说明 | |--------|------|------| | code | Integer | 状态码 | | msg | String | 提示信息 | | data | Array | 可操作列表类型列表 | #### 成功响应示例 ```json { "code": 200, "msg": "获取可操作列表类型成功", "data": [ { "value": "List", "label": "List" }, { "value": "MruList", "label": "MRU List" }, { "value": "Queue", "label": "Queue" } ] } ``` --- ### 9. 获取可操作列表源类型 - **功能描述**:获取所有支持的可操作列表源类型 - **请求方式**:GET - **请求路径**:`/salesforce/tooling/action-automation/actionable-list/source-types` - **权限要求**:`tooling:action:query` #### 响应参数 | 参数名 | 类型 | 说明 | |--------|------|------| | code | Integer | 状态码 | | msg | String | 提示信息 | | data | Array | 可操作列表源类型列表 | #### 成功响应示例 ```json { "code": 200, "msg": "获取可操作列表源类型成功", "data": [ { "value": "Sobject", "label": "Sobject" }, { "value": "Flow", "label": "Flow" }, { "value": "Apex", "label": "Apex" } ] } ``` --- ### 10. 获取动作任务分配类型 - **功能描述**:获取所有支持的动作任务分配类型 - **请求方式**:GET - **请求路径**:`/salesforce/tooling/action-automation/action-task/assigned-to-types` - **权限要求**:`tooling:action:query` #### 响应参数 | 参数名 | 类型 | 说明 | |--------|------|------| | code | Integer | 状态码 | | msg | String | 提示信息 | | data | Array | 动作任务分配类型列表 | #### 成功响应示例 ```json { "code": 200, "msg": "获取动作任务分配类型成功", "data": [ { "value": "Owner", "label": "Owner" }, { "value": "User", "label": "User" }, { "value": "Queue", "label": "Queue" } ] } ``` --- ### 11. 获取动作 HTTP 方法 - **功能描述**:获取所有支持的动作 HTTP 方法 - **请求方式**:GET - **请求路径**:`/salesforce/tooling/action-automation/action/http-methods` - **权限要求**:`tooling:action:query` #### 响应参数 | 参数名 | 类型 | 说明 | |--------|------|------| | code | Integer | 状态码 | | msg | String | 提示信息 | | data | Array | HTTP 方法列表 | #### 成功响应示例 ```json { "code": 200, "msg": "获取动作 HTTP 方法成功", "data": [ { "value": "GET", "label": "GET" }, { "value": "POST", "label": "POST" }, { "value": "PUT", "label": "PUT" }, { "value": "DELETE", "label": "DELETE" }, { "value": "PATCH", "label": "PATCH" } ] } ``` --- ### 12. 获取动作邮件发送者类型 - **功能描述**:获取所有支持的动作邮件发送者类型 - **请求方式**:GET - **请求路径**:`/salesforce/tooling/action-automation/action/email-sender-types` - **权限要求**:`tooling:action:query` #### 响应参数 | 参数名 | 类型 | 说明 | |--------|------|------| | code | Integer | 状态码 | | msg | String | 提示信息 | | data | Array | 邮件发送者类型列表 | #### 成功响应示例 ```json { "code": 200, "msg": "获取动作邮件发送者类型成功", "data": [ { "value": "CurrentUser", "label": "Current User" }, { "value": "OrgWideEmailAddress", "label": "Org-Wide Email Address" }, { "value": "DefaultWorkflowUser", "label": "Default Workflow User" } ] } ``` --- ## 错误码 ### 错误码列表 | 错误码 | 说明 | 场景 | |--------|------|------| | TOOLING_ACTION_001 | Session 无效或已过期 | Salesforce 会话过期或无效 | | TOOLING_ACTION_002 | 创建动作覆盖失败 | 创建动作覆盖时发生错误 | | TOOLING_ACTION_003 | 更新动作覆盖失败 | 更新动作覆盖时发生错误 | | TOOLING_ACTION_004 | 删除动作覆盖失败 | 删除动作覆盖时发生错误 | | TOOLING_ACTION_005 | 查询动作覆盖失败 | 查询动作覆盖时发生错误 | | TOOLING_ACTION_006 | 查询可操作列表失败 | 查询可操作列表时发生错误 | | TOOLING_ACTION_007 | 获取动作覆盖类型失败 | 获取动作覆盖类型时发生错误 | | TOOLING_ACTION_008 | 获取动作子类型失败 | 获取动作子类型时发生错误 | | TOOLING_ACTION_009 | 获取可操作列表类型失败 | 获取可操作列表类型时发生错误 | | TOOLING_ACTION_010 | 获取可操作列表源类型失败 | 获取可操作列表源类型时发生错误 | | TOOLING_ACTION_011 | 权限不足 | 用户没有执行该操作的权限 | ### 错误响应示例 ```json { "code": 500, "msg": "Session 无效或已过期", "data": { "success": false, "errorCode": "TOOLING_ACTION_001", "errorMessage": "Session 无效或已过期" } } ``` ## 相关文档 - [需求文档](../requirements/sub/2026-01-28-004-05-动作和自动化.md) - [设计文档](../design/2026-02-03-004-05-动作和自动化-设计.md) - [决策记录](../decisions/2026-02-03-004-05-ADR-动作和自动化技术选型.md) - [SQL 脚本](../sql/2026-02-03-004-05-动作和自动化操作日志.sql) - [提示词文档](../prompts/2026-02-06-004-05-prompt-动作和自动化.md) - [变更日志](../changelog/2026-02-06-004-05-changelog.md) - [复盘文档](../retros/2026-02-06-004-05-retro.md) - [会话记录](../sessions/2026-02-03-004-05-session.md)