Salesforce学习之路(八)一次拉取多个文件或全部文件至本地
在开发中,经常会遇到本地工程错乱或者误操作导致本地本地项目被删除,此时利用SFDX: Retrieve Source from Org只会拉取新建并且名称相同的组件,若通过创建一个个文件,然后再拉取的方式,不免显得过于笨拙。
本人便踩过这个坑,这里分享一下个人的解决方案。
在我看来,从Org中一次拉取多个组件文件或者全部组件文件,有三种解决方案,下面一一叙述:
1. 利用manifest新建工程
1)打开Vs Code,进入命令行模式(shift+cmmand+p/F1), SFDX: Create Project with Manifest

直接创建标准模式即可,当然可根据自身实际选择。这里直接创建工程:sample
在sample/manifest目录下,可发现名为package.xml的文件,标准内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>*</members>
<name>ApexClass</name>
</types>
<types>
<members>*</members>
<name>ApexComponent</name>
</types>
<types>
<members>*</members>
<name>ApexPage</name>
</types>
<types>
<members>*</members>
<name>ApexTestSuite</name>
</types>
<types>
<members>*</members>
<name>ApexTrigger</name>
</types>
<types>
<members>*</members>
<name>AuraDefinitionBundle</name>
</types>
<types>
<members>*</members>
<name>LightningComponentBundle</name>
</types>
<types>
<members>*</members>
<name>StaticResource</name>
</types>
<version>47.0</version>
</Package>
从packge.xml文件中可以看出,主要分为一下标准类型:
- ApexClass: Apex类文件
- ApexComponent: Apex组件
- ApexPage: Visualforce组件
- ApexTestSuite: Apex测试类
- ApexTrigger: Apex的触发问价
- AuraDefinitionBundle: Apex的自定义Aura组件
- LightningCompentBundle: Apex的自定义LWC组件
- StaticResource: 项目中的静态文件
2)认证Org并设置为默认Org
# 认证Org
SFDX: Authorize an Org
# 设置默认Org
SFDX: Set a Default Org
查看Org列表
[kaiwu3@localhost:~/sample]$sfdx force:org:list
=== Orgs
ALIAS USERNAME ORG ID CONNECTED STATUS
─── ──────────── ──────────────────────── ────────────────── ────────────────
(U) k_Reset kaiwu3@*****.com 00D2v000001Xk5DEAS Connected No active scratch orgs found. Specify --all to see all scratch orgs
3) 利用pacakge.xml拉取文件
右击sample/manifest/pacakge.xml,选择SFDX: Retrieve Source in Manifest from Org
::16.740 sfdx force:source:retrieve --manifest /Users/kaiwu3/Works/Code/sfdcTmp/sample/manifest/package.xml
=== Retrieved Source
FULL NAME TYPE PROJECT PATH
──────────────────────────────────────────────────────────────────────── ──────────────────────── ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
heatmapmock StaticResource force-app/main/default/staticresources/heatmapmock.resource-meta.xml
heatmapmock StaticResource force-app/main/default/staticresources/heatmapmock.js
heatmap StaticResource force-app/main/default/staticresources/heatmap.resource-meta.xml
heatmap StaticResource force-app/main/default/staticresources/heatmap.js
......
此时,你会发现package.xml中定义的标准组件,都已经成功拉到本地工程。
2. 利用Package Manage方式自由拉取文件
1) Org中创建Package包
上述manifest方式拉取的文件,仅限于创建工程是自动生成的package.xml中定义的几种类型,有时并不能满足我们的需求(比如Org迁移或者备份,此时不仅需要上述的组件文件,还需要保留在Org中创建的Object等信息)。此时,你会发现Package Manager可以满足你的一切需求。
在Org中,【Setup】-->【Package Manager】-->【new】

点击Add按钮,添加所需组件。

