datai/datai-scenes/datai-scene-salesforce/docs/prompts/2026-02-02-002-02-prompt-Apex代码编译和执行.md

9.2 KiB
Raw Permalink Blame History

提示词Apex 代码编译和执行

引用真源

需求描述

根据需求文档,实现 Apex 代码编译和执行功能,包括:

  1. CompileClasses:编译 Apex 类,接收类代码数组,返回编译结果
  2. CompileTriggers:编译 Apex 触发器,接收触发器代码数组,返回编译结果
  3. CompileAndTest:编译并运行测试,支持编译类、触发器、删除类、删除触发器,并运行测试
  4. ExecuteAnonymous:执行匿名 Apex 代码,接收代码字符串,返回执行结果
  5. 查询编译历史:支持按编译类型、时间范围查询编译历史记录
  6. 查询测试结果支持按测试运行ID、时间范围查询测试结果
  7. 查询代码覆盖率:支持按类名、类型查询代码覆盖率

设计方案

根据设计文档,采用以下技术方案:

  1. 架构设计Controller -> Service -> Factory -> Salesforce API 分层架构
  2. 连接管理:使用 ApexConnectionFactory 获取 SoapConnection 实例
  3. 数据持久化:使用 MyBatis Plus 将编译和测试结果持久化到数据库
  4. 并发控制:使用 ReentrantLock 保证多线程安全
  5. 权限控制:使用 Spring Security 进行方法级权限控制
  6. 固定使用 source org:所有编译和执行操作都使用 source org 类型

数据库表结构

根据 SQL 脚本,需要创建以下 4 张表:

  1. datai_apex_compile_history - Apex 编译历史表
  2. datai_apex_test_result - Apex 测试结果表
  3. datai_apex_test_failure - Apex 测试失败详情表
  4. datai_apex_code_coverage - Apex 代码覆盖率表

所有表包含标准字段dept_id、create_by、create_time、update_by、update_time、del_flag

输出格式要求

