带有方面/REST API的露天复制



我正在编写一个与Alfresco社区4.2接口的自定义应用程序。我集成了一个自定义数据模型,并懊恼地发现我不能使用CMIS复制文档,因为自定义方面无法识别(如本期所述)。我想,我可以通过复制所有属性并根据需要设置类型来手动完成这项工作,但我突然想到了使用内置的复制操作来完成任务,并通过RESTneneneba API调用此操作。这似乎应该正确地复制自定义类型,不是吗?

1) 这听起来是个好方法吗?

2) 如何通过REST调用复制操作?我甚至想不出我应该使用的URL。我看过一些文档,但还没能整理出来。

谢谢!

您使用的是4.2.e,因此,正如Gagravarr所说,CMIS 1.0中使用Alfresco的OpenCMIS扩展支持方面。在4.2.e中支持的CMIS 1.1中,作为secondary类型(方面的同义词)。

需要注意的是,在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.时使用CMIS11.1支持

摘自Alfresco论坛

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);
}

因此,基本上你是在检索方面并"重新发送"它们。

相关内容

  • 没有找到相关文章