返回Package Maneger界面可见Package列表存在sample的包。
2)本地工程下载smaple包
[kaiwu3@localhost:~/Works/Code/sfdcTmp/sample]$mkdir pacakge
# 下载包命令:sfdx force:mdapi:retrieve -s -r {{pathToCreatePackageFile}} -u {{sandboxUsername}} -p {{packageName}}
[kaiwu3@localhost:~/Works/Code/sfdcTmp/sample]$sfdx force:mdapi:retrieve -s -r package/ -u kaiwu3@*****.com -p sample
Retrieving source... === Status
Status: InProgress
jobid: 09S2v000006nL64EAE === Result
Status: Succeeded
jobid: 09S2v000006nL64EAE # 产生的zip包路径
Wrote retrieve zip to /Users/kaiwu3/Works/Code/sfdcTmp/sample/package/unpackaged.zip.
3)转换package为工程文件
# 解压下载包(下载包一般命名为:unpacakge.zip)
[kaiwu3@localhost:~/sfdcTmp/sample/package]$unzip unpackaged.zip
Archive: unpackaged.zip
inflating: staticresources/leaflet1.resource
inflating: staticresources/leaflet1.resource-meta.xml
inflating: aura/SmartLocks/SmartLocks.css
inflating: aura/SmartLocks/SmartLocksHelper.js
inflating: aura/SmartLocks/SmartLocksController.js
inflating: aura/SmartHome/SmartHome.css
inflating: aura/SmartHome/SmartHomeController.js
......
inflating: package.xml # 将解压文件转换匹配到对应工程中
# 转换命令:sfdx force:mdapi:convert -r {pacakge.xml所在目录}
[kaiwu3@localhost:~/Works/Code/sfdcTmp/sample]$sfdx force:mdapi:convert -r package/
=== Converted Source
STATE FULL NAME TYPE PROJECT PATH
───── ─────────────────────────────────────────────────────── ───────────────── ────────────────────────────────────────────────────────────────────────────────────────────────────────────
Add CCTG CustomApplication force-app/main/default/applications/CCTG.app-meta.xml
Add Company__c-Company Layout Layout force-app/main/default/layouts/Company__c-Company Layout.layout-meta.xml
Add Employee__c-Employee Layout Layout force-app/main/default/layouts/Employee__c-Employee Layout.layout-meta.xml
......
细心的同学应该发现了,package manager方式中也存在package.xml文件,区别在哪呢?
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>sample</fullName>
<!--类型:ApexClass,成员:sample中自定义添加的-->
<types>
<members>BotController</members>
...
<name>ApexClass</name>
</types>
<!--类型:触发器,成员:sample包中自定义选择-->
<types>
<members>PairContactToAccount</members>
<members>PushNotificationTrigger</members>
...
<name>ApexTrigger</name>
</types>
<!--类型:Aura组件,成员:sample包中自定义选择-->
<types>
<members>Map</members>
<members>MapCard</members>
...
<name>AuraDefinitionBundle</name>
</types>
<!--类型:自定义应用,成员:sample包中自定义选择-->
<types>
<members>CCTG</members>
...
<name>CustomApplication</name>
</types>
<!--类型:自定义字段,成员:sample包中自定义选择-->
<types>
<members>Command__c.Active__c</members>
...
<name>CustomField</name>
</types>
<!--类型:自定义对象,成员:sample包中自定义选择-->
<types>
<members>Command__c</members>
...
<name>CustomObject</name>
</types>
<!--类型:自定义导航,成员:sample包中自定义选择-->
<types>
<members>Account__c</members>
...
<name>CustomTab</name>
</types>
<!--类型:Layout,成员:sample包中自定义选择-->
<types>
<members>Bot_Command__c-Bot Action Layout</members>
...
<name>Layout</name>
</types>
...
<!--类型:RecordType,成员:sample包中自定义选择-->
<types>
<members>Account__c.DemoChart</members>
...
<name>RecordType</name>
</types>
<!--类型:静态文件, 成员:sample包中自定义选择-->
<types>
<members>leaflet1</members>
<name>StaticResource</name>
</types>
<types>
<members>Account__c.Open_Report</members>
<name>WebLink</name>
</types>
<version>47.0</version>
</Package>
而在manifest中,类型仅有上述几种,并且成员为所有。
3. 利用Scratch Org全部拉取
1)创建Scratch Org
# 创建scratch Org
# 注意,如果没有权限,需进入Org,enable Dev Hub
# 这里使设置有效期为3天
[kaiwu3@localhost:~/smaple/config]$sfdx force:org:create -f project-scratch-def.json -d
Successfully created scratch org: 00D9D0000000St7UAE, username: test-l5cwqegykwud@example.comsfdx force:org:create -f project-scratch-def.json -d # 将scratch Org设置为默认Org
[kaiwu3@localhost:~/sample/config]$sfdx force:config:set defaultusername=test-l5cwqegykwud@example.com
=== Set Config
NAME VALUE
─────────────── ─────────────────────────────
defaultusername test-l5cwqegykwud@example.com # 查看Org列表
[kaiwu3@localhost:~/Works/Code/test/config]$sfdx force:org:list
=== Orgs
ALIAS USERNAME ORG ID CONNECTED STATUS
─── ───── ──────────────── ────────────────── ────────────────
(D) k_Reset kaiwu3@*****.com 00D2v000001Xk5DEAS Connected ALIAS SCRATCH ORG NAME USERNAME ORG ID EXPIRATION DATE
─── ───── ──────────────── ───────────────────────────── ────────────────── ───────────────
(U) kaiwu3 Company test-l5cwqegykwud@example.com 00D9D0000000St7UAE --
2)全量拉取数据
# 权量拉取命令:sfdx force:source:pull -u {username}
[kaiwu3@localhost:~/sample]$sfdx force:source:pull -u test-l5cwqegykwud@example.com
=== Pulled Source
...
在切换Org即可。
作者:吴家二少
博客地址:https://www.cnblogs.com/cloudman-open/
本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
Salesforce学习之路(八)一次拉取多个文件或全部文件至本地的更多相关文章
- Salesforce学习之路(十三)Aura案例实战分析
Aura相关知识整合: Salesforce学习之路(十)Aura组件工作原理 Salesforce学习之路(十一)Aura组件属性<aura:attribute /> Salesforc ...
- Jenkins拉取Git远程仓库中指定目录至本地指定目录
Jenkins拉取源码是非常实用的操作,比如每天在跑自动化测试前,拉取Git远程仓库中最新的脚本至本地.那么,Jenkins如何拉取Git远程仓库中指定目录至本地指定目录呢?下面来看看具体的设置方法. ...
- Salesforce学习之路(三)利用VS Code结合Git开发Salesforce
在前面说了一些有关Admin的知识,但实际开发运用中,仅凭Admin的配置很难满足项目的定制化需求,因此基于CRM的二次开发则应运而生. 由于国内资料相对较少,所以很多入门新手无处下手,那这里就简单介 ...
- Salesforce学习之路-developer篇(一)利用VS Code结合Git开发Salesforce
Part 1: 从Git中克隆代码到本地 git clone https://github.com/git/git Part 2: 在VS Code中安装Salesforce和Git插件 在VS Co ...
- Salesforce学习之路-developer篇(二)利用Jenkins和Bitbucket实现Salesforce的CI/CD功能
上文提到,基于CRM的二次开发是必不可少的,但是在实际项目中CI/CD是不可忽略的一个重要部分,与传统的Java,Python项目不同,如果对Salesforce进行持续集成和持续部署呢? 结合找到的 ...
- Salesforce学习之路(四)利用Jenkins和Git实现Salesforce的CI/CD功能
上文提到,基于CRM的二次开发是必不可少的,但是在实际项目中CI/CD是不可忽略的一个重要部分,与传统的Java,Python项目不同,如果对Salesforce进行持续集成和持续部署呢? 结合找到的 ...
- git使用命令行拉取远程代码仓库中的分支至本地
1.本地创建文件夹用于存放拉取的代码 2.执行git init初始化文件夹 3.与远程代码仓库建立连接 git remote add origin git@github.com.wuylin/noth ...
- Salesforce学习之路-developer篇(五)一文读懂Aura原理及实战案例分析
1. 什么是Lightning Component框架? Lightning Component框架是一个UI框架,用于为移动和台式设备开发Web应用程序.这是一个单页面Web应用框架,用于为Ligh ...
- Salesforce学习之路-admin篇
Salesforce是一款非常强大的CRM(Customer Relationship Management)系统,国外企业使用十分频繁,而国内目前仅有几家在使用(当然,国内外企使用的依旧较多),因此 ...
随机推荐
- ubuntu 16.04无法连接网络;双系统无法上网;连接已断开,你现在处于断开状态
先描述一一下我的问题,若和你的一样,请继续往下看. 我是在原有Windows7系统的台式计算机中安装了ubuntu 16.04,所以目前这台计算机是双系统.打开Windows系统时有线网络正常链接.但 ...
- jQuery 源码分析(十) 数据缓存模块 data详解
jQuery的数据缓存模块以一种安全的方式为DOM元素附加任意类型的数据,避免了在JavaScript对象和DOM元素之间出现循环引用,以及由此而导致的内存泄漏. 数据缓存模块为DOM元素和JavaS ...
- [debug]ubuntu共享文件夹所在目录
使用Vmware虚拟机,Vmware Tools工具的复制粘贴一直无效,之后采用共享文件夹. 其默认的是在 \mnt\hgfs 下,在Vmware的设置中建立好文件夹,将文件传入进去,之后就可以去 \ ...
- Elasticsearch 6.x版本全文检索学习之分布式特性介绍
1.Elasticsearch 6.x版本全文检索学习之分布式特性介绍. 1).Elasticsearch支持集群默认,是一个分布式系统,其好处主要有两个. a.增大系统容量,如内存.磁盘.使得es集 ...
- Java性能 -- Lock优化
Lock / synchronized Lock锁的基本操作是通过乐观锁实现的,由于Lock锁也会在阻塞时被挂起,依然属于悲观锁 synchronized Lock 实现方式 JVM层实现 Jav ...
- iOS UItableview 镶嵌 collectionView ,cell 自适应高度动态布局
最近在写这个功能,之前看到很多,可是需求一直没有涉及到,大致思路是有的,发现,网上的大部分都有缺陷和bug,我也是好无语啦啦啦,也不晓得是不是升级 了xcode,一样的代码,允许的效果都不一样,,,苦 ...
- Linux(ubuntu) 三行代码搞定安装谷歌浏览器
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb 然后再输入: sudo dpkg -i g ...
- 记录console的使用
一般信息:console.info("这是info") 除错信息:console.debug() 警告提示:console.warn() 错误提示:console.error() ...
- MySQL数据篇(五)--SQL对数据进行按月统计,或对数据进行按星期统计
对于所有的需求,当你不知道怎么处理的时候,你就先用最简单的方法,或者说的明白一点,用最原始的方法,先实现业务需求再说. 一.对提现队列数据表“ims_checkout_task”进行汇总统计,按月汇总 ...
- 告诉你一些DBA求职面试技巧
告诉你一些DBA求职面试技巧 要自信!永远不要低估你的能力.如果你不了解什么问题的答案,承认它.重点放在你找出答案的能力和你学习的意愿. 不要自大!是的,你可能过于自信而被认为是骄傲的.轻率的,甚至是 ...