必须包含的文件

  1. Controller 层(路径:datai-salesforce-apex/src/main/java/com/datai/apex/controller/

    • ApexCompileController.java - 编译相关接口(编译类、编译触发器、编译并测试)
    • ApexExecuteController.java - 执行相关接口(执行匿名代码)
    • ApexQueryController.java - 查询相关接口(查询编译历史、测试结果、代码覆盖率)
  2. Service 层(路径:datai-salesforce-apex/src/main/java/com/datai/apex/service/

    • IApexCompileService.java - 服务接口
    • impl/ApexCompileServiceImpl.java - 服务实现
  3. Mapper 层(路径:datai-salesforce-apex/src/main/java/com/datai/apex/mapper/

    • ApexCompileHistoryMapper.java - 编译历史 Mapper
    • ApexTestResultMapper.java - 测试结果 Mapper
    • ApexTestFailureMapper.java - 测试失败 Mapper
    • ApexCodeCoverageMapper.java - 代码覆盖率 Mapper
  4. Domain 层(路径:datai-salesforce-apex/src/main/java/com/datai/apex/domain/

    • ApexCompileHistory.java - 编译历史实体
    • ApexTestResult.java - 测试结果实体
    • ApexTestFailure.java - 测试失败实体
    • ApexCodeCoverage.java - 代码覆盖率实体
  5. DTO 层(路径:datai-salesforce-apex/src/main/java/com/datai/apex/model/dto/

    • CompileClassesDto.java - 编译类请求 DTO
    • CompileTriggersDto.java - 编译触发器请求 DTO
    • CompileAndTestDto.java - 编译并测试请求 DTO
    • ExecuteAnonymousDto.java - 执行匿名代码请求 DTO
    • RunTestsRequestDto.java - 运行测试请求 DTO
  6. VO 层(路径:datai-salesforce-apex/src/main/java/com/datai/apex/model/vo/

    • CompileClassResultVo.java - 编译类结果 VO
    • CompileTriggerResultVo.java - 编译触发器结果 VO
    • CompileAndTestResultVo.java - 编译并测试结果 VO
    • ExecuteAnonymousResultVo.java - 执行匿名代码结果 VO
    • RunTestsResultVo.java - 运行测试结果 VO
    • CodeCoverageResultVo.java - 代码覆盖率结果 VO
    • TestFailureVo.java - 测试失败详情 VO

REST API 接口列表

  1. POST /api/apex/compile/classes - 编译 Apex 类权限apex:compile:classes
  2. POST /api/apex/compile/triggers - 编译 Apex 触发器权限apex:compile:triggers
  3. POST /api/apex/compile/compile-and-test - 编译并测试权限apex:compile:compile-and-test
  4. POST /api/apex/execute/anonymous - 执行匿名 Apex 代码权限apex:execute:anonymous
  5. GET /api/apex/compile/history - 查询编译历史权限apex:compile:history
  6. GET /api/apex/test/results - 查询测试结果权限apex:test:results
  7. GET /api/apex/test/coverage - 查询代码覆盖率权限apex:test:coverage

代码规范要求

  1. 类命名:首字母大写,驼峰命名,如 ApexCompileController
  2. 方法命名:首字母小写,驼峰命名,如 compileClasses
  3. 变量命名:首字母小写,驼峰命名,如 compileType
  4. 注释规范
    • 类注释:使用 /** */,包含类功能描述、作者、创建时间
    • 方法注释:使用 /** */,包含方法功能、参数、返回值、异常描述
    • 字段注释:使用 /** */,包含字段功能描述
  5. 代码格式:使用 4 个空格缩进,行宽不超过 120 字符
  6. 导入规范:使用具体导入,避免通配符导入

异常处理要求

  1. 使用 SalesforceAuthException 处理认证相关异常
  2. 使用 SalesforceOperationException 处理操作相关异常
  3. 使用 SalesforceSessionException 处理会话相关异常
  4. 所有异常必须转换为友好的中文错误消息
  5. 记录详细的错误日志,包括错误时间、错误位置、错误原因

日志要求

  1. 使用 SLF4J 日志框架
  2. 关键操作必须记录日志(编译、执行、查询)
  3. 日志级别INFO正常操作、ERROR异常、DEBUG调试信息
  4. 日志内容:操作类型、操作参数、操作结果、执行时间

技术实现要点

1. 编译 Apex 类

@PreAuthorize("hasAuthority('apex:compile:classes')")
public CompileClassResultVo[] compileClasses(CompileClassesDto dto) {
    // 1. 获取 SoapConnection
    SoapConnection connection = apexConnectionFactory.getConnection("source");
    
    // 2. 调用 Salesforce API
    CompileClassResult[] results = connection.compileClasses(dto.getClasses());
    
    // 3. 转换结果
    CompileClassResultVo[] vos = convertToVo(results);
    
    // 4. 保存到数据库
    saveCompileHistory(vos, dto.getClasses(), "class");
    
    return vos;
}

2. 执行匿名 Apex 代码

@PreAuthorize("hasAuthority('apex:execute:anonymous')")
public ExecuteAnonymousResultVo executeAnonymous(ExecuteAnonymousDto dto) {
    // 1. 获取 SoapConnection
    SoapConnection connection = apexConnectionFactory.getConnection("source");
    
    // 2. 调用 Salesforce API
    ExecuteAnonymousResult result = connection.executeAnonymous(dto.getCode());
    
    // 3. 转换结果
    ExecuteAnonymousResultVo vo = convertToVo(result);
    
    return vo;
}

3. 数据库实体类示例

@Data
@EqualsAndHashCode(callSuper = true)
@TableName("datai_apex_compile_history")
public class ApexCompileHistory extends BaseEntity {
    @TableField("compile_type")
    private String compileType;
    
    @TableField("code_content")
    private String codeContent;
    
    @TableField("compile_success")
    private Boolean compileSuccess;
    
    @TableField("compile_problem")
    private String compileProblem;
    
    @TableField("compile_time")
    private Date compileTime;
}

测试要求

  1. 单元测试覆盖率不低于 80%
  2. 测试用例包含以下场景
    • 正常编译成功
    • 编译失败(语法错误)
    • 执行匿名代码成功
    • 执行匿名代码失败(编译错误)
    • 执行匿名代码失败(运行时异常)
    • 查询编译历史
    • 查询测试结果
    • 查询代码覆盖率
  3. 使用 JUnit 5 和 Mockito 进行测试
  4. 测试用例命名规范test+方法名+场景,如 testCompileClassesSuccess
  5. 测试数据使用 Mockito 模拟 Salesforce API 调用

注意事项

  1. 直接使用 apex.jar 原生类CompileClassResult、CompileTriggerResult、ExecuteAnonymousResult 等,避免二次封装
  2. 复用 ApexConnectionFactory:使用已有的连接工厂获取 SoapConnection 实例
  3. 固定使用 source org:所有编译和执行操作都使用 "source" 类型
  4. 多线程安全:使用 ReentrantLock 保证并发安全
  5. 数据库事务:使用 @Transactional 注解保证数据一致性
  6. 参数校验:使用 @Valid 和 @NotBlank 等注解进行参数校验
  7. 数据权限:使用若依的 @DataScope 注解进行数据权限控制(如果需要)
  8. 操作日志:使用若依的 @Log 注解记录操作日志

依赖项

  • datai-salesforce-auth 模块的 ApexConnectionFactory
  • datai-salesforce-common 模块的异常类
  • apex.jar 中的 SoapConnection、CompileClassResult 等类
  • Spring Security 用于权限控制
  • MyBatis Plus 用于数据库操作
  • Lombok 用于简化代码