Created
November 28, 2023 16:06
-
-
Save smileham/0edd18764600746be2ab3320acb7a9b7 to your computer and use it in GitHub Desktop.
GetInstalledPackages
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* 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