2014-03-04 56 views
1

我正在寫一個自定義應用程序,與Alfresco社區4.2接口。我有一個集成的自定義數據模型,並學會了我的懊惱,我無法使用CMIS複製文檔,因爲自定義方面無法識別(如this issue)。我可以通過手工複製所有的屬性並設置適當的類型,但我想到了使用內置複製操作來完成我的任務,並通過REST API調用此操作的想法。似乎這應該正確地複製自定義類型,不是?與方面/ REST API的Alfresco副本

1)這聽起來像一個好方法嗎?

2)我怎麼叫通過REST複製操作?我甚至無法弄清楚我應該使用的URL。我已經看過一些文檔,但還沒有把它整理出來。

謝謝!

+2

Alfresco支持CMIS方面就好了!在CMIS 1.0中,它們公開爲政策,在1.1中它們可以直接使用 – Gagravarr

回答

5

您使用4.2.e,因此,作爲Gagravarr說,各方面都在CMIS 1.0使用OpenCMIS擴展露天的支持。在4.2.e中支持的CMIS 1.1中,作爲secondaryTypes(方面的同義詞)。

要着重注意的是,在4.2 CMIS網址已經改變。如果你想使用CMIS 1.0 AtomPub的網址是:

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

如果你想使用CMIS 1.1 AtomPub的網址是:

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

考慮到這些網址,露天4.2.e,OpenCMIS 0.10 2.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擴展(不需要):複製成功,所有自定義方面和 屬性值保持不變。

所以答案是使用CMIS 1.1支持對4.2.x.運行時

+0

我應該注意到,當您使用OpenCMIS擴展時,您需要使用AlfrescoDocument和AlfrescoFolder而不是文檔和文件夾。無論如何,使用CMIS 1.0 AtomPub和OpenCMIS擴展的副本將會失敗,所以我對OpenCMIS擴展項目http://code.google.com/a/apache-extras.org/p/alfresco- opencmis-extension/issues/detail?id = 10 –

+0

果然,我更改爲正確的URL並開始工作......那怎麼樣。謝謝! – BrianV

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

了那麼基本上你檢索方面和「重新發送」他們。