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官網)