8.3 KiB
变更日志 - Apex 代码编译和执行
元数据
- 需求编号: 002-02
- 需求名称: Apex 代码编译和执行
- 创建时间: 2026-02-02
- 创建人: AI Assistant
- 版本号: v1.0.0
- 状态: 已完成
变更概述
实现 Apex 代码编译和执行功能,提供完整的 Apex 开发工具支持。包括编译 Apex 类、编译 Apex 触发器、编译并运行测试、执行匿名 Apex 代码等核心功能,以及查询编译历史、测试结果、代码覆盖率等辅助功能。
变更内容
新增功能
1. Apex 代码编译功能
-
编译 Apex 类 (
compileClasses)- 支持批量编译 Apex 类
- 返回编译结果(成功/失败、错误信息、行号、列号)
- 自动保存编译历史到数据库
-
编译 Apex 触发器 (
compileTriggers)- 支持批量编译 Apex 触发器
- 返回编译结果(成功/失败、错误信息、行号、列号)
- 自动保存编译历史到数据库
-
编译并测试 (
compileAndTest)- 支持同时编译类和触发器
- 支持运行单元测试
- 返回编译结果和测试结果
- 自动保存测试结果和代码覆盖率到数据库
2. Apex 代码执行功能
- 执行匿名 Apex 代码 (
executeAnonymous)- 支持执行任意 Apex 代码片段
- 返回执行结果(编译状态、执行状态、异常信息)
- 支持获取执行日志
3. 查询功能
-
查询编译历史 (
queryCompileHistory)- 支持按编译类型筛选
- 支持按时间范围筛选
- 返回编译历史列表
-
查询测试结果 (
queryTestResults)- 支持按测试运行 ID 筛选
- 支持按时间范围筛选
- 返回测试结果列表
-
查询代码覆盖率 (
queryCodeCoverage)- 支持按类名筛选
- 支持按类型(Class/Trigger)筛选
- 返回代码覆盖率列表
新增数据库表
-
datai_apex_compile_history - Apex 编译历史表
- 存储编译操作的历史记录
- 包含编译类型、代码内容、编译结果、错误信息、编译时间等字段
- 支持软删除(del_flag 字段)
-
datai_apex_test_result - Apex 测试结果表
- 存储测试运行的结果
- 包含测试运行 ID、运行测试数量、失败数量、执行时间等字段
- 支持软删除(del_flag 字段)
-
datai_apex_test_failure - Apex 测试失败详情表
- 存储测试失败的详细信息
- 包含类名、方法名、异常类型、错误消息、堆栈跟踪等字段
- 外键关联到测试结果表
- 支持软删除(del_flag 字段)
-
datai_apex_code_coverage - Apex 代码覆盖率表
- 存储代码覆盖率数据
- 包含类名、类型、总位置数、未覆盖位置数、覆盖率百分比等字段
- 外键关联到测试结果表
新增代码文件
Controller(3 个)
-
datai-salesforce-apex/src/main/java/com/datai/apex/controller/ApexCompileController.java- 提供编译相关接口(编译类、编译触发器、编译并测试)
-
datai-salesforce-apex/src/main/java/com/datai/apex/controller/ApexExecuteController.java- 提供执行相关接口(执行匿名代码)
-
datai-salesforce-apex/src/main/java/com/datai/apex/controller/ApexQueryController.java- 提供查询相关接口(查询编译历史、测试结果、代码覆盖率)
Service(2 个)
-
datai-salesforce-apex/src/main/java/com/datai/apex/service/IApexCompileService.java- 定义 Apex 编译和执行服务接口
-
datai-salesforce-apex/src/main/java/com/datai/apex/service/impl/ApexCompileServiceImpl.java- 实现 Apex 编译和执行服务
- 集成 Salesforce SOAP API
- 实现数据库持久化
- 使用 ReentrantLock 保证多线程安全
DTO(5 个)
CompileClassesDto.java- 编译类请求 DTOCompileTriggersDto.java- 编译触发器请求 DTOCompileAndTestDto.java- 编译并测试请求 DTOExecuteAnonymousDto.java- 执行匿名代码请求 DTORunTestsRequestDto.java- 运行测试请求 DTO
VO(7 个)
CompileClassResultVo.java- 编译类结果 VOCompileTriggerResultVo.java- 编译触发器结果 VOCompileAndTestResultVo.java- 编译并测试结果 VOExecuteAnonymousResultVo.java- 执行匿名代码结果 VORunTestsResultVo.java- 运行测试结果 VOCodeCoverageResultVo.java- 代码覆盖率结果 VOTestFailureVo.java- 测试失败详情 VO
Entity(4 个,代码生成器生成)
DataiApexCompileHistory.java- 编译历史实体DataiApexTestResult.java- 测试结果实体DataiApexTestFailure.java- 测试失败详情实体DataiApexCodeCoverage.java- 代码覆盖率实体
Mapper(4 个,代码生成器生成)
DataiApexCompileHistoryMapper.java- 编译历史 MapperDataiApexTestResultMapper.java- 测试结果 MapperDataiApexTestFailureMapper.java- 测试失败详情 MapperDataiApexCodeCoverageMapper.java- 代码覆盖率 Mapper
新增 REST API 接口(7 个)
- POST
/api/apex/compile/classes- 编译 Apex 类 - POST
/api/apex/compile/triggers- 编译 Apex 触发器 - POST
/api/apex/compile/compile-and-test- 编译并测试 - POST
/api/apex/execute/anonymous- 执行匿名 Apex 代码 - GET
/api/apex/compile/history- 查询编译历史 - GET
/api/apex/test/results- 查询测试结果 - GET
/api/apex/test/coverage- 查询代码覆盖率
新增 SQL 脚本
docs/sql/2026-02-02-002-02-Apex代码编译和执行.sql- 创建 4 张数据库表
- 包含标准字段(dept_id、create_by、create_time、update_by、update_time、del_flag)
- 建立适当的索引
新增文档
影响范围
模块影响
- 模块:
datai-salesforce-apex - 类型: 新增功能模块
文件影响
- 新增文件: 29 个
- Controller: 3 个
- Service: 2 个
- DTO: 5 个
- VO: 7 个
- Entity: 4 个(代码生成器生成)
- Mapper: 4 个(代码生成器生成)
- Mapper XML: 4 个(代码生成器生成)
数据库影响
- 新增表: 4 张
- datai_apex_compile_history
- datai_apex_test_result
- datai_apex_test_failure
- datai_apex_code_coverage
接口影响
- 新增接口: 7 个 REST API 接口
技术方案
架构设计
- 采用分层架构:Controller -> Service -> Factory -> Salesforce API
- 使用 Spring Boot + MyBatis 技术栈
- 集成 Salesforce SOAP API(apex.jar)
关键设计决策
- 数据持久化策略: 使用数据库持久化,支持历史查询和审计
- 结果处理方式: 直接使用 apex.jar 原生类,避免二次封装
- 并发控制策略: 使用 ReentrantLock 保证多线程安全
- 数据库表设计: 采用 4 张独立表,避免单表数据冗余
安全设计
- 使用 Spring Security 进行权限控制
- 所有接口需要登录认证(
@PreAuthorize("@ss.hasLogin()")) - 参数校验和异常处理
性能优化
- 使用 ReentrantLock 保证多线程安全
- 数据库索引优化
- 连接复用(通过 ApexConnectionFactory)
相关文档
测试说明
- 所有功能需要通过单元测试验证
- 测试覆盖率要求不低于 80%
- 需要覆盖正常场景和异常场景
- 需要测试多线程并发场景
注意事项
- 所有编译和执行操作都使用 source org 类型
- 需要确保 Salesforce 会话有效
- 大批量编译时需要考虑性能影响
- 数据库表需要定期清理历史数据