问题
Alfresco Share doesn't keep track of content modified outside it's interface which makes the recently modified RSS/Dashlet useless. I'm working on creating an RSS that I can use within sites to pull a list of recently modified items.
Right now I'm just working on getting the list of files and I'm stumbling a little bit as I'm not very familiar with Webscripts. I've got this piece of code that will retrieve the contents of a site then build an array of the files, the problem I'm running into is I could have many subfolders and I'm not sure how to properly traverse them.
var folder = companyhome.childByNamePath("/Sites/foo/documentLibrary");
var docs = new Array();
print(folder);
print("iterating...");
var children = folder.children;
for (i=0; i<children.length; i++)
{
var c = children[i];
if (c.isContainer)
{
print(c.name + " is a folder, traversing...");
var subfolder = companyhome.childByNamePath("/Sites/foo/documentLibrary/" + c.name.toString());
var subchildren = subfolder.children;
for (j=0; j<subchildren.length; j++)
{
var d = subchildren[j];
if (d.isDocument) docs.push(d);
}
}
if (c.isDocument) docs.push(c);
}
print(docs);
In the end I'll sort by modified time then chop it for presentation, I'm operating under the assumption that getting the content is the hard part :)
回答1:
I would write a recursive function to traverse the folder hiarchy, something like this:
var documentLibrary = companyhome.childByNamePath("sites/foo/documentLibrary");
var children = documentLibrary.children;
traverse(children);
function traverse(nodes){
for each(var node in nodes) {
if (node.isContainer){
logger.log(node.name + " is a folder, traversing down");
traverse(node.children);
}else {
logger.log(node.name + "is a document, modified: " + node.properties["cm:modified"]);
}
}
}
回答2:
It's quite simple actually. If you look in the code of the docsummary dashlet/js file (Recently Modified Dashlet), you'll see that it's firing:
slingshot/doclib/doclist/documents/site/" + Alfresco.constants.SITE + "/documentLibrary?max=50
So you only need is a list of sites available and good for you that there is a service for it listSites(nameFilter, sitePresetFilter) .
You can just use listSites(null, null), which will return all sites. So just loop through the sites and fire the webscript.
来源:https://stackoverflow.com/questions/16929858/find-all-files-in-a-site-with-alfresco-4-1-webscripts