Salesforce DX 简介
Salesforce DX
Salesforce DX (Salesforce Developer Experience) 是 Salesforce 推出的一个新的开发和部署模式,旨在提供更好的开发者体验。在 Salesforce 官网和 Trailhead 网站中都可以找到很多相关的介绍和教程。目前 Salesforce DX 的某些文档还处于 Beta 阶段。
本文将简单介绍其优点和开发流程。
Salesforce DX 的优点
Salesforce DX(下面简称SFDX)有两个主要优点:
- SFDX 符合快速迭代的开发模式
- SFDX 提供了统一的命令行工具在代码库和服务器之间进行通信和同步
SFDX 对快速迭代的支持
在 Salesforce DX(下面简称SFDX)出现之前,开发者主要是通过部署不同类型的沙盒进行开发,如图所示:

图片取材于官方文档。
这种结构的缺陷在于沙盒环境的搭建。
在多个功能同时进行开发的情况下,需要同时拥有多个开发的沙盒,即上图的“Developer Sandbox”。这些沙盒没法同时拥有所有已经开发的功能。随着项目的发展,越来越多的沙盒会因为没有特定的功能而“过时”,这就需要创建新的沙盒或刷新已有的沙盒。而这些操作需要耗费大量的时间,对于敏捷开发和快速迭代造成影响。
为了改进这种缺陷,SFDX 提供了一种新的概念:Scratch org。Scratch org 是一种可以快速搭建的“沙盒”,只包含了特定的功能。开发者可以通过 SFDX 中的设置快速创建 Scratch org,在上面开发新的功能,然后将所做的更改直接提取出来放到代码库中进行整合。
通过这样一种流程,之前笨重的“开发沙盒”就被轻盈的 Scratch org 所取代,为快速迭代和持续集成提供了更好的支持。
Salesforce 命令行工具
Salesforce 随着 SFDX 一起推出了命令行工具(下面简称 CLI)。在此之前,开发者一般使用官方的 Force.com IDE 或其他第三方插件(比如 MavensMate)来进行本地代码和服务器之间的通信。CLI 作为整合这些功能的工具而出现。它可以和各种代码编辑器结合使用,包含了在开发中需要的各种操作和命令,让开发者可以更方便的将本地修改上传到各种 Scratch org 中或者将 Scratch org 中的修改同步到本地代码库。
SFDX 开发过程示例
下面通过一些简单的例子来说明 SFDX 的工作流程。
前提条件
在使用 SFDX 开发之前,需要先完成以下几个部分:
- 拥有一个 Salesforce 环境来作为基础(在 SFDX 中被称为“Dev Hub”)。Scratch org 就会基于它来建立
- 在第一步中的 Salesforce 环境中启用“Dev Hub”功能。可以通过设置界面搜索“Dev Hub”来启用
- 安装 Salesforce CLI 工具
登录“Dev Hub”环境
在进行开发之前,先要登录 Dev Hub 环境。
打开命令行,输入命令:
sfdx force:auth:web:login -d -a ExampleDevHub
在此命令之后,系统会自动打开浏览器,显示 Salesforce 的登录页面。在此页面中像平时一样登录要作为“Dev Hub”的 Salesforce 环境即可。在登录之后,这个“Dev Hub”就被作为接下来创建 Scratch org 的基础,记录在系统中。
命令讲解:
- “sfdx force:auth:web:login”部分是基础命令,用来登录
- “-d”参数是设定接下来登录的“Dev Hub”是默认的。系统中可以同时拥有多个“Dev Hub”。要注意的是,当创建了 Scratch org 后,这条命令也可以用来登录 Scratch org。在这时,不要使用“-d”参数
- “-a”参数是为这个“Dev Hub”设定一个好记的别名。在这里我们使用“ExampleDevHub”
在命令行中输入命令:
sfdx force:org:open -u ExampleDevHub
即可打开浏览器直接进入刚才建立的以“ExampleDevHub”为别名的“Dev Hub”环境
当创建了 Scratch org 后,这条命令也可以用来打开浏览器直接进入 Scratch org。
建立 SFDX 项目
在使用 SFDX 之前,需要先建立一个项目。
在命令行中使用以下命令建立一个名为“ExampleProj”的项目:
sfdx force:project:create -n ExampleProj
该命令会建立以下目录结构:

