Hello, everyone,
by mistake I deleted a script from Aris Cloud (Advanced).
Is there a way to recover it?
Is it possible to make a scheduled backup of all the scripts?
Thank you
Marco
Hereby a script I've written to make a backup of all reports, macros and common files to (in my case) a folder on my e-disk. When you run this scheduled (each day for example) than you have always a recent backup of all your scripts. Kind regards, Ariene Kroeze var msPath = "E:/ids-scheer/_Solutions/__BackupScripts/" var mScriptAdminComponent = Context.getComponent("ScriptAdmin") var gnLoc = Context.getSelectedLanguage() var mlTeller = 0 function main(){ for each (var lComponentID in [ 0,1,7] ){ // 0 = common // 1 = Report // 2 = macro (??) var lScriptCategories = mScriptAdminComponent.getCategories(lComponentID, gnLoc) if (lScriptCategories.length==0){ var lScriptInfos = mScriptAdminComponent.getScriptInfos (lComponentID, null, gnLoc) for each (var lScriptInfo in lScriptInfos){ Script_HandleScript(lComponentID, null, lScriptInfo) } }else{ for each (var lScriptCategory in lScriptCategories){ var lScriptInfos = mScriptAdminComponent.getScriptInfos (lComponentID, lScriptCategory.getCategoryID ( ), gnLoc) for each (var lScriptInfo in lScriptInfos){ Script_HandleScript(lComponentID, lScriptCategory, lScriptInfo) } } } } //Dialogs.MsgBox("" + mlTeller + " backup files created/updated") } function Script_HandleScript(plComponent, pScriptCategory, pScriptInfo){ Context.writeStatus("busy with file " + mlTeller) var lsExt = "" switch (plComponent){ case 0: var lsFolderName = msPath + "Common files/" Script_CreateFolder (lsFolderName) break case 1: var lsCategory = pScriptCategory.getName() Script_CreateFolder (msPath + "Reports") Script_CreateFolder (msPath + "Reports/" + lsCategory) var lsFolderName = msPath + "Reports/" + lsCategory + "/" lsExt=".arx" break case 7: var lsCategory = pScriptCategory.getName() Script_CreateFolder (msPath + "Macros" ) Script_CreateFolder (msPath + "Macros/" + lsCategory) var lsFolderName = msPath + "Macros/" + lsCategory + "/" lsExt=".amx" break default: var lsFolderName = msPath + "Others/" Script_CreateFolder(lsFolderName) } var lsFileLocation = lsFolderName + pScriptInfo.getName() var lBytes = [] if (pScriptInfo.isSimpleFile()){ //var lBytes = Context.getFile( try{ var lZipEntry = mScriptAdminComponent.exportFile (plComponent, pScriptInfo.getID(), pScriptInfo.getID()) if (lZipEntry){ lBytes = mScriptAdminComponent.exportFile (plComponent, pScriptInfo.getID(), pScriptInfo.getID()).getData() } }catch(ex){ var lex = ex var aa=0 } }else{ lsFileLocation+=lsExt lBytes = mScriptAdminComponent.exportScript (plComponent, pScriptInfo.getID(), pScriptInfo.getImports()) } if (Files_WriteFileByByteArray (lsFileLocation, lBytes, true))mlTeller++ } function Script_CreateFolder (psFolderName){ var lbSuccess = Files_Exists(psFolderName) if (!lbSuccess){ lbSuccess = Files_CreateFolder (psFolderName) } return lbSuccess } function Files_CreateFolder (psFolderName){ var lbSuccess2Return = false; var lsFolderName = Files_GetCorrectFileName(psFolderName); // Create a directory; all ancestor directories must exist lbSuccess2Return = (new Packages.java.io.File(lsFolderName)).mkdir(); return lbSuccess2Return; } function Files_WriteFileByByteArray(psFileLocation, pByteArray, pbOverWrite){ // write the byte content to a file var lbSuccess2Return =false; var lsFileName = Files_CheckedFilename(Files_ExtractFileName(psFileLocation)); var lsPath2File= Files_ExtractPath(psFileLocation); if (Files_Exists(lsPath2File)){ var lsFileLocation = lsPath2File + "/" + lsFileName; var lFile=new java.io.File(lsFileLocation); if(lFile.exists() && pbOverWrite){ Files_DeleteFile(lsFileLocation) } try{ var lFo=new java.io.FileOutputStream(lFile); lFo.write(pByteArray); lFo.close(); lbSuccess2Return=true; }catch(ex){ var lex=ex; } } return lbSuccess2Return; } function Files_CheckedFilename(psFileName, psReplace, psPrefix){ var lsFileName2Return = "" + psFileName; var lsPrefix = "" + fTrim(psPrefix); if (!lsPrefix.equals(""))lsPrefix=Files_CheckedFilename(lsPrefix, psReplace,""); if (lsPrefix.equals(""))lsPrefix = "Report"; var lsForbidden = "*/:?<>|" + String.fromCharCode(34); for (var i = 0; i<lsForbidden.length;i++){ lsFileName2Return = lsFileName2Return.replace(lsForbidden.substr(i,1),psReplace); } lsFileName2Return=fTrim(lsFileName2Return); if (lsFileName2Return.equals("")){ lsFileName2Return = lsPrefix + " " + fsNow("yyyy/MM/dd HH:mm:ss"); } var lFirstChar=lsFileName2Return.substr(0,1); var lsNumbers="0123456789"; if (lsNumbers.indexOf(lFirstChar)>-1){ // filename begint met een nummer, magniet lsFileName2Return = lsPrefix + " " + lsFileName2Return; } return lsFileName2Return; } function Files_ExtractFileName (psFileName){ var lsFileName2Return = ""; var lsFileName = psFileName + ""; lsFileName = Files_GetCorrectFileName(lsFileName); var lInstr = lsFileName.lastIndexOf("/"); if (lInstr>=0) lsFileName=lsFileName.substr(lInstr + 1) lsFileName2Return = lsFileName; return lsFileName2Return; } function Files_ExtractPath(psFileName){ var lsPath2Return = ""; var lsFileName = psFileName + ""; lsFileName = Files_GetCorrectFileName(lsFileName); var lInstr = lsFileName.lastIndexOf("/"); if (lInstr>=0) lsPath2Return=lsFileName.substr(0,lInstr) return lsPath2Return; } function Files_GetCorrectFileName(psFileName){ var lsFileName2Return = psFileName; lsFileName2Return = (lsFileName2Return + "").replace(/\\/g,"/")+""; return lsFileName2Return; } function Files_Exists(psFileLocation){ var lBool2Return = false; var lsFileLocation = Files_GetCorrectFileName(psFileLocation); var lsFileNameComponents= lsFileLocation.split("/"); if (fcIsGUID(lsFileNameComponents[0])){ // is sprake van in Aris 9 var lScriptAdminComponent = Context.getComponent("ScriptAdmin") if (fIsMissing(lScriptAdminComponent)){ // user - not allowed to see scripts }else{ var lsCatID = lsFileNameComponents[0]; var lScriptInfos= lScriptAdminComponent.getScriptInfos (1, lsCatID, Context.getSelectedLanguage()) for (var i in lScriptInfos){ if (lScriptInfos[i].getName()+"" == lsFileNameComponents[1]){ lBool2Return=true; break; } } } }else{ lBool2Return = new Packages.java.io.File(lsFileLocation).exists(); } return lBool2Return; } function Files_DeleteFile(psFileLocation){ var lbSuccess2Return =false; var lsFileLocation = Files_GetCorrectFileName(psFileLocation); if (Files_Exists(lsFileLocation)){ try{ var lbSuccess2Return = (new Packages.java.io.File(lsFileLocation))["delete"](); }catch(ex){ var lex=ex; var aa=1; } } return lbSuccess2Return; } function fcIsGUID(psString){ var lbOK2Return = false; var i=0; var lsString = new String(psString + ""); lsString=lsString.toUpperCase(); lbOK2Return = true; if (lsString.length!=36){ lbOK2Return = false; }else{ lbOK2Return=true; for (var i=0;i<36;i++){ if (i==8 || i==13 || i==18 || i==23){ if (lsString.substr(i,1)!="-"){ lbOK2Return=false; break; } }else{ var lAsc = lsString.charCodeAt(i); if ((lAsc>=48 && lAsc <=57) || (lAsc>=65 && lAsc<=70)){ // ok! }else{ lbOK2Return=false; break; } } } } return lbOK2Return; } function fTrim(psValue){ // return ("" + psValue).trim() var lsValue2Return= "" + psValue; lsValue2Return=lsValue2Return.replace(/^ */,""); lsValue2Return=lsValue2Return.replace(/ *$/,""); return lsValue2Return; } main()
Hi Ariene, thanks for posting this. We've recently lost a number of scripts when a Group in our Evaluations Group was deleted by accident, so I'm very interested in getting this script to work for us.
I've replaced the file location that you had on the first line with my own file details to allow the script to build the new file structure and save the content on my work's laptop.
I'm not too sure where I should be running the script from though - I've set the context for the script as Database and Groups. When I manually run the script from a Database or Folder I get the dialogue pop ups but its not actually creating anything.
What am I missing?
BR, Darren
Hello Ariene,
your script is a great contribution.
You use a function fsNow("yyyy/MM/dd HH:mm:ss") to append a date to lsFileName2Return. This does not seem to be declared in the script, but elsewhere.
Is the definition of var msPath = "E:/ids-scheer/_Solutions/__BackupScripts/" with forward slashes also necessary on Windows?
Kind regards, Martin
- For the missing fsNow routine add the following code to your script:
function fsNow(psFormat){ var lsNow2Return = "" var ldDate=new java.util.Date(); var lsFormat = fValueIfMissing(psFormat,"yyyy/MM/dd HH:mm:ss"); if (lsFormat=="")lsFormat = "yyyy/MM/dd HH:mm:ss"; var lDateFormat = java.text.SimpleDateFormat(lsFormat); lsNow2Return=lDateFormat.format(ldDate); return lsNow2Return; } function fIsMissing(pOptionalPar){ var lbIsMissing2Return = false; if (pOptionalPar==undefined || pOptionalPar ==null){ lbIsMissing2Return = true; } return lbIsMissing2Return; } function fValueIfMissing(pOptional,pDefault){ return (fIsMissing(pOptional) ? pDefault: pOptional) }
- Windows allows you to use forward slashes in stead of backward ones in file path names. In Javascript you have to add an extra backward slash before each backward slash, because the backward slash is a special character in Javascript.