【问题标题】:Alfresco copy with aspects / REST API带有方面 / REST API 的露天复制
【发布时间】:2014-03-04 06:02:08
【问题描述】:

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

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

2) 如何通过 REST 调用复制操作?我什至无法弄清楚我应该为此使用的 URL。我看过一些文档,但还没有整理出来。

谢谢!

【问题讨论】:

  • Alfresco 支持 Aspects over CMIS 就好了!在 CMIS 1.0 中,它们作为策略公开,在 1.1 中它们可以直接使用

标签: java rest alfresco cmis


【解决方案1】:

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

需要注意的是,在 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 支持。

【讨论】:

  • 我应该注意,当您使用 OpenCMIS 扩展时,您需要使用 AlfrescoDocument 和 AlfrescoFolder 而不是 Document 和 Folder。无论如何,如前所述,使用 CMIS 1.0 AtomPub 和 OpenCMIS 扩展的复制将失败,因此我针对 OpenCMIS 扩展项目 code.google.com/a/apache-extras.org/p/… 创建了一个问题
  • 果然,我更改了正确的 URL,一切都开始工作了……怎么样。谢谢!
【解决方案2】:

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

所以基本上你是在检索方面并“重新发送”它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 2013-01-14
    • 2012-11-13
    • 1970-01-01
    相关资源
    最近更新 更多