References

Tools

sfdx-browserforce-plugin

sfdx plugin for browser automation

SalesforceSalesforce DXNode.jsTypeScriptBrowser Automationsfdx-plugin

Although gaps in the Metadata API are being filled very quickly recently, still not all Configuration in the Setup Menu is available as Metadata.

This sfdx plugin uses Browser Automation to toggle Features and apply Configuration as a last resort for automation.

Examples: "Enabling critical updates", "Setting up Customer Portal" or "Activating Standard LEX Themes"

sfdx-plugin-source-read

sfdx plugin to read Metadata via CRUD Metadata API

SalesforceSalesforce DXNode.jssfdx-plugin

For certain Metadata Types there is a different behaviour of the file-based vs. CRUD-based Metadata API.

This sfdx plugin provides the sfdx force:source:read command to read Metadata using the "CRUD-based" Metadata API similar to sfdx force:source:retrieve (which uses the "file-based" Metadata API).

Example: Reading full Profiles where the file-based Metadata API only returns a fraction.

force-dev-tool

Command line tool supporting the Force.com development lifecycle

SalesforceNode.jsMetadata API

In times before Salesforce DX this CLI provided many useful commands to deal with Metadata. The top two features are:

  1. Generating a complete package.xml file for Metadata retrieval
  2. Creating incremental deployments based on your changes in Git

Note: force-dev-tool has been deprecated in July 2018 in favor of Salesforce DX.

pmd-bin

Standalone PMD (static code analyzer) with its own JRE

Bash

With Salesforce DX and the growing number of sfdx plugins, the stack is set to Node.js and npm/yarn.

This package makes it easy for you to install and use the famous PMD (static code analyzer; written in Java) in your projects using npm/yarn.

sfdx-plugin-auth-url

sfdx plugin for importing/exporting orgs using a Sfdx Auth Url

SalesforceSalesforce DXNode.jssfdx-plugin

This is a simple but very convenient plugin for dealing with Sfdx Auth Urls in the form of two easy to remember commands: auth-url:import and auth-url:export.

It takes the pain of having to read/write the credential from/to a file. Use it to keep your CI setup scripts simple and share credentials to scratch orgs with your colleagues ad-hoc.

metadata-xml-tool

CLI tool for processing Salesforce Metadata XML files

SalesforceBash

After retrieving or before deploying Metadata, you'll sometimes need to remove or replace org-specific values.

Unlike other tools, metadata-xml-tool understands basic XML and preserves the indentation and line-endings.

apex-log-filter

CLI for filtering USER_DEBUG output from Salesforce Anonymous Apex execution logs

SalesforceSalesforce DXNode.js

When executing Anonymous Apex using sfdx force:apex:execute the logs contain a lot of debug information. If you want to show only the output coming from System.debug() this is the tool to use.

Unlike a simple grep '|USER_DEBUG|' this tools supports multi-line messages.

Talks

YeurDreamin' 22
Amsterdam, Netherlands

We need to talk about: Metadata - the Secret Sauce of Salesforce Customisation

SalesforceMetadata

2022-06-18

What do Admins and Developers have in common? They change Metadata all day long! Either you have already seen those XML files or you just heard about it: Salesforce Metadata is the secret sauce which makes customising the Salesforce platform so powerful - and sometimes so complicated.

Join us on a journey to better understand what Salesforce Metadata is and how you could utilise it for faster Salesforce customisation. Get insights, inspiration and surprises from two Metadata addicts to be more efficient in your day by day Salesforce business.

Recording available on YouTube.

Co-Speaker: Christian Menzinger

Salesforce Developer Group
Munich, Germany

Let's Talk Code: The Power of CLI, JavaScript and the Ohana

SalesforceJavaScript

2022-01-20

Matthias Rolke and Christian Menzinger having a code based conversation on how the CLI and JavaScript can help with Metadata challenges.

Live Coding a CLI using Node.js and the official @salesforce/core library to retrieve the full content of a Profile (Source Code available here).

SkiForce 19
Obergurgl, Austria

Browser Automation as a last resort for Salesforce DevOps

SalesforceSalesforce DXBrowser AutomationDevOps

2019-04-13

Tired of manually clicking through pre- or post-deployment tasks? Need to activate that Critical Update in hundreds of orgs?

Prevent Carpal Tunnel Syndrome by using the open source sfdx-browserforce-plugin.

This talk highlights why browser automation can be crucial in a Software Development Lifecycle with Salesforce.

Salesforce Developer Meetup
Vienna, Austria

Leveraging SFDX for Managed Package Development

SalesforceSalesforce DXBash

2018-01-25

"Revisiting our Software Development Lifecycle (SDLC): from CD (chaotic disorder) to CI (continuous integration) in 12 weeks."

This talk highlights the necessity for transitioning to Salesforce DX both from a technical and project management perspective.

Co-Speaker: Harald Mayer (IPfolio)

Salesforce Developer Meetup
Munich, Germany

An opinionated Development Lifecycle for Force.com

Salesforceforce-dev-toolGitWorkflow

2016-08-17

This talk highlights five major challenges in the Salesforce Software Development Lifecycle and presents an opinionated workflow using force-dev-tool.

  1. Metadata
  2. Build process
  3. CI / CD (Continuous Integration / Continuous Delivery / Continuous Deployment)
  4. Deployment
  5. Development environments

Projects

DevOps Advisory

SalesforceSalesforce DX

