Skip to content

Instantly share code, notes, and snippets.

@smileham
Created November 28, 2023 16:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save smileham/0edd18764600746be2ab3320acb7a9b7 to your computer and use it in GitHub Desktop.
Save smileham/0edd18764600746be2ab3320acb7a9b7 to your computer and use it in GitHub Desktop.
GetInstalledPackages
/*
* Get Installed Packages via Salesforce CLI
*
* Please ensure you have first authenticated against your Salesforce sandbox and have defined an Alias
* No Warranty is provided for this script.
*
* This script if a Proof of Concept to create Application Components based on Installed Packages in a SF sandbox
*
* Running this script will then:
* * Create new Managed Packages folder
* * Create new Specialisation for Appliation Component - Managed Package
* * Create new Application Component for each Installed Package in the SF Sandbox.
*
* Requires jArchi - https://www.archimatetool.com/blog/2018/07/02/jarchi/
* Requires Salesforce CLI
*
* Version 1: Proof of Concept
*
* (c) 2023 Steven Mileham
*
*/
console.clear();
console.log("Get Installed Packages via Salesforce CLI");
function executeCommand(commandArray) {
var runtime = Java.type("java.lang.Runtime").getRuntime();
var Scanner = Java.type("java.util.Scanner");
var process = runtime.exec(commandArray);
var inputStream = process.getInputStream();
var scan = new Scanner(inputStream).useDelimiter("\\A");
var val = "";
if (scan.hasNext()) {
val = scan.next();
}
else {
val ="";
}
return val;
}
var sfSandbox = "SANDBOX ALIAS";
var ignoreAutomated = true;
if (!model.findSpecialization("Managed Package","application-component")) {
var sObjectSpec = model.createSpecialization("Managed Package", "application-component");
}
/*var theView = $(selection).filter("archimate-diagram-model").first();
console.log(theView);
var theSObjects = $(theView).find("data-object");
*/
var theApplicationFolder = $("folder.Application")[0];
var theParentFolder = $(theApplicationFolder).find("folder."+sfSandbox)[0];
//var theSObjectFolder = $(theParentFolder).find("folder.sObjects")[0];
var thePackageFolder = null
if (theParentFolder) {
thePackageFolder = $(theParentFolder).find("folder.Managed Packages")[0];
}
if (!thePackageFolder) {
thePackageFolder = theParentFolder.createFolder("Managed Packages");
}
var sfCLIOutput = executeCommand(["C:\\Program Files\\sf\\bin\\sf.cmd","org","list","metadata","--metadatatype", "InstalledPackage", "-o", sfSandbox, "--json"]);
var installedPackages = JSON.parse(sfCLIOutput);
console.log (installedPackages);
installedPackages.result.forEach(createManagedPackage);
function createManagedPackage(currentValue, index) {
var thePackage = $(thePackageFolder).find("application-component."+currentValue.fullName)[0];
//console.log(theFolder+":"+theSObject);
//console.log("Checking:"+currentValue);
if (!thePackage) {
var ignore = false;
if (ignoreAutomated && currentValue.createdByName=="Automated Process") {
ignore = true;
}
//console.log(index+":"+currentValue+":"+ignore);
if (!ignore) {
var thePackage = model.createElement("application-component", currentValue.fullName, thePackageFolder);
thePackage.specialization = "Managed Package";
//var theRelationship = model.createRelationship("composition-relationship","",theGroup, sObject)
}
}
}
console.log("Done");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment