学习目标
完成本单元后,你将能够:
- 描述传统 org 开发模型与模块化包开发模型的区别。
- 描述包(package)的关键特征。
源驱动开发入门
Salesforce DX 增加了一套工具,简化整个开发生命周期:改善团队开发与协作、促进自动化测试和持续集成、让发布周期更高效敏捷。Salesforce DX 不只是一套工具——它提供了 change set 开发的替代方案,把「真相源」(source of truth)从 org 转移到版本控制系统(VCS),把开发重心从 org 开发转移到包(package)开发。
什么是 Scratch Org?
许多 Salesforce DX 工具都让你使用一种叫 scratch org 的 org。Scratch org 是一个专用、可配置、短期的 Salesforce 环境,能提升开发过程中的生产力与协作,并促进自动化测试和持续集成。你可以在以下场景中创建新的 scratch org:开始新项目、开始新功能分支、测试新功能、开始自动化测试、直接在 org 中做开发任务,或从一个全新 org「从零开始」。
虽然 scratch org 本质是一次性的,但真正的价值在 scratch org 配置文件里:通过配置文件,你可以用不同的 Salesforce 版本、只启用你想要的特性来配置 scratch org,并把配置分享给团队,让每个人都用相同的基础 org 做开发。
Scratch Org 会取代 Sandbox 吗?
不会。Scratch org 不是用来复制 sandbox 或生产 org 的。由于其短暂性(最长 30 天生命周期),scratch org 非常适合开发新功能、自定义或包,也适合单元测试和持续集成。而包含生产 org 全部元数据的 sandbox,仍用于最终的用户验收测试、持续交付和 staging。
启用 Dev Hub
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
从 developer.salesforce.com/tools/salesforcecli 安装 CLI,然后运行 sf update 确认已正确安装并更新到最新版本(会看到类似 @salesforce/cli: Updating CLI... 的输出)。许多 CLI 命令的 flag 都有长短两种名称,例如 --target-org 的短名是 -o。
登录 Sandbox 与 Org 管理
用 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。
准备创建应用
本单元创建 Salesforce DX 项目、配置 scratch org 定义文件、创建 scratch org,并生成示例数据。
学习目标
完成本单元后,你将能够:
- 解释 Salesforce DX 项目结构。
- 描述如何使用 Salesforce CLI 创建项目。
- 描述如何使用 Salesforce CLI 导入示例数据。
创建 Salesforce DX 项目
在构建第一个应用前,先创建项目并连接到源码仓库。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 定义文件
Scratch org 定义文件让你能轻松创建具有不同特性或偏好的 scratch org 用于测试。例如可以设置 enables1EncryptedStoragePref2 来开关 Salesforce 移动 Web 缓存——开发时禁用缓存,能省去反复刷新页面等待组件代码生效的麻烦。可以按需更新 config/project-scratch-def.json,例如修改 orgName 属性。注意:禁用安全持久浏览器缓存会显著影响性能,生产环境应始终启用。
创建 Scratch Org
在 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 数量和可同时活跃的数量。
创建示例数据
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 的临时信息)。
构建地理定位应用
本单元用 Salesforce CLI 本地编写代码,同步到 scratch org 测试,构建地理定位应用。
学习目标
完成本单元后,你将能够:
- 描述如何使用 CLI 创建 Apex 类。
- 描述如何使用 CLI 命令创建 Aura 组件。
我们要构建什么?
我们通过本地编写代码、再同步到 scratch org 测试来构建地理定位应用,涉及 Apex 和多个 Aura 组件。组件交互的高层流程:Account Search 组件调用服务端动作搜索账户 → Apex 方法返回 SOSL 搜索结果 → Account Search 组件触发事件通知其他组件 → 处理该事件的组件向用户显示数据。这种设计让应用更灵活、易维护,也便于在各应用中独立复用这些组件。
创建 Account Search Apex 控制器
创建一个 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 事件
按照单一职责设计原则,通过触发一个事件来委托搜索结果的显示,该事件由后续创建的 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 组件
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 组件
创建一个在数据表中显示账户的 Aura 组件 AccountList。它订阅上一步创建的 c:AccountsLoaded 事件。组件用 lightning:datatable 展示账户,客户端控制器把事件数据转换成 datatable 期望的格式,并在用户点击「View details」时导航到对应账户记录。部署到 scratch org。
构建账户地图显示
本单元构建地理定位应用的最终组件,把它们整合在一起,并验证应用。
学习目标
完成本单元后,你将能够:
- 描述用于同步项目与 scratch org 的 Salesforce CLI 命令。
- 描述用于创建权限集的 Salesforce CLI 命令。
- 理解如何使用 Aura 组件构建应用。
我们要构建什么?(整合组件)
本步骤构建地理定位应用的最后几个组件,把全部功能整合起来:创建一个把账户地址可视化为地图标记的 Aura 组件、创建一个自定义选项卡用于导航到应用,并用权限集授予用户访问应用的权限。
创建 Account Map Aura 组件
AccountMap 组件用 lightning:map 在地图上显示账户。它监听 AccountsLoaded 事件,把事件数据转换成 lightning:map 期望的 mapMarkers 格式(位置、标题、描述、图标),然后部署到 scratch org。
创建 Account Locator Aura 组件
AccountLocator 是主组件,用于在 Lightning 页面、Salesforce 移动端和自定义选项卡中向终端用户显示应用,也是本项目的最后一个组件。它通过 lightning:layout 组合 AccountSearch、AccountList 和 AccountMap 三个组件。组件封装和组件复用是 Lightning Component Framework 的两大特性——把细粒度组件组合成更大的组件,就能构建更有趣的应用。
创建 Account Locator 自定义选项卡
在 Lightning Experience 桌面和 Salesforce 移动端显示 Aura 组件的简便方式是自定义选项卡。打开 scratch org(sf org open),在 Setup 中进入 Tabs,新建一个 Lightning Component 选项卡:组件选择 c:AccountLocator,Tab Label 填 Account Locator,图标选 Map,把所有配置文件的选项卡可见性设为 Tab Hidden,保存。
创建 Geolocation 权限集
为控制谁有权访问地理定位应用,创建一个权限集并授予 Account Locator 选项卡可见性。在 Setup 的 Permission Sets 中新建 Geolocation 权限集,在 Object Settings 中把 Account Locator 选项卡设为 Available 和 Visible,再把该权限集分配给你自己。
元数据魔法:检索变更到项目
此前你一直在本地项目工作并把元数据推送到 scratch org,本步骤你在 scratch org 中直接做了一些改动。现在用一条命令 sf project retrieve start 就能把在 scratch org 中改动的所有元数据检索到本地项目。在此之前,先在 .forceignore 文件中加入 **/profiles,忽略不相关、不应纳入源码仓库的 profile 变更。
验证应用
虽然可以用开发时同一个 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 测试。验证成功即完成!




























