Last active
December 15, 2019 09:36
-
-
Save TonyRenHK/f4d3ed2a3a4ce3a22c256d224ad739bd to your computer and use it in GitHub Desktop.
retrieve salesforce Class/Page code.js
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
var jsforce = require('jsforce'); | |
var mkdirp = require('mkdirp'); | |
var conn = new jsforce.Connection({ | |
loginUrl: 'https://test.salesforce.com', // if the org is sandbox 'https://test.salesforce.com', if it is Production,please input https://login.salesforce.com' | |
version: '36.0' | |
}); | |
var currentdate = new Date(); | |
var datetime = 'YourProjectName_' + String(currentdate.getFullYear()) + String(currentdate.getMonth() + 1) + String(currentdate.getDate()) + '-' + String(currentdate.getHours()) + String(currentdate.getMinutes()) + String(currentdate.getSeconds()); | |
console.log('Create File Name: ' + datetime); | |
//Create Folder for 'Object', 'Class','ApexPage' 'Comp' | |
mkdirp(datetime + '/Object', function(err) { | |
if (err) console.error(err) | |
else console.log('Object created!') | |
}); | |
mkdirp(datetime + '/Class', function(err) { | |
if (err) console.error(err) | |
else console.log('Class created!') | |
}); | |
mkdirp(datetime + '/ApexPage', function(err) { | |
if (err) console.error(err) | |
else console.log('ApexPage created!') | |
}); | |
mkdirp(datetime + '/Comp', function(err) { | |
if (err) console.error(err) | |
else console.log('Comp created!') | |
}); | |
//This place input username and password | |
conn.login('username', 'Password', function(err, res) { | |
if (err) { | |
return console.error(err); | |
} | |
// Get lightning component | |
FetchLightningResources('select id, AuraDefinitionBundleId,AuraDefinitionBundle.DeveloperName,Format,DefType,Source from AuraDefinition'); | |
//Get Object Metadata | |
FetchSFDCObject('select id,DeveloperName from CustomObject'); | |
//Get Apex Page | |
FetchPageComp('ApexPage', " SELECT Id, Name,Markup FROM ApexPage "); | |
//Get Apex Components | |
FetchPageComp('Comp', " SELECT Id, Name,Markup FROM apexComponent "); | |
//Get All Apex Class you can also retreieve ApexTrigger class FetchedClass('ApexTrigger', "SELECT Id,Name,Body from ApexTrigger where Name like 'ASI%' "); | |
FetchedClass("SELECT Id, Name,Body FROM ApexClass "); | |
}); | |
//****************************Fetching SFDC Object********************** | |
function FetchSFDCObject(inputSQL) { | |
conn.tooling.query(inputSQL, function(err, result) { | |
if (err) { | |
return console.error(err); | |
} | |
console.log('****Start Getting Object**'); | |
var ObjectNameList = []; | |
var Count = 0; | |
for (var i = 0; i < result.records.length; i++) { | |
ObjectNameList.push(result.records[i].DeveloperName + '__c'); | |
if (Count == 9) { | |
GetObjectMetaData(ObjectNameList); | |
ObjectNameList = []; | |
Count = 0; | |
} | |
Count++; | |
} | |
}); | |
} | |
//********************Get Lightning Components************************************************************ | |
function FetchLightningResources(inputSQL) { | |
conn.query(inputSQL, function(err, result) { | |
if (err) { | |
return console.error(err); | |
} | |
if (result.totalSize > 0) { | |
for (var i = 0; i < result.totalSize; i = i + 200) { | |
FetchLightningComp(inputSQL + ' offset ' + i); | |
} | |
} | |
}); | |
} | |
function FetchLightningComp(inputSQL) { | |
conn.query(inputSQL, function(err, result) { | |
if (err) { | |
return console.error(err); | |
} | |
for (var i = 0; i < result.records.length; i++) { | |
if (result.records[i].Source != '(hidden)') { | |
//Create Folder | |
CraetingLightningComp(result.records[i]); | |
} | |
} | |
}); | |
} | |
//create lightning folder and file | |
function CraetingLightningComp(InputObject) { | |
mkdirp(datetime + '/LightningComponent/' + InputObject.AuraDefinitionBundle.DeveloperName, function(err) { | |
if (err) { | |
console.error(err) | |
} | |
else { | |
if (InputObject.Format === 'JS' || InputObject.Format == 'CSS') { | |
writefile(InputObject.DefType + '.' + InputObject.Format, 'LightningComponent/' + InputObject.AuraDefinitionBundle.DeveloperName, InputObject.Source); | |
} | |
else { | |
writefileVF(InputObject.DefType + '.' + InputObject.Format, 'LightningComponent/' + InputObject.AuraDefinitionBundle.DeveloperName, InputObject.Source); | |
} | |
} | |
}); | |
} | |
//******************** End of Getting Lightning Component******************************************************// | |
//******************** Get Apex Page /Components ******************************************************// | |
function FetchPageComp(InputType, inputSQL) { | |
conn.query(inputSQL, function(err, result) { | |
if (err) { | |
return console.error(err); | |
} | |
console.log(InputType + "total : " + result.totalSize); | |
//console.log("fetched: " + result.records.length); | |
if (result.totalSize > 0) { | |
for (var i = 0; i < result.totalSize; i = i + 200) { //console.log(inputSQL+' offset '+i); | |
queryPageComp(InputType, inputSQL + ' offset ' + i); | |
} | |
} | |
}); | |
} | |
function queryPageComp(InType, inputSQL) { | |
var records = []; | |
conn.query(inputSQL, function(err, result) { | |
if (err) { | |
return console.error(err); | |
} //console.log("total : " + result.totalSize);console.log("fetched: " + result.records.length); | |
for (var i = 0; i < result.records.length; i++) { //console.log(result.records[i].Name); | |
var filetype = ''; | |
if (InType == 'ApexPage') { | |
filetype = '.html'; | |
} | |
else { | |
filetype = '.cmp' | |
} | |
writefileVF(result.records[i].Name + filetype, InType, result.records[i].Markup); | |
} | |
}); | |
} | |
//******************** End of Geting Apex Page /Components ******************************************************// | |
//********************Get Class /ApexTrigger ******************************************************// | |
function FetchedClass(inputSQL) { | |
conn.query(inputSQL, function(err, result) { | |
if (err) { | |
return console.error(err); | |
} //console.log("total : " + result.totalSize); | |
if (result.totalSize > 0) { | |
for (var i = 0; i < result.totalSize; i = i + 200) { | |
queryRecordClass(inputSQL + ' offset ' + i); | |
} | |
} | |
}); | |
} | |
function queryRecordClass(inputSQL) { | |
conn.query(inputSQL, function(err, result) { | |
if (err) { | |
return console.error(err); | |
} | |
console.log("fetched Class : " + result.records.length); | |
for (var i = 0; i < result.records.length; i++) { | |
if (result.records[i].Body != '(hidden)') { | |
writefileVF(result.records[i].Name + '.java', 'Class', result.records[i].Body); | |
} | |
} | |
}); | |
} | |
//******************** End******************************************************// | |
//********************Get Object ******************************************************// | |
function GetObjectMetaData(inputfullNames) { | |
conn.metadata.read('CustomObject', inputfullNames, function(err, metadata) { | |
if (err) { | |
console.error(err); | |
} | |
for (var i = 0; i < metadata.length; i++) { | |
var meta = metadata[i]; | |
writefile(meta.fullName, 'Object', JSON.stringify(meta)); | |
console.log("Full Name: " + meta.fullName + 'Get!'); | |
} | |
}); | |
} | |
//******************** End******************************************************// | |
//********************writefile*********************************************// | |
function writefile(InputName, MetaType, InputBody) { | |
var beautify = require('js-beautify').js_beautify, | |
fs = require('fs'); | |
var InsertBody = beautify(InputBody, { | |
indent_size: 2 | |
}); | |
fs.writeFile(datetime + '/' + MetaType + '/' + InputName, InsertBody, function(err) { | |
if (err) { | |
return console.log(err); | |
} | |
}); | |
} | |
function writefileVF(InputName, MetaType, InputBody) { | |
var fs = require('fs'); | |
fs.writeFile(datetime + '/' + MetaType + '/' + InputName, InputBody, function(err) { | |
if (err) { | |
return console.log(err); | |
} | |
}); | |
} | |
//******************** End******************************************************// | |
//******************** Testing******************************************************// | |
function QuerySFDC(inputSQL) { | |
conn.query(inputSQL, function(err, result) { | |
if (err) { | |
return console.error(err); | |
} //console.log("total : " + result.totalSize); | |
if (result.totalSize > 0) { | |
for (var i = 0; i < result.totalSize; i = i + 200) { | |
console.log(result[i]); | |
} | |
} | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
var fs = require('fs');
// get file name
fs.readdir("./src/approvalProcesses", function(err, items) {
//console.log(items);
});