How to get the thin client URI of an Alfresco folder/document?
瘦客户端 URI 是一个 Web 地址,您可以在漂亮的 Web 用户界面上键入该地址以查看有关文件或文件夹的详细信息。
例如,我的 Android 应用程序使用 Alfresco 的 CMIS API,但对于复杂的操作(例如,在此文件上启动工作流),您可以单击一个链接,它会带您进入成熟的网络接口(由 Alfresco 服务器提供)。
如何为任何 Alfresco 文件夹/文档计算此瘦客户端 URI?
使用 CMIS 协议的 ThinClientURI 特性是一个好的开始。不幸的是,它仅适用于存储库的根目录。
一个完美的算法会在他们的 Alfresco Share 站点中显示 Alfresco Share 节点,而不是在 Share\\ 的通用存储库浏览器中。
Alfresco 确实有一个鲜为人知的功能,可以满足您的需求!我相信它是在 Enterprise 4.0.3ish 中实现的,为 4.1 做好了准备,到目前为止,它的主要用途是在 Cloud Sync 中。
您正在寻找的网页脚本是
1 2 3 4 | { "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 类,
但是,一个轻微的限制是它只支持位于站点内的节点。如果你有一个非站点节点,你必须自己计算一个存储库浏览器 URL...
以下是我当前的实现。
它(非常)远非完美,因为它仅适用于文件夹,并且仅适用于 Alfresco Share。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | 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; } } |