使用 Salesforce DX 开发应用:Scratch Org 与 Aura 组件

Salesforce DX 把真相源从 org 转移到版本控制,用 scratch org 和 Salesforce CLI 实现源驱动开发。本文带你从启用 Dev Hub、安装 CLI,到创建项目、scratch org、示例数据,再一步步构建一个基于 Aura 组件的地理定位应用。...

📅 2026/9/26 ✍️ ponybai 🏷️ salesforce, salesforce-dx, developer, aura, headless

学习目标

slide_2

完成本单元后,你将能够:

  • 描述传统 org 开发模型与模块化包开发模型的区别。
  • 描述包(package)的关键特征。

源驱动开发入门

slide_3

Salesforce DX 增加了一套工具,简化整个开发生命周期:改善团队开发与协作、促进自动化测试和持续集成、让发布周期更高效敏捷。Salesforce DX 不只是一套工具——它提供了 change set 开发的替代方案,把「真相源」(source of truth)从 org 转移到版本控制系统(VCS),把开发重心从 org 开发转移到包(package)开发。

什么是 Scratch Org?

slide_4

许多 Salesforce DX 工具都让你使用一种叫 scratch org 的 org。Scratch org 是一个专用、可配置、短期的 Salesforce 环境,能提升开发过程中的生产力与协作,并促进自动化测试和持续集成。你可以在以下场景中创建新的 scratch org:开始新项目、开始新功能分支、测试新功能、开始自动化测试、直接在 org 中做开发任务,或从一个全新 org「从零开始」。

虽然 scratch org 本质是一次性的,但真正的价值在 scratch org 配置文件里:通过配置文件,你可以用不同的 Salesforce 版本、只启用你想要的特性来配置 scratch org,并把配置分享给团队,让每个人都用相同的基础 org 做开发。

Scratch Org 会取代 Sandbox 吗?

slide_5

不会。Scratch org 不是用来复制 sandbox 或生产 org 的。由于其短暂性(最长 30 天生命周期),scratch org 非常适合开发新功能、自定义或包,也适合单元测试和持续集成。而包含生产 org 全部元数据的 sandbox,仍用于最终的用户验收测试、持续交付和 staging。

启用 Dev Hub

slide_6

Dev Hub 让你和团队能够创建和管理 scratch org。要开始使用 scratch org,需要选择一个 org 作为 Dev Hub。虽然可以在任何付费 org 中启用 Dev Hub,但最好在生产之外练习——在本模块中使用 Developer Edition org 或 Trailhead Playground 启用。步骤:登录所选的 Dev Hub org,在 Setup 的 Quick Find 中输入 Dev Hub 并选择,点击启用按钮。

安装并配置 Salesforce CLI

slide_7

从 developer.salesforce.com/tools/salesforcecli 安装 CLI,然后运行 sf update 确认已正确安装并更新到最新版本(会看到类似 @salesforce/cli: Updating CLI... 的输出)。许多 CLI 命令的 flag 都有长短两种名称,例如 --target-org 的短名是 -o。

登录 Sandbox 与 Org 管理

slide_8

用 CLI 登录 Dev Hub 以授权创建 scratch org:运行 sf org login web --set-default-dev-hub --alias DevHub,--set-default-dev-hub 把该 org 设为默认 Dev Hub,--alias 设置别名(比冗长的用户名更好记)。重要:只在 Dev Hub 上用 --set-default-dev-hub,在 sandbox 上不要用,否则 CLI 会误以为它是 Dev Hub。

别名(aliasing)是管理和追踪 org 的强大方式,也是最实践。你可以随时运行 sf org list 查看所有已登录的 org,加 --all 还能看到最近删除的 scratch org。

准备创建应用

slide_9

本单元创建 Salesforce DX 项目、配置 scratch org 定义文件、创建 scratch org,并生成示例数据。

学习目标

slide_10

完成本单元后,你将能够:

  • 解释 Salesforce DX 项目结构。
  • 描述如何使用 Salesforce CLI 创建项目。
  • 描述如何使用 Salesforce CLI 导入示例数据。

