2013-12-20 151 views
0

瘦客戶機URI是一個Web地址,您可以在一個漂亮的Web用戶界面上鍵入以查看有關文件或文件夾的詳細信息。例如,我的Android應用程序使用Alfresco的CMIS API,但對於複雜的操作(例如,在此文件上啓動工作流程),您可以單擊一個鏈接,它會將您帶到完整的Web界面(由Alfresco服務器提供)。如何獲取Alfresco文件夾/文檔的瘦客戶端URI?

如何爲任何Alfresco文件夾/文檔計算此瘦客戶端URI?

一個好的開始是使用thinClientURI feature of the CMIS protocol。不幸的是,它只能用於存儲庫的根目錄。

一個完美的算法會在他們的Alfresco Share站點中顯示Alfresco Share節點,而不是在Share的通用資源庫瀏覽器中顯示。

+1

你有什麼理由想看到舊的瀏覽器UI?對於網頁瀏覽,Share應該是你想看的所有內容.. – skuro

+0

@skuro:對於任何不在'/ Sites'中的東西,分享的Repository Browser都不錯:-) –

+0

「SiteShareViewUrlGet」webscript(在'//api/sites/shareUrl')不是掩飾你? – Gagravarr

回答

1

alfresco確實有一個鮮爲人知的功能來做你所需要的!我相信它已經在Enterprise 4.0.3ish中實現,可以支持4.1版,到目前爲止它的主要用途是在Cloud Sync中。

您正在尋找的web腳本是org.alfresco.repository.site.site-share-view-url.get,它暴露爲/api/sites/shareUrl?nodeRef=nodeRef。它返回JSON的簡單一點,如:

{ 
    "site": "alfresco-test", 
    "url": "https:\/\/my.alfresco.com\/share\/test.com\/page\/site\/alfresco-test\/document-details?nodeRef=workspace:\/\/SpacesStore\/aae3b33fd-23d4-4091-ae64-44a8e332091341" 
} 

(上面的例子是從Alfresco的雲版本的拍攝,但它應該出現在晚4.0企業版本中,企業4.1,和社區+企業4.2起)

如果你想看到什麼樣的支持內容,最好的辦法是看的java類,它的力量呢,org.alfresco.repo.web.scripts.site.SiteShareViewUrlGet

然而,一個輕微的限制是,它僅支持位於節點在網站內。如果你有一個非網站節點,你將不得不自己計算一個版本庫瀏覽器的URL ...

0

下面是我目前的實施。
它非常非常完美,因爲它只適用於文件夾,並且只適用於Alfresco Share。

 string suffix1 = "alfresco/cmisatom"; 
     string suffix2 = "alfresco/service/cmis"; 
     if (repo.Address.AbsoluteUri.EndsWith(suffix1) || repo.Address.AbsoluteUri.EndsWith(suffix2)) 
     { 
      // Detect suffix length. 
      int suffixLength = 0; 
      if (repo.Address.AbsoluteUri.EndsWith(suffix1)) 
       suffixLength = suffix1.Length; 
      if (repo.Address.AbsoluteUri.EndsWith(suffix2)) 
       suffixLength = suffix2.Length; 

      string root = repo.Address.AbsoluteUri.Substring(0, repo.Address.AbsoluteUri.Length - suffixLength); 
      if (repo.RemotePath.StartsWith("/Sites")) 
      { 
       // Case of Alfresco Share. 

       // Example RemotePath: /Sites/thesite 
       // Result: http://server/share/page/site/thesite/documentlibrary 
       // Example RemotePath: /Sites/thesite/documentLibrary/somefolder/anotherfolder 
       // Result: http://server/share/page/site/thesite/documentlibrary#filter=path|%2Fsomefolder%2Fanotherfolder 
       // Example RemotePath: /Sites/s1/documentLibrary/éß和ệ 
       // Result: http://server/share/page/site/s1/documentlibrary#filter=path|%2F%25E9%25DF%25u548C%25u1EC7 
       // Example RemotePath: /Sites/s1/documentLibrary/a#bc/éß和ệ 
       // Result: http://server/share/page/site/thesite/documentlibrary#filter=path%7C%2Fa%2523bc%2F%25E9%25DF%25u548C%25u1EC7%7C 

       string path = repo.RemotePath.Substring("/Sites/".Length); 
       if (path.Contains("documentLibrary")) 
       { 
        int firstSlashPosition = path.IndexOf('/'); 
        string siteName = path.Substring(0, firstSlashPosition); 
        string pathWithinSite = path.Substring(firstSlashPosition + "/documentLibrary".Length); 
        string escapedPathWithinSite = HttpUtility.UrlEncode(pathWithinSite); 
        string reescapedPathWithinSite = HttpUtility.UrlEncode(escapedPathWithinSite); 
        string sharePath = reescapedPathWithinSite.Replace("%252f", "%2F"); 
        return root + "share/page/site/" + siteName + "/documentlibrary#filter=path|" + sharePath; 
       } 
       else 
       { 
        // Site name only. 
        return root + "share/page/site/" + path + "/documentlibrary"; 
       } 
      } 
      else 
      { 
       // Case of Alfresco Web Client. Difficult to build a direct URL, so return root. 
       return root; 
      } 
     } 
相關問題