datai/datai-scenes/datai-scene-salesforce/docs/prompts/2026-02-03-003-03-prompt-部署操作.md

3.8 KiB
Raw Permalink Blame History

提示词:部署操作

输入引用

Context Maps

目标

实现 Salesforce Metadata API 的通用部署功能。 核心是提供一个 deploy 服务,接收 ZIP 字节数组,调用 Salesforce 的 deploy 操作,并提供同步轮询、异步状态查询和取消部署的能力。 此服务不负责 ZIP 包的构建(由 003-02 负责),只负责 ZIP 包的传输和部署过程管理。

输出格式

  1. 代码文件

    • MetadataDeployController.java: REST API 接口 (Spring Boot Controller)
    • MetadataDeployService.java: 核心业务逻辑 (Spring Service)
    • MetadataDeployRepository.java: 数据访问 (MyBatis Plus Mapper复用 003-02)
    • MetadataDeployEntity.java: 实体类 (复用 003-02)
    • DeployResult.java, CancelResult.java: DTO 类
    • MetadataConnectionFactory.java: 连接工厂 (复用)
  2. 测试文件

    • MetadataDeployServiceTest.java: 单元测试

约束

  1. 技术栈

    • Spring Boot 3.x
    • MyBatis Plus
    • Salesforce WSC (Web Service Connector)
    • Java 17+
  2. 架构约束

    • 接口签名Service 的 deploy 方法必须接收 byte[] zipFile,而不是具体的 Metadata 对象(参考 ADR-003-03
    • 同步轮询Service 层必须实现轮询逻辑(提交 -> 循环 checkStatus -> 返回最终结果),以简化前端调用(参考 ADR-003-02
    • 异常处理:必须捕获 WSC 的 ConnectionException 并转换为自定义运行时异常 SalesforceOperationException
  3. 代码规范

    • 遵循 Google Java Style Guide。
    • 使用 Lombok @Data, @Slf4j 等注解。
    • REST API 必须返回统一的 ApiResponse<T> 结构。

Rule Set

  1. 部署流程

    • Controller 接收 MultipartFile -> 获取 byte[] -> 调用 Service。
    • Service 调用 connection.deploy(zipFile, deployOptions) -> 获取 AsyncResult
    • Service 立即保存 Queued 状态到数据库。
    • Service 进入轮询循环(默认每 1 秒查一次,最多查 60 次,可配置)。
    • 轮询结束或超时后,更新数据库状态,并返回最终的 DeployResult
  2. 状态同步

    • checkDeployStatus 时,如果 Salesforce 返回的状态(Done, Succeeded, Failed)与数据库不一致,必须更新数据库。
  3. JSON 解析

    • deployOptions 参数通过 JSON 字符串传递,需使用 Jackson ObjectMapper 解析为 com.sforce.soap.metadata.DeployOptions
    • 必须设置默认值:rollbackOnError = true, singlePackage = true

验收标准

  1. 功能完整性

    • 能成功接收并部署 ZIP 文件。
    • 能轮询直到部署完成(成功或失败)。
    • 能通过 ID 查询部署状态。
    • 能取消正在进行的部署。
  2. 代码质量

    • Service 层不依赖具体的 Metadata 子类。
    • 异常处理完善,无未捕获的受检异常。
    • 单元测试覆盖率 > 80%。

风险

  • 大文件上传ZIP 文件过大可能导致 OOM 或上传超时。需在 Controller 配置 MultipartFile 大小限制(如 50MB
  • 轮询超时Salesforce 部署可能非常慢。需在 Service 中设置合理的轮询上限,避免线程卡死。