我在空间中设置了规则(在后台执行),它访问某些目录(并检查其存在),然后将一些文件移入其中。
我基本上接收名称为 parentName.documentName.pdf 的文件,其中 parentName 是文档应移动到的父目录名。
因此,在下面的脚本中,我只是检查当前空间中是否已存在“parentName”目录,如果不存在则将其放入,然后将文档移入其中。
以下是代码:
var docName = document.properties.name;
var fields = docName.split('.');
var parentName = fields[0];
var fileName= fields[1];
document.properties.name = fileName;
document.save();
var newParentNode = space.childByNamePath(parentName);
//create parent dir if it doesn't exist
if (newParentNode === null) newParentNode = space.createFolder(parentName);
document.move(newParentNode);
如果我将文件一个接一个地拖动,仅才能正常工作。如果我使用相同的 parentName 同时拖动两个(或更多)文件并且还没有 parentName ,则这两个(或更多)执行将找不到具有该名称的任何目录他们都会尝试创造它。当然,只有第一次执行才能成功创建父目录,但其余部分将失败,因为它已经被创建。
我知道Javascript,Alfresco及其JS API的基础知识,但我对这些并发问题很新。有没有办法确保互斥(在Javascript中)所以我可以安全地访问这些目录?我只需要一种方法来确保第二次(和后续)执行检查父目录是否在第一次完成时存在,因此他们发现父目录已经存在并且不再尝试再创建它。
提前致谢。
编辑:当一堆文件同时进入空间时,会产生上述错误。这意味着首次执行将创建父节点,并在其中移动文档。但是以下文档将保存在实际空间的根目录中。 Howerver,作为一种变通方法,我可以通过重新运行规则来实现它。它会将所有文件移动到正确的父目录。但是我当然希望它能够在第一次尝试时工作,所以我不必手动重新运行规则。