Alfresco将js应用于doc类别

时间:2013-03-21 13:24:14

标签: javascript alfresco

如何使用javascript在Alfresco中将文档应用于文档?

尝试这样:

document.properties["cm:categories"] = "testCat";

更新:

像这样,我能够获得“根类别”而不是“子类别”:

var rootCats =  classification.getRootCategories("cm:generalclassifiable");
document. properties["cm:categories"] = rootCats[3];

这不起作用:

document. properties["cm:categories"] = rootCats[3][1];

3 个答案:

答案 0 :(得分:2)

我发现了,如果有人需要它,这就是它可以做到的方式

获取所有根类[音频,视频,图像,...]

var rootCats =  classification.getRootCategories("cm:generalclassifiable");

从所需的根类别中获取子类别 - >来自“视频”的子类别[恐怖,喜剧,......]

var singleCat = rootCats[1].subCategories; 

将类别应用于文档 - >将“恐怖”应用于文件

doc. properties["cm:categories"] = singleCat[0]; //app

保存

doc.save();

答案 1 :(得分:1)

首先确保文档具有可分类的方面(即具有cm:generalClassifiable方面)。

然后查找要添加的类别,即:

更新:查找某个名称类型类型的节点的示例查询:

例如,搜索您的类别,您也可以添加一个PATH子句,以确保您处于正确的层次结构中。

var nodes = var categories= search.luceneSearch('+TYPE:"http://www.alfresco.org/model/content/1.0}category" +@name:testCat');

然后从返回的数组中获取元素...

获取节点的现有类别:

categories= document.properties["cm:categories"];

将新类别推送到数组:

categories.push(categoryToAdd);

将此内容分配给文档:

document.properties["cm:categories"] = categories;

document.save();

答案 2 :(得分:0)

我们有类似的要求,虽然与OP问题略有不同,但它足够接近我们认为可以包含在内。

我们偶尔需要批量应用类别。即:获得新业务,迁移所有文档,添加类别以匹配现有内容。

在界面中添加大量文档的类别非常繁琐。它需要启用方面(可分类),然后编辑属性以选择所需的类别。对于每个文件单独。更糟糕的是,添加方面不适用于共享中资源管理器视图中的文档,因此需要输入预览。对于大型文档,进入预览本身会延迟几秒钟。

因此,我们构建了一个简单的脚本,将父文件夹的类别应用于其下的所有内容。然后我们只需要设置该文件夹的类别并开始通过它移动内容(即:移动内容以获取类别,然后返回到它所来的位置,但现在都应用了方面和类别)。

实际上我们现在有2个:

  1. 第一个文件夹/规则会覆盖对象所具有的任何类别 将它们替换为父文件夹中的那些 - 我们将此文件夹命名为BulkCategorise
  2. 第二个是累积的,所以它只保留现有的类别 添加父文件夹中的那些,我们将其命名为AccumulateCategories
  3. 我们将创建第三个,以便在时间允许时有选择地删除它们。

    几点说明:

    • 实际上并不需要添加可分类的方面 手动或在代码中,它" Just Works" - 至少在5.1中。
    • 这可能不是最好的方法
    • 累积已应用的类别似乎不会导致任何问题,它们似乎会自动合并/合并

    要使用这些脚本,请创建2个文件夹并对每个文件应用规则以运行关联的脚本。

    第一个脚本完全用父文件夹的类别替换对象的类别,并且非常简单[设置@name和SITE以匹配您的安装]:

    var inheritFromDir = search.luceneSearch('TYPE:"http://www.alfresco.org/model/content/1.0}folder" +@name:BulkCategorise +SITE:YOUR_SITE_NAME');
    // We need to deref the array of noderefs result using inheritFromDir[0]
    document.properties["cm:categories"] = inheritFromDir[0].properties["cm:categories"];
    document.save();
    

    第二个脚本涉及更多 - 我们将日志记录代码留在(注释掉)中作为示例来查看如何执行此操作,因为它还需要一些时间来弄清楚(并且是一个非常有用的功能)。与之前一样,更新第一行的@name和SITE以匹配您的系统。

    var inheritFromDir = search.luceneSearch('TYPE:"http://www.alfresco.org/model/content/1.0}folder" +@name:AccumulateCategories +SITE:YOUR_SITE_NAME');
    // We need to deref the single array result using inheritFromDir[0] to get categories from topmost parent (folder) node
    var parentCatArray = inheritFromDir[0].properties["cm:categories"];
    //and any existing categories of the doc, or null if none exist
    var thisCatArray = document.properties["cm:categories"];
    var thisLen = 0;
    
    if (thisCatArray != null) {
       thisLen = thisCatArray.length;
    } else {
       thisCatArray = new Array();
    }
    
    // Some logging to find out what  is going on...
    //var logFile = space.childByNamePath("log.txt");
    
    // If the log file does not already exist, create it in current folder.
    //if (logFile == null) {
    //    logFile = space.createFile("log.txt");
    //}
    
    //if (logFile != null) {
    //    logFile.content += new Date().toGMTString() + "\tRun started. Length of existing array is: " + thisLen + "\r\n";
    //    logFile.content += new Date().toGMTString() + "\tFound parent node categories:\r\n";
          for (var i=0; i < parentCatArray.length; i++)
          {
             thisCatArray[thisLen]=parentCatArray[i];
             thisLen += 1;
          }
    //}
    
    // Push the new array of categories to the document
    thisCatArray.push(document);
    // apply and save the doc
    document.properties["cm:categories"] = thisCatArray;
    document.save();
    

    Et Voila!我们以类似的方式实现了BulkTag和BulkAccumulateTags。现在添加任意类别就像将它们应用到文件夹并通过拖放移动内容一样简单。