创建 Salesforce DX 项目

slide_11

在构建第一个应用前,先创建项目并连接到源码仓库。Salesforce DX 项目是包元数据(一组相关代码和自定义)的本地副本,也包含同步本地项目源码与 scratch org 元数据所需的核心资产。本模块创建一个使用 Aura 组件的简单地理定位应用,项目名为 geolocation。

在终端导航到项目位置,运行 sf project generate --name geolocation,它会创建 geolocation 文件夹并搭好项目骨架。项目包含 sfdx-project.json(标识这是 Salesforce DX 项目、指明源码路径和 API 版本)、config/project-scratch-def.json(确定 scratch org 配置)以及 force-app 源码文件夹。

配置 Scratch Org 定义文件

slide_12

Scratch org 定义文件让你能轻松创建具有不同特性或偏好的 scratch org 用于测试。例如可以设置 enables1EncryptedStoragePref2 来开关 Salesforce 移动 Web 缓存——开发时禁用缓存,能省去反复刷新页面等待组件代码生效的麻烦。可以按需更新 config/project-scratch-def.json,例如修改 orgName 属性。注意:禁用安全持久浏览器缓存会显著影响性能,生产环境应始终启用。

创建 Scratch Org

slide_13

在 Package Development Model 中使用 scratch org 的基本工作流:把本地源码和元数据推送到 scratch org → 把在 scratch org 中的改动拉回本地项目 → 与源码仓库同步。

创建 scratch org:进入 geolocation 项目目录,运行 sf org create scratch --set-default --definition-file config/project-scratch-def.json --alias GeoAppScratch。其中 --set-default 把它设为项目默认 org,--definition-file 指定配置文件,--alias 设置别名。Dev Hub 版本决定每天可创建的 scratch org 数量和可同时活跃的数量。

创建示例数据

slide_14

Scratch org 自带一些基于所选版本的标准数据,但最好添加与应用相关的示例数据。用 Salesforce CLI 创建几个测试账户(如 Marriott Marquis、Hilton Union Square、Hyatt),命令形如 sf data create record --sobject Account --values "Name='Marriott Marquis' ..."。之后可以用 sf data export tree 把示例数据导出到 data/ 目录,未来用 sf data import tree 重新导入。建议把 .sf 文件夹加入 .gitignore(它存放 scratch org 的临时信息)。

构建地理定位应用

slide_15

本单元用 Salesforce CLI 本地编写代码,同步到 scratch org 测试,构建地理定位应用。

学习目标

slide_16

完成本单元后,你将能够:

  • 描述如何使用 CLI 创建 Apex 类。
  • 描述如何使用 CLI 命令创建 Aura 组件。

我们要构建什么?

slide_17

我们通过本地编写代码、再同步到 scratch org 测试来构建地理定位应用,涉及 Apex 和多个 Aura 组件。组件交互的高层流程:Account Search 组件调用服务端动作搜索账户 → Apex 方法返回 SOSL 搜索结果 → Account Search 组件触发事件通知其他组件 → 处理该事件的组件向用户显示数据。这种设计让应用更灵活、易维护,也便于在各应用中独立复用这些组件。

创建 Account Search Apex 控制器

slide_18

创建一个 Apex 控制器,让 Aura 组件能检索带位置信息的账户列表。用 CLI 脚手架 Apex 类:sf apex generate class --name AccountSearchController --output-dir force-app/main/default/classes。该类用 @AuraEnabled 的 searchAccounts 方法执行 SOSL 搜索(FIND :searchTerm RETURNING Account(...)),返回匹配的账户列表。然后用 sf project deploy start 部署到 scratch org。

创建 Accounts Loaded Aura 事件

slide_19

按照单一职责设计原则,通过触发一个事件来委托搜索结果的显示,该事件由后续创建的 Account Map 和 Account List 组件处理。用 CLI 创建事件:sf lightning generate event --name AccountsLoaded --output-dir force-app/main/default/aura。事件定义为一个 APPLICATION 类型事件,带一个 accounts 属性(类型 Account[])。然后部署到 scratch org。

创建 Account Search Aura 组件

slide_20

Aura 组件文件以 bundle 形式分组,存放在 force-app/main/default/aura 文件夹中。用 CLI 脚手架组件:sf lightning generate component --name AccountSearch --output-dir force-app/main/default/aura。AccountSearch 组件包含一个输入框让用户输入搜索词(如账户名或地址),并在初始化或搜索词变化时注册事件处理器;客户端控制器和 helper 负责调用 searchAccounts 并触发 AccountsLoaded 事件。部署到 scratch org。

创建 Account List Aura 组件

slide_21

创建一个在数据表中显示账户的 Aura 组件 AccountList。它订阅上一步创建的 c:AccountsLoaded 事件。组件用 lightning:datatable 展示账户,客户端控制器把事件数据转换成 datatable 期望的格式,并在用户点击「View details」时导航到对应账户记录。部署到 scratch org。

构建账户地图显示

slide_22

本单元构建地理定位应用的最终组件,把它们整合在一起,并验证应用。

学习目标

slide_23

完成本单元后,你将能够:

  • 描述用于同步项目与 scratch org 的 Salesforce CLI 命令。
  • 描述用于创建权限集的 Salesforce CLI 命令。
  • 理解如何使用 Aura 组件构建应用。

我们要构建什么?(整合组件)

slide_24

本步骤构建地理定位应用的最后几个组件,把全部功能整合起来:创建一个把账户地址可视化为地图标记的 Aura 组件、创建一个自定义选项卡用于导航到应用,并用权限集授予用户访问应用的权限。

创建 Account Map Aura 组件

slide_25

AccountMap 组件用 lightning:map 在地图上显示账户。它监听 AccountsLoaded 事件,把事件数据转换成 lightning:map 期望的 mapMarkers 格式(位置、标题、描述、图标),然后部署到 scratch org。

创建 Account Locator Aura 组件

slide_26

AccountLocator 是主组件,用于在 Lightning 页面、Salesforce 移动端和自定义选项卡中向终端用户显示应用,也是本项目的最后一个组件。它通过 lightning:layout 组合 AccountSearch、AccountList 和 AccountMap 三个组件。组件封装和组件复用是 Lightning Component Framework 的两大特性——把细粒度组件组合成更大的组件,就能构建更有趣的应用。

创建 Account Locator 自定义选项卡

slide_27

在 Lightning Experience 桌面和 Salesforce 移动端显示 Aura 组件的简便方式是自定义选项卡。打开 scratch org(sf org open),在 Setup 中进入 Tabs,新建一个 Lightning Component 选项卡:组件选择 c:AccountLocator,Tab Label 填 Account Locator,图标选 Map,把所有配置文件的选项卡可见性设为 Tab Hidden,保存。

创建 Geolocation 权限集

slide_28

为控制谁有权访问地理定位应用,创建一个权限集并授予 Account Locator 选项卡可见性。在 Setup 的 Permission Sets 中新建 Geolocation 权限集,在 Object Settings 中把 Account Locator 选项卡设为 Available 和 Visible,再把该权限集分配给你自己。

元数据魔法:检索变更到项目

slide_29

此前你一直在本地项目工作并把元数据推送到 scratch org,本步骤你在 scratch org 中直接做了一些改动。现在用一条命令 sf project retrieve start 就能把在 scratch org 中改动的所有元数据检索到本地项目。在此之前,先在 .forceignore 文件中加入 **/profiles,忽略不相关、不应纳入源码仓库的 profile 变更。

验证应用

slide_30

虽然可以用开发时同一个 scratch org 测试,但建议始终从一个全新的 scratch org 开始,确保你已把所有源码从 org 中外化。步骤:创建新 scratch org(sf org create scratch ... --alias GeoTestOrg)→ 部署本地源码(sf project deploy start --target-org GeoTestOrg)→ 分配权限集(sf org assign permset --name Geolocation)→ 导入示例数据(sf data import tree --files data/Account.json)→ 打开 org,从 App Launcher 选择 Account Locator 测试。验证成功即完成!


文章来源:Trailhead - App Development with Salesforce DX