95 lines
3.6 KiB
Markdown
95 lines
3.6 KiB
Markdown
# API 文档:Apex 动态代码执行服务
|
||
|
||
## 元数据
|
||
- 需求编号:REQ-013-2
|
||
- 创建时间:2026-01-27
|
||
- 创建人:AI Assistant
|
||
- 状态:已发布
|
||
|
||
## API 概述
|
||
本模块提供对 Salesforce Apex 代码的动态执行能力。它作为一个无状态的 API 代理,封装了 Salesforce SOAP API 的 `executeAnonymous` 方法。主要功能包括执行匿名 Apex 代码块、配置调试日志级别、解析执行结果以及处理编译和运行时异常。
|
||
|
||
该服务主要通过 `ApexExecutorService` 接口暴露给上层应用(如 Controller)。
|
||
|
||
## 接口列表
|
||
|
||
### 1. 执行 Apex 代码
|
||
|
||
- **方法签名**:`ExecuteResult execute(String apexCode, DebuggingOptions options)`
|
||
- **功能描述**:在连接的 Salesforce 组织中执行一段匿名的 Apex 代码,并根据选项返回执行结果和日志。
|
||
- **所属接口**:`com.datai.apex.core.ApexExecutorService`
|
||
|
||
#### 请求参数
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|---|---|---|---|
|
||
| apexCode | String | 是 | 需要执行的 Apex 代码片段。例如:`System.debug('Hello');` |
|
||
| options | DebuggingOptions | 否 | 调试选项,用于控制日志级别。如果为 null,将使用默认配置(System/Apex_Code 为 DEBUG,其他为 INFO)。 |
|
||
|
||
#### 响应参数 (`ExecuteResult`)
|
||
|
||
| 字段名 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| success | boolean | 执行是否成功(无未捕获的运行时异常)。 |
|
||
| compiled | boolean | 代码是否编译通过。 |
|
||
| debugLog | String | 完整的调试日志内容。 |
|
||
| exceptionMessage | String | 异常信息(编译错误描述或运行时异常消息)。 |
|
||
| exceptionStackTrace | String | 异常堆栈跟踪(仅运行时异常)。 |
|
||
| executionTime | Long | 执行耗时(毫秒)。 |
|
||
|
||
#### 异常说明
|
||
|
||
- **ApexCompilationException**:当 Apex 代码存在语法错误导致编译失败时抛出。包含详细的行列号和错误信息。
|
||
- **ApexConnectionException**:当无法连接到 Salesforce 或 API 调用失败(网络问题、认证失效)时抛出。
|
||
|
||
### 2. 模型详解
|
||
|
||
#### DebuggingOptions
|
||
|
||
用于配置 Salesforce 的 `DebuggingHeader`。
|
||
|
||
- **属性**:
|
||
- `categories` (Map<LogCategory, LogCategoryLevel>): 日志类别与级别的映射。
|
||
- `preset` (String): 预设配置名称(预留字段)。
|
||
|
||
- **LogCategory 枚举**:`Db`, `Workflow`, `Validation`, `Callout`, `Apex_code`, `Apex_profiling`, `Visualforce`, `System`, `All`.
|
||
- **LogCategoryLevel 枚举**:`None`, `Error`, `Warn`, `Info`, `Debug`, `Fine`, `Finer`, `Finest`.
|
||
|
||
#### ExecuteResult
|
||
|
||
执行结果的统一封装。
|
||
|
||
- **设计初衷**:统一处理成功和失败场景,前端可以直接通过 `success` 和 `compiled` 字段判断状态,而无需解析复杂的 SOAP Fault。
|
||
|
||
## 示例
|
||
|
||
### 调用示例 (Java)
|
||
|
||
```java
|
||
@Autowired
|
||
private ApexExecutorService apexExecutorService;
|
||
|
||
public void runApex() {
|
||
String code = "System.debug('Hello World');";
|
||
|
||
// 配置日志级别
|
||
DebuggingOptions options = new DebuggingOptions();
|
||
options.addCategory(LogCategory.Apex_code, LogCategoryLevel.Debug);
|
||
|
||
try {
|
||
ExecuteResult result = apexExecutorService.execute(code, options);
|
||
if (result.isSuccess()) {
|
||
System.out.println("Log: " + result.getDebugLog());
|
||
} else {
|
||
System.err.println("Runtime Error: " + result.getExceptionMessage());
|
||
}
|
||
} catch (ApexCompilationException e) {
|
||
System.err.println("Compile Error: " + e.getMessage());
|
||
}
|
||
}
|
||
```
|
||
|
||
## 相关文档
|
||
- [需求文档](../requirements/REQ-013-2.md)
|
||
- [设计文档](../design/2026-01-27-013-2-Apex动态代码执行与日志管理设计.md)
|