datai/docs/archive/api-docs/apex/2026-01-27-013-2-api.md

3.6 KiB
Raw Permalink Blame History

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

执行结果的统一封装。

  • 设计初衷:统一处理成功和失败场景,前端可以直接通过 successcompiled 字段判断状态,而无需解析复杂的 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());
    }
}

相关文档