{"id":6062,"date":"2017-05-25T16:10:12","date_gmt":"2017-05-25T16:10:12","guid":{"rendered":"http:\/\/www.jitendrazaa.com\/blog\/?p=6062"},"modified":"2024-05-20T16:07:43","modified_gmt":"2024-05-20T20:07:43","slug":"getting-started-with-salesforce-dx-salesforce-developer-experience","status":"publish","type":"post","link":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/getting-started-with-salesforce-dx-salesforce-developer-experience\/","title":{"rendered":"Most Frequently used SFDX Commands"},"content":{"rendered":"\n<p><strong>Table of Content<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"#whatIs\">What are Scratch Orgs<\/a><\/li>\n\n\n\n<li><a href=\"#setupDX\">Setting up SalesforceDX<\/a><\/li>\n\n\n\n<li><a href=\"#loginOrg\">Authorize Salesforce Instance to be used with SFDX<\/a><\/li>\n\n\n\n<li><a href=\"#createOrg\">Create Scratch Org<\/a><\/li>\n\n\n\n<li><a href=\"#metadata\">Move code to and from Scratch Org<\/a><\/li>\n\n\n\n<li><a href=\"#listOrg\">List of existing Orgs in SFDX<\/a><\/li>\n\n\n\n<li><a href=\"#openOrg\">Open Salesforce Org from SFDX<\/a><\/li>\n\n\n\n<li><a href=\"#testClass\">Run Test Classes<\/a><\/li>\n\n\n\n<li><a href=\"#log\">Setup Log Level<\/a><\/li>\n\n\n\n<li><a href=\"#skel\">Create Skeleton Workspace<\/a><\/li>\n\n\n\n<li><a href=\"#pwd\">Generate Password for Scratch Org<\/a><\/li>\n\n\n\n<li><a href=\"#pAccount\">Enable Person Account<\/a><\/li>\n\n\n\n<li><a href=\"#sandbox\">Deploy and Retrieve metadata from Sandbox&nbsp;&#8211;&nbsp;Old&nbsp;Source&nbsp;Format<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/getting-started-with-salesforce-dx-salesforce-developer-experience\/#workwithNewSourceCode\">Deploy and Retrieve metadata from Sandbox&nbsp;&#8211;&nbsp;New&nbsp;Source&nbsp;Format<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/getting-started-with-salesforce-dx-salesforce-developer-experience\/#setdefaultOrg\">Set default username or default dev hub<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/getting-started-with-salesforce-dx-salesforce-developer-experience\/#convertToSFDX\">package.xml to SFDX format<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/getting-started-with-salesforce-dx-salesforce-developer-experience\/#samplescriptRetr\">Sample Bash script to retrieve source code from developer or sandbox and convert to SFDX format<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/getting-started-with-salesforce-dx-salesforce-developer-experience\/#chngDefAPI\">Change SFDX API version<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/getting-started-with-salesforce-dx-salesforce-developer-experience\/#loginjwt\">Login to Salesforce Using Certificate \/ JWT<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/getting-started-with-salesforce-dx-salesforce-developer-experience\/#logoutcmd\">Remove entry from org list or logout<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/getting-started-with-salesforce-dx-salesforce-developer-experience\/#installpackage\">Install packages<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/getting-started-with-salesforce-dx-salesforce-developer-experience\/#unlockedpackage\">Create new Unlocked Package<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/getting-started-with-salesforce-dx-salesforce-developer-experience\/#newversion\">Updated Unlcokeed Package to new Version<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/getting-started-with-salesforce-dx-salesforce-developer-experience\/#promotepackage\">Promote Package for release<\/a><\/li>\n<\/ul>\n\n\n\n<p><strong>If we already have Salesforce Metadata API, Force.com IDE and other tools then why do we need one more tool like Salesforce DX ?<\/strong><\/p>\n\n\n\n<p>In tools like Changeset, Metadata API, or Force.com IDE, the source of truth is Sandbox. Although&nbsp;we can set up process and continuous integration (CI) to use some source code management (SCM) like Git or SVN. However, this kind of setup takes time, expertise, and a lot of effort.<\/p>\n\n\n\n<p>Salesforce DX not only solves the above problem but<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ability to consider SCM as a source of truth<\/li>\n\n\n\n<li>Use any favorite IDE or any SCM<\/li>\n\n\n\n<li>Powerful CLI to help minimize the complexity of setting up CI<\/li>\n\n\n\n<li>Updated Force.com IDE to support Salesforce DX if you are not comfortable with CLI<\/li>\n\n\n\n<li>and most important, spin-off&nbsp;Scratch Orgs&nbsp;within minutes through the script to quickly work on POC or package-based development<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"whatIs\"><strong>What are Scratch<\/strong> <strong>Orgs?<\/strong><\/h3>\n\n\n\n<p>Salesforce DX can be enabled for any Salesforce instance and they are known as&nbsp;<strong>Developer Hub<\/strong>. One Developer Hub can have multiple Scratch Orgs.&nbsp;<strong>Scratch Orgs are temporary Salesforce org which can be created quickly and metadata can be deployed from SCM.&nbsp;<\/strong>These kind of Orgs can be used by developers to perform quick proof of concept or build and test packages. Once the package is built and saved back on SCM, scratch org can be destroyed easily.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h3 class=\"wp-block-heading\">If we already have developer orgs or sandboxes, why do we need scratch orgs ?<\/h3>\n\n\n\n<p>Because of compliance of most of the clients, we cannot move their code to developer org to perform some POC or package development, so developer org is out of questions anyway.<\/p>\n\n\n\n<p>Now, let&#8217;s focus on Sandboxes. The use of sandboxes are mostly for end-to-end testing, integration testing, UAT or training. Sandboxes mostly represent either replica of production or future state of production which might be undergoing user acceptance testing (UAT). When we refresh Sandbox, we don&#8217;t get&nbsp;options on which metadata needs to be copied. Assume the situation, there is a defect on production and we need to go back in time and check how the system was behaving previously. Typical rollback scenario for sandboxes. We might have metadata stored somewhere, but we need to perform many iterations of destructive.xml to delete components from Sandbox. In this case, we can quickly spin off scratch org from source code and perform an analysis of historical code.<\/p>\n\n\n\n<p>This is just one example, there are many scenarios and specifically for appexchange development companies.<\/p>\n\n\n\n<p>I think we had lots of talks and are ready to roll now.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"setupDX\">Setting up Salesforce DX<\/h3>\n\n\n\n<p>Install <a href=\"https:\/\/devcenter.heroku.com\/articles\/heroku-cli\">Heroku CLI<\/a> and then run the below command<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nheroku plugins:install salesforcedx\n<\/pre><\/div>\n\n\n<p>Another way to install SalesforceDX during the pilot is to installer from here (Currently this URL is working however its location is not official). Once downloaded, install it. After installation makes sure the git command is working from the command line.<\/p>\n\n\n\n<p>In Salesforce DX, the source of truth is source control. so we need a repository for the demo. For this blog post, let&#8217;s consider this repository. Run the below command to clone this repository<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ngit clone https:\/\/github.com\/forcedotcom\/sfdx-simple cd sfdx-simple\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"loginOrg\">Authorize Salesforce DX to login to Developer Hub Org<\/h3>\n\n\n\n<p>Below command will set org as default&nbsp;<strong>Developer Hub Org&nbsp;<\/strong>and will set its alias as <em>my-devhub-org<\/em>. It will open Salesforce login page in default browser for OAuth flow, where we need to login to Developer Hub org and authorize Salesforce DX.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsfdx force:auth:web:login --setdefaultdevhubusername --setalias my-devhub-org\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"createOrg\">Creating Scratch Org<\/h3>\n\n\n\n<p>To create a scratch org in Salesforce DX, we need to have <em>workspace-scratch-def.json&nbsp;<\/em>. Best place is to place it in config folder. This file already exists in Git repository we cloned initial however we would need to update it with our FirstName, lastName, Email and Org preferences. All supported preferences are listed here in <a href=\"https:\/\/developer.salesforce.com\/docs\/atlas.en-us.api_meta.meta\/api_meta\/meta_settings.htm\" target=\"_blank\" rel=\"noopener noreferrer\">Metadata documentation<\/a>.<\/p>\n\n\n\n<p>You can find official documentation on <a href=\"https:\/\/developer.salesforce.com\/docs\/atlas.en-us.sfdx_dev.meta\/sfdx_dev\/sfdx_dev_scratch_orgs_def_file.htm\">sample scratch org definition file<\/a> and possible <a href=\"https:\/\/developer.salesforce.com\/docs\/atlas.en-us.sfdx_dev.meta\/sfdx_dev\/sfdx_dev_scratch_orgs_def_file_config_values.htm\">configuration values and features<\/a>.<\/p>\n\n\n\n<p>Below is a sample file<\/p>\n\n\n\n<p><strong>workspace-scratch-def.json<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\n{ \n\"Company\": \"Shivasoft\", \n\"Country\": \"US\", \n\"LastName\": \"Zaa\", \n\"Email\": \"jitendra.Zaa@shivasoft.in\", \n\"Edition\": \"Developer\", \n\"OrgPreferences\" : { \"S1DesktopEnabled\" : true }\n } \n<\/pre><\/div>\n\n\n<p>Edition of Org can be Professional, developer or enterprise.<\/p>\n\n\n\n<p>Once <em>workspace-scratch-def.json<\/em> created in config folder, run below command to create a scratch org. New scratch would be named as <em>jitendra2_scratch<\/em> and it can be configured by passing parameter&nbsp;to <em>&#8211;setalias<\/em><\/p>\n\n\n\n<p><em>Note : At a time of writing this post, scratch orgs auto deleted after 7 days however it may change when product goes GA.<\/em><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsfdx force:org:create --setdefaultusername -f config\/workspace-scratch-def.json --setalias jitendra2_scratch\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"metadata\">Moving code to Scratch Org<\/h3>\n\n\n\n<p>To move code, we need to define sfdx-workspace.json which contains path of source code needed to be pushed. Below is sample file<\/p>\n\n\n\n<p>simple <span style=\"text-decoration: underline;\">sfdx-workspace.json<\/span><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\n{   \n\"PackageDirectories\": \n  &#x5B;     \n    {       \n      \"Path\": \"force-app\"     \n    }   \n  ],   \n\"Namespace\": \"\",   \n\"SourceApiVersion\": \"39.0\" \n}\n<\/pre><\/div>\n\n\n<p><span style=\"text-decoration: underline;\">sfdx-workspace.json<\/span> with some more options<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\n{ \n\"Namespace\" : \"AcmeIncExample\", \n\"SfdcLoginUrl\" : \"https:\/\/login.salesforce.com\", \n\"SourceApiVersion\": \"39.0\" ,\n\"PackageDirectories\" : \n  &#x5B; \n    { \n      \"Path\" : \"helloWorld\", \n      \"Default\": true\n     }, \n      { \"Path\" : \"unpackaged\" }, \n      { \"Path\" : \"utils\" } \n] \n}\n<\/pre><\/div>\n\n\n<p><strong>Run below command to push metadata to default scratch org<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsf project deploy start\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">Get metadata changes from Scratch Org or Pull changes<\/h3>\n\n\n\n<p>We can also get metadata changes done in scratch Org either from UI or deployment. It will only pull if metadata changes, not the whole Org.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsf project retrieve start\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"listOrg\">Getting list of all existing Orgs<\/h3>\n\n\n\n<p>Before creating scratch org, you may want to know about the existing orgs and their aliases. We can run below command<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsfdx force:org:list\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"openOrg\">Open Salesforce Org from sfdx<\/h3>\n\n\n\n<p>Below command can be used to open Org from sfdx command line<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsfdx force:org:open or sfdx force:org:open -u org_alias \n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"testClass\">Running Test classes using Salesforce DX<\/h3>\n\n\n\n<p>To run test classes using Salesforce DX , use below command<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsfdx force:apex:test:run\n<\/pre><\/div>\n\n\n<p>Above command will return job Id, use that ID and run next command for status<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsfdx force:apex:test:report -i JOBID_FROM_ABOVE_COMMAND \n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"log\">Setting up log Levels<\/h3>\n\n\n\n<p>Salesforce DX logs are generated at USER_Home_DIR\/.sfdx\/sfdx.log. We can set it either with each command or globally. By default only Error logs are recorded but we can change log level. To set log level with each command, we can use &#8211;loglevel DEBUG. To set log level globally we can use<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n\/\/windows set SFDX_LOG_LEVEL=DEBUG \/\/Or in unix Export SFDX_LOG_LEVEL=DEBUG\n<\/pre><\/div>\n\n\n<p>Currently below log levels are supported<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>ERROR<\/li>\n\n\n\n<li>WARN<\/li>\n\n\n\n<li>INFO<\/li>\n\n\n\n<li>DEBUG<\/li>\n\n\n\n<li>TRACE<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"skel\">Creating skeleton workspace<\/h3>\n\n\n\n<p>We can automatically generate skeleton workspace using CLI which will create folder structure and json files with default value.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsfdx force:workspace:create --workspacename mywork OR sfdx force:workspace:create --workspacename mywork --defaultpackagedir myapp\n<\/pre><\/div>\n\n\n<p>Above command will create below folder structure<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large wp-image-6093\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"164\" src=\"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/05\/Salesforce-DX-Skeleton-Workspace.png?resize=1024%2C164&#038;ssl=1\" alt=\"Salesforce DX Skeleton Workspace\" class=\"wp-image-6093\" srcset=\"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/05\/Salesforce-DX-Skeleton-Workspace.png?resize=1024%2C164&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/05\/Salesforce-DX-Skeleton-Workspace.png?resize=300%2C48&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/05\/Salesforce-DX-Skeleton-Workspace.png?resize=768%2C123&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/05\/Salesforce-DX-Skeleton-Workspace.png?w=1111&amp;ssl=1 1111w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">Salesforce DX Skeleton Workspace<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"pwd\">Password for scratch Orgs<\/h3>\n\n\n\n<p>When we create a scratch org using sfdx CLI, it does not display password and uses OAuth internally to communicate with scratch org. If we need to login to scratch org from non sfdx CLI, then we would need to generate a password. Below command can be used to generate password.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsfdx force:user:password:generate\n<\/pre><\/div>\n\n\n<p>Message :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nSuccessfully set the password \"26y271a\" for user scratchorg1495650731268@shivasoft.in. You can see the password again by running \"force:org:describe\".\n<\/pre><\/div>\n\n\n<p>If we want to see password in future, then use below command<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nforce:org:describe\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"pAccount\">Enable Person Account<\/h3>\n\n\n\n<p>Make sure below steps are completed in Salesforce Hub instance before running below sfdx script<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create Record Type on Account<\/li>\n\n\n\n<li>Make sure OWD setting for contact is <em>Controlled by Parent<\/em>.<\/li>\n<\/ol>\n\n\n\n<p>Below code in <em>project-scratch-def.json<\/em> file would create a Person Account<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\n{     \n\"orgName\": \"Person Account Scratch Org\",     \n\"edition\": \"Enterprise\",     \n\"features\": &#x5B;\"PersonAccounts\"] \n}\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"sandbox\">Retrieve and Deploy code in Sandbox using SFDX &#8211; Old File Format<\/h3>\n\n\n\n<p>This <a href=\"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/use-metadata-api-with-salesforce-dx\/\">blog post goes in detail<\/a>, however, below is quick command<\/p>\n\n\n\n<p>Retrieve Metadata from Sandbox<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsfdx force:mdapi:retrieve -r .\/mdAPIZip -u jzaa1 -k src\/package.xml \n<\/pre><\/div>\n\n\n<p>Deploy Metadata to Sandbox<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n-- deploy zip file \nsfdx force:mdapi:deploy   -f ..\/mdAPIZip\/unpackaged.zip -u jzaa1 -w 10 \n-- or deploy traditional file structure \nsfdx force:mdapi:deploy  -d ..\/mdAPIZip\/unpackaged -u jzaa1 -w 10\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"workwithNewSourceCode\">Retrieve and Deploy code in Sandbox using SFDX &#8211; New Source Format<\/h3>\n\n\n\n<p>Deploy metadata to Sandbox or production using new source format<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsfdx force:source:deploy -p force-app\/main\/default\n<\/pre><\/div>\n\n\n<p>Retrieve metadata from Sandbox of Production using new source format for existing components in default folder<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsfdx force:source:retrieve -p force-app\/main\/default\n<\/pre><\/div>\n\n\n<p>Retrieve metadata from Sandbox \/ production on basis of package.xml in manifest folder<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsfdx force:source:retrieve -x manifest\/package.xml\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"setdefaultOrg\">Set Default Username or Default Devhub<\/h3>\n\n\n\n<p>Use below command to set default username for current project. For global use -g at end<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n$ sfdx force:config:set defaultusername=me@my.org defaultdevhubusername=me@myhub.org\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n$ sfdx force:config:set defaultdevhubusername=me@myhub.org -g\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"convertToSFDX\">Convert Package.xml to SFDX format<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsfdx force:mdapi:convert --rootdir \"manifest\"\n<\/pre><\/div>\n\n\n<p>In above command, &#8211;rootdir would be replaced by root path declared in sfdx-project.json <\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"samplescriptRetr\">Sample Code Snippet to retrieve metadata from Developer or Sandbox Instance and convert to SFDX source format<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\necho \"Retrieve Metadata from Developer instance\"\necho \"Command - sfdx force:mdapi:retrieve -r metadata -u pathtocode -k manifest\/package.xml\"\nsfdx force:mdapi:retrieve -r tmp -u pathtocode -k manifest\/package.xml\necho \"Unzip results\"\necho \"Command - unzip -o tmp\/unpackaged.zip -d manifest\"\nunzip -o tmp\/unpackaged.zip -d manifest\necho \"delete zipped result retrieved\"\nrm tmp\/unpackaged.zip\necho \"Move unzipped content to folder up\"\nmv manifest\/unpackaged\/* manifest \nrm -r manifest\/unpackaged\necho \"Convert Manifest to SFDX format Source\"\nsfdx force:mdapi:convert --rootdir \"manifest\"\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"chngDefAPI\">Change default SFDX API<\/h3>\n\n\n\n<p>Be default SFDX points to latest API of plugin. If I have SFDX installed for prerelease instances, that means it will not work for my developer or sandboxes because they are still on older API. In these scenarios, we can override SFDX API either globally or current project using below command. <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsfdx force:config:set apiVersion=44.0 --global\nor\nsfdx force:config:set apiVersion=44.0\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"loginjwt\">Login to Salesforce using Certificate \/ JWT<\/h3>\n\n\n\n<p><a href=\"https:\/\/developer.salesforce.com\/docs\/atlas.en-us.sfdx_cli_reference.meta\/sfdx_cli_reference\/cli_reference_force_auth.htm#cli_reference_force_auth\">Reference link<\/a><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsfdx force:auth:jwt:grant \n-r \"https:\/\/login.salesforce.com\" \n-a orgalias \n-f \"PathtoKey\/server.key\" \n-s -u username@salesforce.com -d \n-i \"ConsumerKey\" --json\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"logoutcmd\">Remove entry from org list or logout<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsfdx force:auth:logout \n-u &lt;usernamealias&gt; \n-p \n<\/pre><\/div>\n\n\n<p>You can also run below command to cleanup all orgs which are expired or deleted<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsfdx force:org:list --clean\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading installunlockedPackage\" id=\"installpackage\">Install Package \/ Manage Package or Unlocked Package<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsfdx force:package:install -p &#x5B;packageId] -w 30 -u &#x5B;scratchOrgName] -k &#x5B;passwordIfAny]\n<\/pre><\/div>\n\n\n<p>You can find the list of a few Salesforce <a href=\"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/my-favorite-appexchange-products\/\">AppExchange here<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"unlockedpackage\">Create a new Unlocked Package<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsfdx force:package:create -n &lt;package_name&gt; -d &lt;Package Description&gt; -t Unlocked -r force-app --json --wait 20 -e --codecoverage\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"newversion\">Update Unlocked Package to new Version<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsfdx force:package:version:create -p &lt;package name&gt; -d force-app -k &lt;password&gt; -w 10 -v &lt;dev_hub_user_alias&gt; -f config\/project-scratch-def.json --releasenotesurl &lt;url&gt; --codecoverage\n<\/pre><\/div>\n\n\n<p>Example<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsfdx force:package:version:create -a \"Log framework 2.0 add on Package\" -e \"Nov 18 2020 release\" -p log_framework -d force-app -k jit_opensource_pwd -w 80 -v Prod_unlocked -f config\/project-scratch-def.json --releasenotesurl \"https:\/\/jitendrazaa.com\/blog\/log_framework=%2FREADME.md&amp;_a=preview\" --codecoverage\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">Create Org Dependent Package<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsfdx force:package:create -t Unlocked -r force-app -n &amp;lt;app name&gt; --orgdependent\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">Update the package name or description<\/h3>\n\n\n\n<p><a href=\"https:\/\/developer.salesforce.com\/docs\/atlas.en-us.sfdx_dev.meta\/sfdx_dev\/sfdx_dev_unlocked_pkg_create_pkg_base.htm?q=description\">official document link<\/a><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsfdx force:package:update --package \"Expense App\" --name \"Expense Manager App\" \\\n--description \"New Description\" --errornotificationusername me2@devhub.org\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"promotepackage\">Promote Package for release<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsfdx force:package:version:promote --package &amp;lt;package alias&gt;\n<\/pre><\/div>\n\n\n<p>Example<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsfdx force:package:version:promote --package \"log_framework@0.9.0-4\" -v Prod_unlocked\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Governor Limit information<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsfdx force:limits:api:display\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Delete a Scratch Org<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsfdx force:org:delete -u &amp;lt;org alias&gt;\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Salesforce DX\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/XP3ma4lPE_U?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction and basics of Salesforce Developer Experience (Salesforce DX) with source code and Video tutorials<\/p>\n","protected":false},"author":1,"featured_media":6099,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"jz_research_post":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[9],"tags":[58,414,415,212],"class_list":["post-6062","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-salesforce","tag-cli","tag-salesforce-dx","tag-sfdx","tag-video-tutorial"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/05\/sfdx.jpg-large.jpg?fit=1024%2C512&ssl=1","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":6499,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/using-salesforcedx-sfdx-with-non-scratch-orgs\/","url_meta":{"origin":6062,"position":0},"title":"Using SalesforceDX (SFDX) with non Scratch Orgs","author":"Jitendra","date":"June 24, 2018","format":false,"excerpt":"How to use SalesforceDX (SFDX) with Sandbox, Developer and Production Orgs","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"Use SFDX with non scratch Orgs","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2018\/06\/Screen-Shot-2018-06-24-at-9.08.53-PM.png?fit=1200%2C645&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2018\/06\/Screen-Shot-2018-06-24-at-9.08.53-PM.png?fit=1200%2C645&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2018\/06\/Screen-Shot-2018-06-24-at-9.08.53-PM.png?fit=1200%2C645&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2018\/06\/Screen-Shot-2018-06-24-at-9.08.53-PM.png?fit=1200%2C645&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2018\/06\/Screen-Shot-2018-06-24-at-9.08.53-PM.png?fit=1200%2C645&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":6360,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/import-and-export-records-using-salesforce-dx\/","url_meta":{"origin":6062,"position":1},"title":"Import and Export Records using Salesforce DX","author":"Jitendra","date":"November 13, 2017","format":false,"excerpt":"Using Salesforce DX to Export and Import records into regular Salesforce Instances without dependency on developer hub org","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"Import and Export Records using SalesforceDx","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/11\/Import-and-Export-Records-using-SalesforceDx.png?fit=1167%2C347&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/11\/Import-and-Export-Records-using-SalesforceDx.png?fit=1167%2C347&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/11\/Import-and-Export-Records-using-SalesforceDx.png?fit=1167%2C347&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/11\/Import-and-Export-Records-using-SalesforceDx.png?fit=1167%2C347&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/11\/Import-and-Export-Records-using-SalesforceDx.png?fit=1167%2C347&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":6606,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/build-a-salesforce-dx-plugin-in-15-minutes-dreamforce-2018\/","url_meta":{"origin":6062,"position":2},"title":"Build a Salesforce DX Plugin in 15 Min","author":"Jitendra","date":"September 14, 2018","format":false,"excerpt":"My Dreamforce Session to create a Salesforce DX plugin in 15 minutes","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"Salesforce DX Plugin Structure","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2018\/09\/Salesforce-DX-Plugin-Structure.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":6353,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/use-metadata-api-with-salesforce-dx\/","url_meta":{"origin":6062,"position":3},"title":"Use Metadata API with Salesforce DX","author":"Jitendra","date":"November 12, 2017","format":false,"excerpt":"How to use SalesforceDX to deploy metadata in Sandboxes or Non-Scratch Salesforce instances","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"Use Metadata API or Package.xml with Salesforce DX","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/11\/Use-Metadata-API-or-Package.xml-with-SFDX.png?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/11\/Use-Metadata-API-or-Package.xml-with-SFDX.png?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/11\/Use-Metadata-API-or-Package.xml-with-SFDX.png?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/11\/Use-Metadata-API-or-Package.xml-with-SFDX.png?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/11\/Use-Metadata-API-or-Package.xml-with-SFDX.png?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":29507,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/moving-authenticated-orgs-in-salesforce-cli-from-one-macbook-to-another-secure-way\/","url_meta":{"origin":6062,"position":4},"title":"Moving Authenticated Orgs in Salesforce CLI from One MacBook to Another (Secure Way)","author":"Jitendra","date":"September 28, 2024","format":false,"excerpt":"Looking to migrate your Salesforce CLI authenticated orgs from one MacBook to another without re-authenticating each org? This step-by-step guide shows how to securely export and import your sfdxAuthUrl values using the Salesforce CLI (sf or sfdx). Avoid third-party apps or risky GitHub scripts\u2014keep your org credentials safe while setting\u2026","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"Salesforce CLI","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2025\/09\/Salesforce-CLI-scaled.png?fit=1200%2C410&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2025\/09\/Salesforce-CLI-scaled.png?fit=1200%2C410&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2025\/09\/Salesforce-CLI-scaled.png?fit=1200%2C410&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2025\/09\/Salesforce-CLI-scaled.png?fit=1200%2C410&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2025\/09\/Salesforce-CLI-scaled.png?fit=1200%2C410&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":7817,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/automate-and-conquer-how-task-json-can-supercharge-your-salesforce-development\/","url_meta":{"origin":6062,"position":5},"title":"Automate and Conquer: How Task.json Can Supercharge Your Salesforce Development","author":"Jitendra","date":"June 1, 2023","format":false,"excerpt":"Discover the game-changing power of Task.json in Salesforce development with Visual Studio Code (VSCode) and Salesforce DX (SFDX). Streamline your workflow, automate tasks, and boost productivity as you dive into the world of Salesforce development. Explore how Task.json simplifies development with VSCode, accelerates SFDX deployments, and ensures consistency across your\u2026","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"SFDX + Task.json","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2023\/06\/SFDX-Task.json_.png?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2023\/06\/SFDX-Task.json_.png?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2023\/06\/SFDX-Task.json_.png?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2023\/06\/SFDX-Task.json_.png?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2023\/06\/SFDX-Task.json_.png?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/posts\/6062","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/comments?post=6062"}],"version-history":[{"count":69,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/posts\/6062\/revisions"}],"predecessor-version":[{"id":16764,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/posts\/6062\/revisions\/16764"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/media\/6099"}],"wp:attachment":[{"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/media?parent=6062"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/categories?post=6062"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/tags?post=6062"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}