datai/docs/archive/REQ-014-3.md

61 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Apex 业务逻辑执行与日志管理需求
## 元数据
- 需求编号014-3
- 创建时间2026-01-26
- 创建人SSOT 架构师
- 状态:待开始
- 优先级:中
- 父需求:[REQ-014](../REQ-014.md)
- 关联代码:`com.sforce.soap.tooling.ExecuteAnonymousResult`, `com.sforce.soap.tooling.TraceFlag`
## 需求概述
实现“逻辑集中”的关键模块。允许 Java 端直接调用 Apex 逻辑(通过 Execute Anonymous 或 WebService并能动态管理调试日志以便在生产环境中排查问题。
**关联模块**:本需求与 `REQ-013-2`Apex 动态代码执行与日志管理)高度重叠。经扫描,`ExecuteAnonymousResult` 等 SOAP 对象已存在。本需求应作为 `REQ-013-2` 的 Tooling API 实现版本(如果使用 Tooling API 的 `/executeAnonymous` 端点),或者复用 `REQ-013-2` 的实现。鉴于 Tooling API 提供了更丰富的调试上下文,建议在此处侧重于 **Tooling 特有的调试功能**(如 `TraceFlag` 管理)。
## 目标
1. **动态执行**:通过 Tooling API 执行匿名 Apex作为 Partner/Apex API 的补充)。
2. **日志管理**:通过 Tooling API 的 `TraceFlag``DebugLevel` 对象,实现持久化的日志级别配置(不仅仅是单次执行的 Header
3. **日志获取**:下载并解析 `ApexLog`
## 功能需求
### 核心功能
1. **匿名执行器 (Anonymous Executor)**
- 接口:`executeApex(String apexCode)`
- 实现:调用 `ToolingConnection.executeAnonymous(String code)`
- 差异Tooling API 的执行结果可能包含行号覆盖率信息(需验证)。
2. **持久化调试配置 (Persistent Debug Configuration)**
- **管理 TraceFlag**
- CRUD 操作 `TraceFlag` 对象。
- 关联 `DebugLevel`,设置 `ApexCode`, `Visualforce`, `System`, `Database` 等类别的日志级别。
- 设置 `StartDate``ExpirationDate`,实现临时调试窗口。
- **管理 DebugLevel**
- CRUD 操作 `DebugLevel` 对象,定义复用的日志配置模板。
3. **日志获取 (Log Retriever)**
- 接口:`getLog(String logId)`
- 实现:通过 `ToolingConnection.retrieve()` 获取 `ApexLog` 对象的 `Body` 字段(需处理 Blob 类型)。
### 次要功能
- **日志分析**:简单的日志解析,提取 `USER_DEBUG` 行。
## 非功能需求
- **低侵入性**:设置 TraceFlag 后应及时清理(或利用 ExpirationDate 自动过期),避免日志空间爆满。
- **并发控制**:同一用户同一时间只能有一个生效的 TraceFlag需处理冲突。
## 技术约束
- **依赖**`com.sforce.soap.tooling.TraceFlag`, `com.sforce.soap.tooling.DebugLevel`, `com.sforce.soap.tooling.ApexLog`
- **权限**:操作 TraceFlag 需要 `View All Data` 权限。
## 成功标准
1. 能够创建一个有效期为 30 分钟的 `TraceFlag`
2. 执行一段 Apex 代码后,能在 `ApexLog` 表中查询到生成的日志 ID。
3. 能够下载并打印日志内容。
## 相关文档
- [设计文档](../design/2026-01-27-014-3-Apex业务逻辑执行与日志管理-设计.md)
- [决策记录](../decisions/adr/2026-01-27-014-3-ADR-Apex执行与日志管理技术选型.md)
- [提示词文档](../prompts/2026-01-27-014-3-prompt-Apex业务逻辑执行与日志管理.md)
- [变更日志](../changelog/2026-01-27-014-3-changelog.md)