3.6 KiB
3.6 KiB
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)
@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());
}
}