amtrack / sfdx-plugin-source-read

sfdx plugin to read Metadata via CRUD Metadata API
37 stars 4 forks source link

sfdx-plugin-source-read

sfdx/sf plugin to read Metadata via CRUD Metadata API

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

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

[!NOTE] This plugin simply returns the unfiltered response from the CRUD-based Metadata API.

Installation

sf plugins install sfdx-plugin-source-read

Usage

sf force source read -m "Profile:Admin"
sf force source read -p force-app/main/default/profiles/Admin.profile-meta.xml
sf force source read -m "RecordType:Account.Business"
sf force source read -p force-app/main/default/objects/Account/recordTypes/Business.recordType-meta.xml

Example

Retrieving Profiles using the file-based Metadata API

When retrieving Profiles, the file-based Metadata API behaves differently for source-tracked and non source-tracked orgs:

Without source tracking, retrieving profiles only returns some profile information

a.k.a. a minimal Profile containing only userPermissions and entries for components listed in the package.xml of the retrieve request.

With source tracking, retrieving profiles returns profile information pertaining to anything else specified in the package.xml file plus any components getting tracked by source tracking

a.k.a. a more kind of "full" Profile containing entries for all metadata having a SourceMember record in that org.

Reading Profiles using the CRUD Metadata API

The CRUD Metadata API shows yet another behaviour:

It returns a kind of "full" Profile independent of source tracking and even containing entries for metadata from Managed Packages etc.

[!WARNING] Unfortunately Profiles might include tabVisibilites for tabs not available in the org (see #66).

Without further processing this will cause deployment errrors.

Disclaimer

Currently this has been tested only for Profiles and RecordTypes.