Trailhead
Build Apps Together with Package Development
传统开发流程
- 刷Sandbox
- 做开发配置
- 部署到UAT验证
- 部署到生产环境
- 维护:刷Sandbox 再开发,再次重复上述过程
优点:
- 简单,易操作
缺点:
- 没有代码管理机制
- 当多个团队并行开发时,比较难管理
Package 模式
- 创建SFDX项目
- 创建Scratch Org
- 开发功能
- 部署到Scratch Org,验证
- 创建Package,并发布
- 安装到Org中并验证
- 安装到生产环境
- 维护:本地代码修改,创建更新包,并安装到Org中验证后,安装到生产环境
优点:
- 解决多团队并行开发的冲突
- 基于源代码驱动开发,有版本管理
- 模块化
缺点:
- 学习成本
- 对于项目型来说,很难切割成一个个模块
目前Salesforce大概在17/18年开始推出新的技术SFDX,跟当初出来Lightning一样,未来SF主推的东西,随着对VSCode SF开发插件包的完善及Lightning Web Component的出现,都需要基于SFDX为基础,所以在学习运用这些新技术之前,先要解决对SFDX的认识,目前我们项目的开发流程已经属于传统SF开发了,所以我们需要及时跟上SF的步伐.打开SFDX的大门
应用程序的开发周期流程
Scratch Org VS Sandbox
Scratch 创建后就是一个空白的,具有SF基本功能的Org. Scratch 没有能力包含生产组织中包含的全部元数据。而且,它也不是要替换沙箱。当您开始分析要推送到临时组织的哪些元数据片段时,请问问自己,您的特定项目是否需要所有这些源.
例如:
- 所有定制是否都与单个应用程序或CRM的扩展相关?
- 定制是否代表许多不同的应用程序或项目? 如果您对第二个问题回答“是”,请考虑如何将这些位分解成包。您将创建一个单独的临时组织来测试每个单独的模块。在开发生命周期的后期,您会将单独的程序包部署到沙盒中以进行最终测试和部署。
Salesforce DX
Salesforce DX项目是元数据的本地目录结构,在本地可以使用Salesforce DX工具进行开发和测试。
- 它包含用于创建临时组织的配置文件。
- 它也可以包含加载到组织中进行开发或测试的数据。
- 它还可以进行软件包的测试。
当您使用CLI创建新的Salesforce DX项目时,它将为您创建项目目录结构。 包是一组相关的代码和自定义项。您可以独立于组织中的其他组件来测试软件包。您也可以独立释放软件包。包中的元数据组件一次只能存在于已安装的组织中的一个包中。 至少,项目管理一个软件包的源。话虽这么说,如果同时构建并发布了多个软件包,则可以将这些软件包组织到一个DX项目中。您的每个软件包都与项目配置文件中定义的软件包目录对齐。
基于源代码驱动模式(CI & CD)
Salesforce DX添加了可简化整个开发生命周期的新工具。它改善了团队开发和协作,促进了自动化测试和持续集成,并使发布周期更加有效和敏捷。 但是Salesforce DX不仅仅是一套新工具!它提供了更集开发的替代方法,并将真实的来源从组织转移到了版本控制系统(VCS)。它将您的开发重点从组织开发转移到包开发。
转换为元数据格式进行构建
尽管软件包开发是管理元数据中的变更的一种好方法,但我们仍然支持与当前变更集方法并行的构建和部署过程。元数据API ==mdapi:convert== 和 ==mdapi:deploy== 命令继续处理构建和部署用例。 在项目开始时,您可以从组织中检索元数据源并将其转换为源格式,然后将其存储在VCS中。创建并测试您的应用或自定义设置后,就可以创建部署工件了。您可以从源格式转换回元数据格式,然后所有源都准备好部署到临时组织。您可以部署所有源,并且部署操作负责更新已更改的文件。您可以从部署中省略某些文件,并通过修改转换过程中创建的package.xml文件来确切构造要部署的内容 。
安装命令行界面(CLI) & VS code
- CLI
- VS code
- Salesforce Extension Pack
CLI 基础命令(授权,Org管理)
-
欢迎页面
sfdx force
-
查看帮助,由于命令很多,这个很有用
sfdx force --help
-
授权一个org,当执行这个命令时,会执行OAuth 2.0操作,打开浏览器跳转到登录界面,输入用户名与密码后,授权后,CLI就会记住,下次可以通过命令直接登录Org
sfdx force:auth:web:login
-d 配置默认org 如果当前org不是开发中心org在创建Scratch Org会报错 -a是 设置别名,后面都可以通过别名操作 sfdx force:auth:web:login -d -a DevHub 授权Sandbox: sfdx force:auth:web:login -r https://test.salesforce.com -a DevSandbox
-
打开org
sfdx force:org:open -u DevHub
-
查看所有org
sfdx force:org:list
-
设置默认配置
查看配置 sfdx force:config:list defaultdevhubusername:为默认的开发中心org defaultusername:为默认组织(一般设置为临时组织,这样在操作临时组织时,不需要带上org 名称) global:表示这是全局,全局表示针对所有项目,如果是local,则表示当前项目.
设置默认全局配置
sfdx force:config:set defaultusername=XXX -g
如果只是针对某个项目,需要在这个项目下去设置,不需要带有-g
-
设置别名
sfdx force:alias:set 别名=用户名
-
删除Org
sfdx force:org:delete -u SFDXProject_Org
CLI 项目操作(创建项目,创建组件)
-
创建项目
sfdx force:project:create -n SFDXProject
- config:创建scratch的配置文件 - force-app:应用程序(包) - sfdx-project:项目配置文件
-
修改scratch的配置文件
在settings中可以设置各功能的开启 { "orgName": "SFDXProject_Org", "edition": "Developer", "features": [], "settings": { "lightningExperienceSettings": { "enableS1DesktopEnabled": true }, "securitySettings": { "passwordPolicies": { "enableSetPasswordInApi": true } }, "mobileSettings": { "enableS1EncryptedStoragePref2": false } } }
-
创建scratch
sfdx force:org:create -s -f config/project-scratch-def.json -a SFDXProject_Org
-
创建组件
sfdx force:lightning:component:create -n AccountListCMP -d force-app/main/default/aura sfdx force:apex:class:create -n AccountListController -d force-app/main/default/classes
-
用VS code 打开工程
-
在VS Code里构建应用
- 打开AccountListCMP 输入以下代码,显示客户列表
<aura:component controller="AccountListController" implements="flexipage:availableForAllPageTypes"> <aura:attribute name="AccountList" type="Account[]"/> <aura:handler name="init" action="{!c.initAction}" value="{!this}"/> <lightning:layout multipleRows="true"> <aura:iteration items="{!v.AccountList}" var="obj"> <lightning:layoutItem size="12" smallDeviceSize="6" mediumDeviceSize="4" largeDeviceSize="3" padding="around-small"> <lightning:card footer="" title="{!obj.Name}"> <aura:set attribute="actions"> <lightning:button label="New"/> </aura:set> <p class="slds-p-horizontal_small"> 行业:{!obj.Industry}<br/> 类型:{!obj.Type}<br/> 所有人:{!obj.Owner.Name} </p> </lightning:card> </lightning:layoutItem> </aura:iteration> </lightning:layout> <aura:if isTrue="{!empty(v.AccountList)}"> <div class="slds-scoped-notification slds-media slds-media_center slds-theme_warning" role="status"> <div class="slds-media__figure"> <lightning:icon iconName="utility:warning" alternativeText="Warning!" title="Warning" /> </div> <div class="slds-media__body"> <p>没有找到记录</p> </div> </div> </aura:if> </aura:component>
- JS 代码
({ initAction : function(component, event, helper) { let action = component.get("c.accountListService"); action.setCallback(this, function (response) { var state = response.getState(); if (component.isValid() && state === "SUCCESS") { let ResponseBody = response.getReturnValue(); component.set("v.AccountList",ResponseBody); } }) $A.enqueueAction(action); } })
- 在apex中输入如下代码,查询Account 记录
public with sharing class AccountListController { public AccountListController() { } @AuraEnabled public static List<Account> accountListService(){ return [SELECT Id,Name,Owner.Name,Industry,Type FROM Account Limit 10]; } }
-
推送代码到临时组织中
sfdx force:source:push
-
新建一个Lightning 应用程序 SFDX Project
-
新建一个应用程序页面,当作容器,显示该组件,将选项卡添加到SFDX Project 中,这样SFDX Project中只有一个选项卡
-
创建一个权限集客户列表分配SFDX Project这个应用程序
将客户列表选项卡分配给权限集
-
从临时组织获取元数据(当我们在临时组件中调整了配置,我们需要把这部分修改,从临时组件拉取到本地,作一个包,不仅仅只有代码也包括配置)
查看本地与远程的差异 sfdx force:source:status
红框处理是我们在临时组织中,通过Lightning Builder 构建了一个页面,添加了一个选项卡,同时将该选项卡添加到SFDX Project 应用程序中,创建一个权限集,并分配了SFDX Project应用程序的权限
sfdx force:source:pull
下载下来的组件如果有不需要的,可以删除对应的文件
-
测试:通过创建一个新的临时组织,且将代码部署到新的临时组织来验证
- 复制project-scratch-def.js,将OrgName 修改为SFDXProject_Org_New
- 通过命令快速创建
- 将本地元数据推送到新的临时组织
- 设置权限集
sfdx force:user:permset:assign -n AccountList
-
从原临时组织导出客户的数据,将测试数据导入到新的临时组织中
sfdx force:data:tree:export -q "SELECT Name,Industry,Type FROM Account" -u SFDXProject_Org
sfdx force:data:tree:import --sobjecttreefiles Account.json
元数据与SFDX项目转换
-
在项目下新建一个文件夹 mdapioutput
mkdir mdapioutput sfdx force:source:convert -d mdapioutput/
注意删除不需要的组件,比如简档,不仅需要删除元数据还要在package.xml中删除对应的节点
-
部署到目标环境(Sandbox/Playground等)
sfdx force:mdapi:deploy -d mdapioutput/ -u TP -w 100
分配权限集 登录目标环境,查看验证
-
将元数据转换成SFDX项目
- 创建新的SFDX项目
- 获取元数据到本地
``` mkdir mdapipackage //这个是获取元数据,为了方便这里我们自已构造一个含有apex类的元数据包 sfdx force:mdapi:retrieve -s -r ./mdapipackage -u xxx -w 10 ```
-
通过命令将元数据转换成SFDX项目(本质上,只是放到对应的目录下而已)
sfdx force:mdapi:convert -r mdapipackage/
CLI 创建包
Salesforce 的应用市场App Exchange 大家并不陌生,软件包分两种,一种是托管包,安装后,无法查看元数据,仅仅使用,另一种为非托管包,安装后,可以修改元数据,进行定制. SFDX 可以非常方便创建非托管包.
-
以上面的SFDX Project 为例,通过命令,创建一个包
sfdx force:package:create --name SFDCProject --description "我的第一个非托管包" --packagetype Unlocked --path force-app --nonamespace --targetdevhubusername DevHub
-
在VS Code中,展开文件夹,然后打开sfdx-project.json文件,这里会记录包的ID及信息,后面会使用到
-
将versionName更改为Version 1.0,并将versionNumber更改为1.0.0.NEXT。
-
创建软件包的新版本
* -p 是映射到程序包ID(0Ho)的程序包别名。 * -d 是包含软件包内容的目录。 * -k 是用于防止未经授权的个人安装软件包的安装密钥。 sfdx force:package:version:create -p SFDCProject -d force-app -k test1234 --wait 10 -v DevHub
-
软件包的安装地址(通过登录Org,打开该link应该可以安装): https://[xxxxxx]/packaging/installPackage.apexp?p0=04t0I000000jEexQAE
-
通过命令安装
sfdx force:package:install --wait 10 --publishwait 10 --package [email protected] -k test1234 -r -u SFDXProject_Org
-
关于包这块还有很多比如,创建包,更新包,版本管理,包的发布等,第一代包与第二代包,有了SFDX基础可以通过文档进一步了解.
CLI 其它命令
release 包
sfdx force:package:version:promote -p [email protected] -v DevHub
打开指定的路径的页面
sfdx force:org:open -p lightning/n/GIFter -u MyTP
分配权限集
sfdx force:user:permset:assign -n GIFter -u MyTP
显示Org信息
sfdx force:org:display -u SFDXProject_Org
生成Org当前用户密码
sfdx force:user:password:generate -u SFDXProject_Org
![](https://raw.githubusercontent.com/SunLangzi/pictures/imgs/15938472934817.jpg)
![](https://raw.githubusercontent.com/SunLangzi/pictures/imgs/15938473602965.jpg)
以上视频均引用互联网,如有侵权联系后删除.(除序号3视频其它视频引用SF官网)