其中,“sfdx-project.json”文件包含了该项目的基本信息,“config”文件夹下的“project-scratch-def.json”文件包含了建立 Scratch org 的基本配置信息,“force-app”目录则用来存放代码。
建立 Scratch org
使用命令行进入 SFDX 项目的目录,然后输入以下命令即可建立一个 Scratch org:
sfdx force:org:create -s -f config/project-scratch-def.json -a ExampleScratchOrg
命令解释:
- “-s”参数把即将建立的 Scratch org 作为该项目默认的 Scratch org
- “-f”参数声明了即将建立的 Scratch org 是基于哪一个配置文件
- “-a”参数是设定别名
接下来使用命令:
sfdx force:org:open -u ExampleScratchOrg
即可打开浏览器直接进入刚才建立的以“ExampleScratchOrg”为别名的 Scratch org。
使用命令:
sfdx force:org:list
可以查看当前系统中已经记录的“Dev Hub”环境和已经建立的 Scratch org 列表。
使用 Scratch org
在 Scratch org 中,开发者(或管理员)可以和使用真正的 Salesforce 环境一样开发或配置功能。于此同时,Salesforce CLI 工具也提供了一系列的命令来进行相关的操作,比如建立 Apex 类、建立 Lightning 组件等。
代码库与 Scratch org 同步
SFDX 的一个重要功能就是将代码库与 Scratch org 同步。Salesforce CLI 提供了两个重要的命令来实现这些操作:
- sfdx force:source:pull
- sfdx force:source:push
将更改从 Scratch org 同步到本地代码库
开发者可以登录 Scratch org 进行开发和配置。当完成开发后,可以在 SFDX 中使用命令“sfdx force:source:pull”来将更改同步到本地的代码库。
比如:在上面建立的 Scratch org 中建立一个新的自定义对象“地址”,API 名字叫“Address__c”。
要将此更改同步到本地代码库,可以在命令行中运行:
sfdx force:source:pull
运行的结果如图:

可以看到,刚才建立的新的自定义对象,包括随之生成的页面布局,以及相关的简档设置都以元数据的形式保存到了“force-app”文件夹中。
接下来开发者可以将此更改拷贝到 Git 或其他代码库中进行提交。
将更改从本地代码库同步到 Scratch org
在本地代码库中,也可以新建一些组件,比如 Apex 类或 Lightning 组件等,然后通过命令“sfdx force:source:push”将其同步到 Scratch org 中。
比如:在之前建立的 Scratch org 中并没有任何 Apex 类,我们在命令行中运行:
sfdx force:apex:class:create -n AccountController -d force-app/main/default/classes
这条命令就在本地代码库的文件夹“force-app/main/default/classes”下面建立了一个名叫“AccountController”的 Apex 类。
然后在命令行中运行:
sfdx force:source:push
运行的结果如图:

接下来,我们登录 Scratch org,进入 Developer Console,可以看到刚才建立的 Apex 类“AccountController”已经被同步过来了。

