Hi there,
Has anyone ever managed to create a folder structure in Alfresco using the Javascript API and NodeJS?
I think my problem is a lack of understanding of Node, rather than Alfresco, but here's what I'm trying to achieve:
Given a folder path as a string e.g. /Cities/London/Stations/Euston I want to create that folder path at a give root inside Alfresco.
Using Java, one solution would be to split the folder path string at '/' then loop through each folder name creating a folder then using it as the parent for the next folder. This works because each folder is created before the code moves on to create the next folder.
The non-blocking nature of Node means if I simply put a for loop around the API call then it will fail because you cannot guarantee that the parent folders will have been created by the time Alfresco tries to create the subfolder.
alfrescoJsApi.nodes.createFolder(folderName, parentFolder).then(function (data) {
console.log('Folder ' + folderName + ' created');
}, function (error) {
console.log('Error creating folder ' + folderName + ' in ' + parentFolder + error);
});
Any ideas on how this should be done?
Is it best to write my own webscript which creates the whole folder path then call that once from the NodeJS code?
Many thanks
Paul
The Alfresco JS API actually accepts a path as the parent folder argument and will create each element in the path if it does not exist. Here is an example:
var AlfrescoApi = require('alfresco-js-api-node');
function createFolder(folder, parentFolder, callback) {
this.alfrescoJsApi = new AlfrescoApi({hostEcm:'http://alfresco.local:8080'});
this.alfrescoJsApi.login('admin', 'admin').then(function (data) {
console.log('API called successfully Login ticket:' + data);
this.alfrescoJsApi.nodes.createFolder(folder, parentFolder).then(function(data) {
console.log("Created folder");
return callback(data);
})
}, function (error) {
console.error(error);
});
}
createFolder("testjs", 'some/path', function(data) {
console.log("Done creating : " + data.entry.name + " (" + data.entry.id + ")");
})
I didn't have to set up the createFolder function, I could have just done lines 4 through 13 but I somehow find this easier to read.
Running this with node will create a folder named "testjs" under the root under some/path.
To answer your original question, if the path argument wasn't supported, and if you instead had to pass in a node reference or something like that for the parent, you could do the split as you suggest and then recursively call create folder.
Fantastic !
Thanks Jeff, I didn't realise you could use a folder path as the argument. That makes lief a lot easier :-)
Ask for and offer help to other Alfresco Content Services Users and members of the Alfresco team.
Related links:
By using this site, you are agreeing to allow us to collect and use cookies as outlined in Alfresco’s Cookie Statement and Terms of Use (and you have a legitimate interest in Alfresco and our products, authorizing us to contact you in such methods). If you are not ok with these terms, please do not use this website.