Alfresco使用方面/ REST API进行复制

时间:2014-03-04 06:02:08

标签: java rest alfresco cmis

我正在编写一个与Alfresco社区4.2接口的自定义应用程序。我有一个集成的自定义数据模型,并且让我感到懊恼的是我无法使用CMIS复制文档,因为自定义方面无法识别(如this issue)。我想,我可以手动复制所有属性并根据需要设置类型,但我想到了使用内置复制操作来完成我的任务,并通过REST API调用此操作。好像这应该正确复制自定义类型,不是吗?

1)这听起来像是一种好方法吗?

2)如何通过REST调用复制操作?我甚至无法弄清楚我应该使用的URL。我已经看过一些文档,但还没能解决它。

谢谢!

2 个答案:

答案 0 :(得分:5)

您正在使用4.2.e,因此,正如Gagravarr所说,使用OpenCMIS Extension for Alfresco在CMIS 1.0中支持方面。在4.2.e中支持的CMIS 1.1中,作为secondaryTypes(方面的同义词)。

需要注意的重要一点是,在4.2中,CMIS URL已更改。如果要使用CMIS 1.0 AtomPub,则URL为:

http://localhost:8080/alfresco/api/-default-/public/cmis/versions/1.0/atom

如果您想使用CMIS 1.1 AtomPub,则URL为:

http://localhost:8080/alfresco/api/-default-/public/cmis/versions/1.1/atom

鉴于这些URL,Alfresco 4.2.e,OpenCMIS 0.10.0和OpenCMIS扩展0.7,以下是运行此代码的结果:

Document sourceDoc = (Document) cmisSession.getObjectByPath("/Someco/Whitepapers/whitepaper2.txt");
Folder targetFolder = (Folder) cmisSession.getObjectByPath("/destinationFolder");
sourceDoc.copy(targetFolder);

其中whitepaper2.txt是具有多个自定义方面和自定义元数据集的文档:

CMIS 1.0 AtomPub,没有OpenCMIS扩展:在没有自定义方面的情况下复制成功。

CMIS 1.0 AtomPub,OpenCMIS扩展:复制失败,出现IllegalArgumentException。

CMIS 1.1,没有OpenCMIS扩展(不需要):复制成功所有自定义方面和 财产价值不变。

所以答案是在针对4.2.x运行时使用CMIS 1.1支持。

答案 1 :(得分:1)

取自Alfresco forum

public static void copyDocument(Folder parentFolder, Document toCopyDocument) {
    Map<String, Object> documentProperties = new HashMap<String, Object>(2);

    documentProperties.put(PropertyIds.NAME, toCopyDocument.getName());

    // Retrieve aspects for this document - NEW
    Iterator<ObjectType> aspects = ((AlfrescoDocument)toCopyDocument).getAspects().iterator();
    String aspectIds = "";
    while (aspects.hasNext()) {
        aspectIds += ',';
        aspectIds += aspects.next().getId();
    }
    documentProperties.put(PropertyIds.OBJECT_TYPE_ID,
                   toCopyDocument.getBaseTypeId().value() + aspectIds);

    toCopyDocument.copy(parentFolder, documentProperties, null, null, null,
                null, null);
  }

所以基本上你正在检索方面并'重新发送'它们。