Salesforce DX 简介的更多相关文章
- Salesforce LWC学习(一)Salesforce DX配置
LWC: Create a Salesforce DX Project and Lightning Web Component:https://www.youtube.com/watch?v=p268 ...
- Salesforce数据安全简介
数据安全级别 Salesforce中将数据安全分为若干等级: 组织级别:组织级别的安全设定在整个系统内部都有效.这是最广泛的级别 对象级别:对象级别的安全设定可以限制用户对于对象的权限 字段级别:字段 ...
- Salesforce 系列(一):云服务和 Salesforce 理念简介
本系列文章系笔者在 Salesforce 开发过程中的些许总结与心得,旨在记录自己的成长,以及为对 Salesforce 感兴趣的小伙伴提供一些帮助,如有疏漏,还望多多包涵 ~ 云服务 云服务,也称云 ...
- Salesforce 简介
Salesforce是什么 Salesforce是一个功能全面的云平台.它是践行Saas(软件及服务)概念的先驱之一. Salesforce的核心功能是CRM(客户关系管理系统).系统默认提供大多数C ...
- Salesforce的数据权限机制
本文主要介绍了 Salesforce 对于系统中数据的访问控制是如何设计的,然后也了解了下 Alfresco 和 Oracle VPD 的数据权限机制.希望对一些业务系统的数据权限的访问控制设计能有所 ...
- Salesforce LWC学习(二) helloWorld程序在VSCode中的实现
上一篇我们简单的描述了一下Salesforce DX的配置以及CLI的简单功能使用,此篇主要简单描述一下LWC如何实现helloWorld以及LWC开发时应该注意的一些规范. 做国内项目的同学直观的感 ...
- Salesforce吹嘘无代码开发,不用费脑子的人工智能
Salesforce在星期四举办的Dreamforce '16大会上,开发人员主题演讲可谓面面俱到--听众被舞台包围了,而不是远远地坐在观众席. 这是符合该公司在六月份第一次的开发者大会Trailhe ...
- Salesforce 生命周期管理(一)应用生命周期浅谈
本篇参考: https://trailhead.salesforce.com/en/content/learn/trails/determine-which-application-lifecycle ...
- android全功能音乐播放器、基于MVP-Clean + Weex + RxJava2 + Retrofit + Dagger2 + MTRVA的综合应用、图片滤镜处理等源码
Android仿微信朋友圈查看图片下拽返回. Android图片滤镜处理,相机滤镜处理效果源码 Android自定义View源码:一个水平的进度条 基于MVP-Clean + Weex + RxJav ...
随机推荐
- sublime text下安装插件autoprefixer
有时候在写css样式的时候,分不清哪些属性需要前缀,哪些不需要,总是爱搞混淆了,于是autoprefixer这款插件便应运而生了.虽然在使用webpack的时候,我们可以很方便的使用这个,但是,如果项 ...
- .NET手记-定义类和接口的扩展方法
对于iOS开发者来说,使用扩展方法是家常便饭.因为有很多的类是有系统框架的定义的,我们不能修改或者不想修改他们的源码,但是我们又想要给他添加一些扩展方法来使用.这时定义扩展方法就是很有用的方式了,正如 ...
- Win10手记-IIS部署网站问题解决
最近在自己的Win10电脑上尝试部署ASP.NET网站时出现了问题,经过多方查找定位到IIS为问题来源. 开始之前 先描述下技术环境: 1.Windows 10 PC 2.Windows 自带的IIS ...
- Spark SQL 性能优化再进一步:CBO 基于代价的优化
摘要: 本文将介绍 CBO,它充分考虑了数据本身的特点(如大小.分布)以及操作算子的特点(中间结果集的分布及大小)及代价,从而更好的选择执行代价最小的物理执行计划,即 SparkPlan. Spark ...
- hdu 6058---Kanade's sum(链表)
题目链接 Problem Description Give you an array A[1..n]of length n. Let f(l,r,k) be the k-th largest elem ...
- http协议返回码
有五种可能取值:1xx:指示信息--表示请求已接收,继续处理2xx:成功--表示请求已被成功接收.理解.接受3xx:重定向--要完成请求必须进行更进一步的操作4xx:客户端错误--请求有语法错误或请求 ...
- Vue + Element UI 实现权限管理系统 前端篇(十六):系统备份还原
系统备份还原 在很多时候,我们需要系统数据进行备份还原.我们这里就使用MySql的备份还原命令实现系统备份还原的功能. 后台接口准备 系统备份还原是对数据库的备份还原,所以必须有后台接口的支持,我们准 ...
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十二):解决跨域问题
什么是跨域? 同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源. 同源策略是浏览器安全的基石. 如果一个请求地址里面的协议.域名和端口号都相同,就属于同源. ...
- Maven教程2(Eclipse配置及maven项目)
Maven教程1(介绍安装和配置) Eclipse中配置maven 1.Eclipse中默认集成的有Maven 可以使用默认的,本地仓库在当前用户下的.m2文件夹下. 2.配置我们自己安装的maven ...
- 基于tcp协议下粘包现象和解决方案,socketserver
一.缓冲区 每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区.write()/send() 并不立即向网络中传输数据,而是先将数据写入缓冲区中,再由TCP协议将数据从缓冲区发送 ...