瘦客户端URI是一个网址,您可以在一个漂亮的Web用户界面上键入该网址以查看有关文件或文件夹的详细信息。
例如,我的Android应用程序使用Alfresco的CMIS API,但对于复杂的操作(例如,在此文件上启动工作流程),您可以单击链接,它将带您进入成熟的Web界面(提供由Alfresco服务器)。
如何为任何Alfresco文件夹/文档计算此瘦客户端URI?
一个好的开始是使用thinClientURI feature of the CMIS protocol。不幸的是,它只适用于存储库的根目录。
一个完美的算法会在Alfresco Share网站上显示Alfresco Share节点,而不是在Share的通用存储库浏览器中显示。
答案 0 :(得分:1)
Alfresco确实有一个鲜为人知的功能来满足您的需求!我相信它是在Enterprise 4.0.3ish中实现的,已准备好用于4.1,到目前为止主要用于Cloud Sync。
您正在寻找的网页标记为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 ...
答案 1 :(得分: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;
}
}