Skip to content

Instantly share code, notes, and snippets.

@sfdcale
Created March 25, 2020 03:29
Show Gist options
  • Select an option

  • Save sfdcale/c7ac57aaf54c3652ab0b390a98395607 to your computer and use it in GitHub Desktop.

Select an option

Save sfdcale/c7ac57aaf54c3652ab0b390a98395607 to your computer and use it in GitHub Desktop.
#!/bin/bash
prepare_wildcard_package (){
echo " <types>" >> package_temp.xml
echo " <members>*</members>" >> package_temp.xml
echo " <name>$1</name>" >> package_temp.xml
echo " </types>" >> package_temp.xml
}
rm -f temp.txt
rm -f package_temp.xml
echo "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n" >> package_temp.xml
echo "<Package xmlns=\"http://soap.sforce.com/2006/04/metadata\">" >> package_temp.xml
sfdx force:mdapi:listmetadata --metadatatype=EmailFolder --targetusername=$1 --json | jq '.result[].fullName' > temp.txt
input="temp.txt"
echo " <types>" >> package_temp.xml
while IFS= read -r line
do
folderName="${line//\"/}"
#folderName="'$id'"
echo "$folderName"
rm -f temp_1.txt
sfdx force:mdapi:listmetadata --metadatatype=EmailTemplate --folder=$folderName --targetusername=$1 --json | jq '.result[].fullName' >> temp_1.txt
while IFS= read -r line1
do
templateName="${line1//\"/}"
echo " <members>$templateName</members>" >> package_temp.xml
done < "temp_1.txt"
rm -f temp_1.txt
done < "$input"
echo " <name>EmailTemplate</name>" >> package_temp.xml
echo " </types>" >> package_temp.xml
rm -f temp.txt
# this below section prepares package.xml for CustomObject type.
echo " <types>" >> package_temp.xml
sfdx force:mdapi:listmetadata --metadatatype=CustomObject --targetusername=$1 --json | jq '.result[].fullName' > temp.txt
input="temp.txt"
while IFS= read -r line
do
objName="${line//\"/}"
echo " <members>$objName</members>" >> package_temp.xml
done < "$input"
echo " <name>CustomObject</name>" >> package_temp.xml
echo " </types>" >> package_temp.xml
rm -f temp.txt
#this below section prepares package.xml for Layout.
echo " <types>" >> package_temp.xml
sfdx force:mdapi:listmetadata --metadatatype=Layout --targetusername=$1 --json | jq '.result[]' | jq '"\(.fullName)____\(.manageableState)____\(.namespacePrefix)"' > temp.txt
input="temp.txt"
while IFS= read -r line
do
line="${line//\"/}"
layoutType=$(awk -F'____' '{print $2}' <<< $line) # this gives whether it is installed or unmanaged
if [ $layoutType == "installed" ]
then
fullLayoutName=$(awk -F'____' '{print $1}' <<< $line)
objName=$(awk -F'-' '{print $1}' <<< $fullLayoutName)
layOutName=$(awk -F'-' '{print $2}' <<< $fullLayoutName)
nameSpacePrefix=$(awk -F'____' '{print $3}' <<< $line)
fixedLayoutName=$objName-$nameSpacePrefix"__"$layOutName
echo " <members>$fixedLayoutName</members>" >> package_temp.xml
else
fullLayoutName=$(awk -F'____' '{print $1}' <<< $line)
echo " <members>$fullLayoutName</members>" >> package_temp.xml
fi
done < "$input"
echo " <name>Layout</name>" >> package_temp.xml
echo " </types>" >> package_temp.xml
rm -f temp.txt
#this below section prepares package.xml for RecordType.
echo " <types>" >> package_temp.xml
sfdx force:mdapi:listmetadata --metadatatype=RecordType --targetusername=$1 --json | jq '.result[].fullName' > temp.txt
input="temp.txt"
while IFS= read -r line
do
objName="${line//\"/}"
echo " <members>$objName</members>" >> package_temp.xml
done < "$input"
echo " <name>RecordType</name>" >> package_temp.xml
echo " </types>" >> package_temp.xml
rm -f temp.txt
#this below section prepares package.xml for CustomField.
echo " <types>" >> package_temp.xml
sfdx force:mdapi:listmetadata --metadatatype=CustomField --targetusername=$1 --json | jq '.result[].fullName' > temp.txt
input="temp.txt"
while IFS= read -r line
do
objName="${line//\"/}"
echo " <members>$objName</members>" >> package_temp.xml
done < "$input"
echo " <name>CustomField</name>" >> package_temp.xml
echo " </types>" >> package_temp.xml
rm -f temp.txt
prepare_wildcard_package ApexClass
prepare_wildcard_package ApexTrigger
prepare_wildcard_package ApexComponent
prepare_wildcard_package ApexPage
prepare_wildcard_package AuraDefinitionBundle
prepare_wildcard_package LightningComponentBundle
prepare_wildcard_package Flow
prepare_wildcard_package CustomMetadata
echo " <version>46.0</version>" >> package_temp.xml
echo "</Package>" >> package_temp.xml
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment