2013-12-20 60 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; 
      } 
     } 
相关问题