After using Hutte for my clients since 2019, I'm now part of the team as an advisor with the mission to make SalesforceDX accessible to anyone.

Development of a Provisioning Tool for an ISV

SalesforceSalesforce DXsfdx-pluginTypeScript

Together with a team of a PDO (Product Development Outsourcer), I've developed a custom-tailored solution for an ISV to provision orgs with different combinations of Packages, Metadata and Data.

Transition to Salesforce DX with 2nd Generation Packages

SalesforceSalesforce DX2GPContinuous Delivery

Transition a Customer Org to Salesforce DX with 2nd Generation (Org-Dependent Unlocked) Packages.

Challenges:

  • switch from passive to active version control
  • untangle Metadata dependencies
  • use scratch orgs even for org-dependent unlocked packages
  • large code base with long-running tests

Solution:

  • refactor/modularize existing codebase to use packages where possible
  • setup CI/CD with incremental deployment based on Git for remaining org-based deployment
  • reduce test execution time by minimizing happy soup

Bulk Rollout of Lightning Experience

SalesforceSalesforce DXDevOpsNode.jsBashTools

Rollout Lightning Experience in bulk for an OEM ISV with a large customer base.

Challenge: manual steps not feasible

  • patch layouts, apps, profiles and custom objects
  • change Lightning Experience theme
  • apply diverse settings

Solution: develop an sfdx plugin leveraging different APIs

Transition a Certified Managed Package to Salesforce DX

SalesforceSalesforce DXDevOpsContinuous IntegrationContinuous DeliveryNode.jsBashTools

Transition a 1st generation Salesforce Certified Managed Package to Salesforce DX.

Set up Version Control and a CI/CD pipeline with Travis CI.

Challenge: gaps in Metadata preventing development and testing in scratch orgs

Solution: develop an sfdx plugin (sfdx-browserforce-plugin) to enable and set up required features using browser automation

SFDX Plugin Development

Salesforcesfdx-pluginTypeScript

Develop an sfdx plugin to automate OEM ISV specific release tasks.

Challenge: issues in the CRUD- and file-based Metadata API as well as the Tooling API

Solution: develop an sfdx plugin leveraging different APIs

  • generic commands for custom ETL-style Metadata manipulation
  • document issues in the Metadata API and develop workarounds
  • use Browser Automation as last resort (sfdx-browserforce-plugin)

3rd Level Salesforce DevOps Support

SalesforceSalesforce DXDevOpsContinuous IntegrationContinuous DeliveryNode.jsBashTools

On-demand support for a development team with challenging Salesforce DevOps topics.

Challenges:

  • new releases of sfdx and the Salesforce Platform
  • ISV-specific restrictions
  • running non-trivial migrations in subscriber orgs

Solution: provide consultation services and implement solutions remotely and on-demand

Development for a Salesforce Tooling Vendor

SalesforceMetadata APIConsultingDevelopmentGo

Consulting and development for a Salesforce Tooling Vendor regarding org-based Metadata retrieval and deployment.

Challenges:

  • learning the Go programming language
  • developing resource-friendly code to ensure scalability

Transition a Managed Package to Salesforce DX

SalesforceSalesforce DXDevOpsContinuous IntegrationContinuous DeliveryNode.jsBashTools

Transition an internal 1st generation Salesforce Managed Package to Salesforce DX to be used in a Multi-Org setup.

Set up Version Control and a CI/CD pipeline with Bitbucket Pipelines.

On-Site Consulting for Org-Based CI/CD

SalesforceContinuous IntegrationGitJenkinsforce-dev-tool

On-site consulting and training for a Salesforce customer to set up an org-based CI/CD pipeline with Jenkins.

Set up a Cron Job on Jenkins to dynamically retrieve all Metadata to Version Control.

Challenge: large org with many dependencies and long-running tests

Development of a Job Scheduling Tool

SalesforceNode.jsAPIsHerokuMetadata BackupTest AutomationGit

Develop and operate an internal tool for procesing long-running operations (e.g. Metadata retrieval, Unit Test Execution) against Salesforce orgs.

Challenge: large number of jobs

Solution: queue-based scheduling to ensure scalability

Manage Large Deployments

SalesforceSDLCforce-dev-toolContinuous IntegrationContinuous Delivery

Manage and operate Metadata Deployments in a large Salesforce project.

Challenge: integrating multiple streams of development with passive version control

Support Resolving Deployment Issues

SalesforceDevOpsContinuous IntegrationContinuous DeliveryNode.jsBashTools

Temporarily analyse and resolve deployment issues in an org-based CI/CD pipeline which was never run successfully before.

Challenge: lots of different issues after a long period of development without active version control

Solution: battle through issues documenting each error and workaround

After Go-Live Support of a Salesforce DX Transition

SalesforceSalesforce DXDevOpsContinuous IntegrationContinuous DeliveryNode.jsBashTools

DevOps Consulting for a Salesforce App Vendor (ISV).

Challenge: early days of Salesforce DX with lots of issues

Development Lifecycle Consulting

SalesforceSDLC

Design and implement a Pragmatic org-based Development Lifecycle for a Salesforce Implementation Partner.

Challenge: declarative and cloud-based development/administration

Solution: implement passive version control

CI/CD Improvements

SalesforceDevOpsContinuous IntegrationContinuous DeliveryGit

Analyze and improve an org-based CI/CD pipeline.

Challenge: improve overall build and release performance

Solution: switch from full to incremental deployments based on Git