Apex 开发流程
要开发 Apex,你需要获取一个 Developer Edition 账户,编写并测试代码,然后部署代码。我们推荐按照以下流程进行 Apex 开发:选择合适的 Salesforce 开发组织 → 学习 Apex → 编写代码 → 同步编写测试 → 部署到 Sandbox 测试 → 部署到生产环境。此外,代码编写和测试完成后,你还可以将类和触发器添加到 AppExchange 应用包中。
推荐的七步开发流程
- 选择合适的 Salesforce 开发组织 —— 使用 Sandbox、Scratch Org 或 Developer Edition 组织进行开发
- 学习 Apex 相关知识 —— 通过 Trailhead 模块、开发者中心、代码示例等资源学习
- 编写 Apex 代码 —— 使用 VS Code、Code Builder 或 Developer Console 编写代码
- 编写代码的同时编写测试 —— 强烈推荐测试驱动开发(TDD)
- 部署到 Sandbox 组织(可选) —— 在隔离环境中完成最终单元测试
- 部署到生产组织 —— 使用 VS Code 扩展、Change Set 或 Metadata API 部署
- 打包到 AppExchange 应用(可选) —— 需要至少 75% 的测试覆盖率,所有测试必须通过
第一步:选择合适的 Salesforce 开发组织
你可以在 Sandbox、Scratch Org 或 Developer Edition 组织中进行 Apex 开发,但不能直接在 Production 组织中进行开发。面对这么多选择,以下内容将帮助你确定哪种组织类型最适合你,以及如何创建它。
Sandbox(推荐)
Sandbox 是生产组织元数据在独立环境中的副本,根据 Sandbox 类型的不同,包含不同数量的数据。Sandbox 为开发人员和管理员提供了一个安全的空间,用于试验新功能和验证变更,然后再将代码部署到生产环境。
- 安全保障:在 Sandbox 中的操作不会影响生产组织的数据和应用
- Salesforce DX 工具支持:启用了源追踪的 Developer 和 Developer Pro Sandbox 可以利用 Salesforce CLI、Code Builder 和 DevOps Center 等工具
- 用途:用于开发、测试和培训,而不会危及生产环境
Scratch Org(推荐)
Scratch Org 是基于源代码驱动的、临时的 Salesforce 代码和元数据部署。它是完全可配置的,允许你模拟不同的 Salesforce 版本以及不同的功能和设置。
- 生命周期:最长 30 天,默认 7 天
- 完全可配置:可以模拟不同 Salesforce 版本,启用不同功能和设置
- 源追踪:默认启用,专为 Salesforce DX 源驱动开发设计
- 适用场景:短期开发和测试项目、CI/CD 持续集成/持续交付、自动化测试环境
Developer Edition (DE) 组织
Developer Edition 组织是一个免费的组织,提供对 Enterprise Edition 组织中许多功能的访问权限。
- 免费:可以注册任意数量的 DE 组织
- 功能丰富:可以访问 Enterprise Edition 中的许多功能
- 限制:没有启用源追踪,不能用作 DevOps Center 中的开发环境,存储空间有限
- 过期风险:随着时间的推移可能变得过时;如果不定期登录则会过期
- 注册地址:developer.salesforce.com/signup
- 适用场景:个人学习和探索性开发
Trial Edition 组织 & Production 组织
Trial Edition(试用版):
- 通常在 30 天后过期,适合评估 Salesforce 功能
- 不适合用作永久开发环境
- Apex 触发器在试用版中可用,但转换为其他版本后会被禁用
- 重要提醒:在转换之前将代码部署到另一个组织,以保留你的 Apex 触发器
Production 组织(不支持开发):
- 生产组织是代码和应用的最终目的地,有真实用户访问数据
- 不能在生产组织中开发 Apex
- 在开发过程中,真实用户访问系统可能会破坏数据稳定性或损坏应用
第二步:选择 Apex 开发环境
有多种开发环境可用于编写 Apex 代码,请选择最适合你需求的环境。
Agentforce for Developers(AI 辅助开发)
Agentforce for Developers 是一个 AI 驱动的开发者工具,可以根据自然语言提示生成 Apex 代码,并在你输入时自动建议代码补全。使用它还可以轻松创建单元测试用例,帮助你达到所需的 Apex 测试覆盖率。
- 自然语言生成代码:通过提示词生成 Apex 代码
- 内联自动补全:基于 AI 的自动补全建议
- 测试用例生成:快速生成单元测试
- 安装:属于 Salesforce Expanded Pack 扩展(salesforcedx-einstein-gpt),在 VS Code 中默认启用
Salesforce Extensions for VS Code 与 Code Builder
Salesforce Extensions for Visual Studio Code:
- 轻量级、可扩展的 VS Code 编辑器
- 提供与开发组织(Scratch Org、Sandbox、DE Org)协作的功能
- 支持 Apex、Lightning Components 和 Visualforce 开发
Code Builder:
- 基于浏览器的桌面体验版本,所有工具已经安装和配置好
- 无需任何设置,可以在任何地方、任何计算机上灵活工作
- 拥有桌面版的所有功能
Developer Console(开发者控制台)
Developer Console 是 Salesforce 内置的集成开发环境(IDE),用于创建、调试和测试 Apex 类和触发器。
如何打开:
- Lightning Experience:点击快速访问菜单 → Developer Console
- Salesforce Classic:点击 Your Name → Developer Console
Developer Console 支持的任务
- 编写代码:使用源代码编辑器添加代码,浏览组织中的包
- 编译代码:保存触发器或类时自动编译,任何编译错误都会立即报告
- 调试:查看调试日志并设置有助于调试的检查点
- 测试:执行特定测试类或组织中所有测试类的测试,查看测试结果并检查代码覆盖率
- 性能检查:检查调试日志以定位性能瓶颈
- SOQL 查询:使用 Query Editor 查询组织中的数据并查看结果
- 颜色编码与自动补全:源代码编辑器使用颜色方案提高代码元素的可读性,并自动补全类名和方法名
Salesforce Setup 代码编辑器
在 Salesforce Setup 中,你可以直接在浏览器中查看和编辑 Apex 类和触发器。
- 所有类和触发器在保存时编译,语法错误会被标记——代码编译无错误后才能保存
- 代码行号显示
- 颜色编码区分注释、关键字、字面字符串等代码元素
如何访问 Apex 类:Setup → Quick Find 输入 "Apex" → 选择 Apex 类或触发器 → 点击 Edit 进行编辑
如何创建触发器:Setup → Quick Find 输入 "Object" → Object Manager → 选择对象 → Triggers → 点击 New 输入代码
注意:不能使用 Salesforce Setup 代码编辑器修改生产组织中的 Apex。
其他编辑器
你也可以使用任何文本编辑器(如记事本)来编写 Apex 代码。然后可以:
- 复制粘贴代码到你的应用中(Developer Console 或 Setup 代码编辑器)
- 使用 API 调用直接部署代码
构建你自己的 Apex IDE:
- 使用 SOAP API 方法编译触发器和类,并执行测试方法
- 使用 Metadata API 方法将代码部署到生产环境
第三步:学习 Apex
获得开发者账户后,有很多资源可以帮助你学习 Apex。
Trailhead 学习模块
以下 Trailhead 模块为初学者和中级程序员提供了全面的 Apex 教程:
- Quick Start: Apex —— 基于项目的入门教程
- Apex Basics & Database —— Apex 基础与数据库操作(DML)
- Apex Triggers —— 触发器语法与用例
- Apex Integration Services —— HTTP 与 Web 服务集成
- Apex Testing —— 单元测试与代码覆盖率
- Asynchronous Apex —— Future、Batch 和 Scheduled Apex 异步模式
使用这些模块学习 Apex 的基础知识,以及如何通过触发器、单元测试、异步 Apex、REST Web 服务和 Lightning 组件来添加自定义业务逻辑。
更多学习资源
Salesforce Developers Apex Developer Center:
- 包含关于 Apex 编程语言的文章、快速入门指南和最佳实践
- 适合初学者和高级程序员
- 网址:Apex Developer Center
代码示例与 SDK:
- 开源代码示例、参考代码和最佳实践
- Apex-recipes:遵循最佳实践的简洁、有意义的 Apex 代码示例库(GitHub)
培训课程:
- Salesforce Trailhead Academy 提供正式的培训课程
- Salesforce Credentials 帮助你验证技能水平
Apex 开发者指南中的内容索引
适合初学者:
- Apex 简介——文档约定、核心概念、快速入门教程
- 类、对象和接口
- 测试 Apex
- 执行调控器与限制(Execution Governors and Limits)
适合高级程序员:
- 触发器与批量请求最佳实践
- 高级 Apex 编程示例
- 理解 Apex Describe 信息
- 异步执行(@future 注解)
- Batch Apex 与 Apex Scheduler
这份开发者指南的结构旨在同时支持初学者和高级 Apex 程序员。
第四步:编写测试
测试是成功进行长期开发的关键,也是开发过程中的一个关键组成部分。我们强烈建议你使用测试驱动开发(TDD)流程,即测试开发与代码开发同时进行。
单元测试概述
为了促进健壮、无错误代码的开发,Apex 支持创建和执行单元测试。单元测试是验证特定代码段是否正常工作的类方法。
单元测试方法的特征:
- 不接受任何参数
- 不向数据库提交数据
- 不发送电子邮件
- 在方法定义中使用
@IsTest注解标记 - 必须定义在测试类中(即带有
@IsTest注解的类)
最佳实践:Salesforce 建议使用@IsTest而不是testMethod关键字。testMethod关键字可能在未来的版本中被弃用。
代码覆盖率要求
在部署 Apex 或将 Apex 打包到 AppExchange 之前,必须满足以下条件:
- 单元测试必须覆盖至少 75% 的 Apex 代码,且所有测试必须成功完成
- 每个触发器都必须有一些测试覆盖率
- 所有类和触发器必须成功编译
关于代码覆盖率的重要说明:
- 部署到生产组织时,组织命名空间中的每个单元测试都会默认执行
- 对
System.debug的调用不计入 Apex 代码覆盖率 - 测试方法和测试类不计入 Apex 代码覆盖率
测试覆盖率最佳实践
不要只关注被覆盖的代码百分比。相反,要确保你的应用的每一个用例都被覆盖。
全面的测试覆盖应包括:
- 正向用例(Positive Cases) —— 预期成功的正常场景
- 负向用例(Negative Cases) —— 错误处理和边界情况
- 批量记录(Bulk Records) —— 测试多条记录,而不仅仅是单条记录场景
- 单条记录(Single Records) —— 验证单条记录时的行为
这种全面的方法可以确保 75% 或更多的代码被单元测试覆盖,更重要的是,确保你的应用能够正确处理真实世界中的各种场景。记住:目标是质量保证,而不仅仅是达到一个覆盖率数字。
第五步:部署 Apex 到 Sandbox 组织
Sandbox 在独立环境中创建你的 Salesforce 组织副本。使用它们进行开发、测试和培训,而不会危及生产组织中的数据和应用。Sandbox 与你的生产组织是隔离的,因此你在 Sandbox 中执行的操作不会影响生产组织。
Sandbox 部署方法
通过 VS Code 部署:
- 使用 Salesforce Extensions for Visual Studio Code
- 从本地项目部署到 Salesforce 组织
通过 Metadata API 部署:
- 使用
deploy()Metadata API 调用 - 从开发者组织部署到 Sandbox 组织
有用的 API 调用:
runTests()—— 在开发或 Sandbox 组织中运行特定类、类列表或命名空间的单元测试
Salesforce CLI:
- 支持对任意组织进行开发(Develop Against Any Org)
第六步:部署到 Salesforce 生产组织
完成所有单元测试并验证 Apex 代码正常运行后,最后一步是将 Apex 部署到 Salesforce 生产组织。
生产环境部署方法
- Visual Studio Code:从本地项目部署到 Salesforce 组织(推荐)
- Change Sets(变更集):通过 Salesforce 用户界面部署 Apex,无需外部工具
- 其他选项:Metadata API 部署、Salesforce CLI 源驱动开发
部署前检查清单:
- 单元测试覆盖率达到 75% 以上
- 所有测试必须成功通过
- 每个触发器都有测试覆盖率
- 所有类和触发器编译无错误
第七步:将 Apex 代码添加到 AppExchange 应用
你可以将 Apex 类或触发器包含在你为 AppExchange 创建的应用中。
AppExchange 打包要求
- 至少 75% 的累计测试覆盖率 —— 包中包含的所有 Apex 代码
- 每个触发器必须有测试覆盖率
- 上传到 AppExchange 时,所有测试都会运行,以确保它们能够无错误地通过
安装时测试:
- 带有
@isTest(OnInstall=true)注解的测试会在包安装到安装者的组织时运行 - 你可以指定在包安装期间应运行哪些测试
- 这组测试子集必须通过,包安装才能成功
更多信息,请参阅 Second-Generation Managed Packaging Developer Guide。
总结
通过本章的学习,我们完整地掌握了 Apex 开发的端到端流程:
- 开发组织选择:掌握四种组织类型(Sandbox、Scratch Org、DE Org、Trial Edition)的特点与适用场景,牢记不能在 Production 组织中直接开发
- 开发环境选择:从 AI 驱动的 Agentforce for Developers,到 VS Code 扩展和 Code Builder,再到内置的 Developer Console 和 Setup 代码编辑器,选择最适合你的工具
- 学习路径:充分利用 Trailhead 模块、Apex Developer Center、代码示例(Apex-recipes)和 Trailhead Academy 培训课程
- 测试驱动开发:使用 @IsTest 编写健壮的单元测试,达到 75% 以上的代码覆盖率,确保覆盖正向/负向用例以及单条/批量记录场景
- 部署策略:先在 Sandbox 中测试,再通过 VS Code、Change Set 或 Metadata API 部署到生产环境
- AppExchange 打包:满足 75% 累计测试覆盖率要求,配置安装时测试(OnInstall=true),确保打包顺利通过
掌握了这个完整的开发流程,你就为自己的 Apex 开发之旅奠定了坚实的方法论基础。
感谢阅读本指南。如需更详细的信息,请参阅 Apex 开发者指南后续章节。