datai/docs/archive/REQ-013-1.md

83 lines
4.5 KiB
Markdown
Raw Normal View History

# Apex 编译器接口与错误处理需求
## 元数据
- 需求编号013-1
- 父需求013
- 创建时间2026-01-26
- 创建人SSOT 架构师
- 状态:进行中
- 优先级:高
## 需求概述
作为 Apex 开发工具包的基础,需要优先实现编译器接口和错误处理对象的封装。这将为后续的动态执行、单元测试和元数据操作提供统一的数据结构和异常处理机制。
## 目标
1. **统一错误模型**:将 Salesforce SOAP API 返回的各类错误(编译错误、运行时错误、测试失败)转换为统一的 Java 对象模型。
2. **封装 WSDL 工具**:实现 `wsdlToApex` 功能,支持从 WSDL 生成 Apex 代码。
3. **提供基础 VO/DTO**定义供上层调用的值对象Value Object屏蔽底层 SOAP 对象的复杂性。
## 功能需求
### 1. 统一错误模型 (Unified Error Model)
- **功能描述**:定义标准化的错误对象,屏蔽底层 SOAP 对象的差异。
- **详细要求**
- 创建 `ApexCompileIssue` 类,映射 `com.sforce.soap.apex.CompileIssue`
- 字段包含:
- `line` (行号):对应 SOAP `line` 字段。
- `column` (列号):对应 SOAP `column` 字段。
- `problem` (错误描述):对应 SOAP `message` 字段。
- `className` (类名/文件名):在批量编译时关联到具体文件。
- 创建 `ApexException` 体系,区分:
- `ApexCompilationException`: 编译期错误,包含 `List<ApexCompileIssue>`
- `ApexRuntimeException`: 运行期错误。
- `ApexConnectionException`: 连接/网络错误。
### 2. 编译器结果封装 (Compiler Result Encapsulation)
- **功能描述**:封装编译结果,提供更友好的访问方式。
- **详细要求**
2026-01-28 18:17:11 +08:00
- 创建 `CompileResult` 类,映射 `com.sforce.soap.apex.CompileClassResult``com.sforce.soap.apex.CompileTriggerResult`
- 字段包含:
- `success` (是否成功):对应 SOAP `success` 字段。
- `id` (元数据 ID):对应 SOAP `id` 字段。
2026-01-28 18:17:11 +08:00
- `name` (类名/触发器名):对应 SOAP `name` 字段。
- `bodyCrc` (内容校验码):对应 SOAP `bodyCrc` 字段。
- `line` (错误行号):对应 SOAP `line` 字段(当 `success``false` 时)。
- `column` (错误列号):对应 SOAP `column` 字段(当 `success``false` 时)。
- `problem` (错误描述):对应 SOAP `problem` 字段(当 `success``false` 时)。
2026-01-28 18:17:11 +08:00
- `problems` (错误列表 `List<ApexCompileIssue>`):对应 SOAP `problems` 字段。
- `warnings` (警告列表 `List<ApexCompileIssue>`):对应 SOAP `warnings` 字段。
### 3. WSDL 转 Apex (WSDL to Apex)
- **功能描述**:封装 `SoapConnection.wsdlToApex` 方法。
- **详细要求**
- 输入WSDL 内容字符串或 URL。
- 输出:`WsdlToApexResult` 封装对象。
- 字段包含:
- `success` (是否成功):对应 SOAP `success` 字段。
- `apexScripts` (生成的 Apex 代码):对应 SOAP `apexScripts` 数组,转换为 `List<String>`
- `errors` (错误信息):对应 SOAP `errors` 数组,转换为 `List<String>`
- 异常处理:处理 WSDL 解析错误和生成错误,统一抛出 `ApexCompilationException`
## 非功能需求
- **无状态**:对象设计应为无状态,便于序列化和传输。
- **易用性**:提供 Builder 模式或静态工厂方法创建对象。
- **兼容性**:字段映射需兼容 Salesforce API v58.0+。
## 技术约束
- 位于 `datai-salesforce-apex` 模块。
- 包路径:`com.datai.apex.model` (模型), `com.datai.apex.core` (接口)。
- 依赖 `com.force.api:force-wsc`
## 成功标准
1. 能够将 `CompileIssue` SOAP 对象正确转换为 `ApexCompileIssue` POJO。
2. 能够将 `CompileClassResult``CompileTriggerResult` 统一转换为 `CompileResult` 对象。
3. 能够通过 Service 接口传入 WSDL 内容,返回生成的 Apex 代码列表或错误信息。
## 相关文档
2026-01-28 18:17:11 +08:00
- [设计文档](../design/2026-01-28-013-1-Apex编译器接口设计.md)
- [决策记录](../decisions/2026-01-28-013-1-ADR-Apex编译器接口技术选型.md)
- [提示词文档](../prompts/2026-01-28-013-1-prompt-Apex编译器接口与错误处理.md)
- [变更日志](../changelog/2026-01-28-013-1-changelog.md)
- [复盘文档](../retros/2026-01-28-013-1-retro.md)
- [API 文档](../api-docs/2026-01-28-013-1-api.md)