如果我知道文档的URL,我是否可以找到文档所在的sharepoint文档库的URL。以下是SharePoint站点的两个示例URL。第一个文档存在于文档库的根目录下。第二个文档位于文档库中的文件夹“folder1”下。感谢是否知道文档库的URL(http:///sites/site1/DocLib/Forms/AllItems.aspx)。
HTTP:///sites/site1/DocLib/a.doc HTTP:///sites/site1/DocLib/folder1/a.doc
感谢您的回复。我正在寻找一个MOSS OOTB Web服务或基于URL模式的解决方案。我们可以使用其中任何一种来实现这一目标吗?
感谢。
答案 0 :(得分:1)
SPWeb对象有一个GetFile方法,它接受完整的文件URL。
SPFile file = web.GetFile(yoururl);
现在可以通过以下方式轻松访问SPList的网址:
string listUrl = file.Item.ParentList.DefaultViewUrl;
所以,在一起的方法中:
public string GetListUrlFromFileUrl(string fullFileUrl)
{
using (SPSite site = new SPSite(fullFileUrl))
{
using(SPWeb myWeb = site.OpenWeb())
{
SPFile file = web.GetFile(fullFileUrl);
return file.Item.ParentList.DefaultViewUrl;
}
}
}
答案 1 :(得分:0)
根据具体情况,我有两种不同的方式。虽然第二种解决方案通常对我们的用例表现相当不错,但它们的表现都不是很好(重要的是要注意)。
第一个非常简单:
private SPList GetListForFile(string fileUrl)
{
using (SPSite site = new SPSite(fileUrl))
{
using (SPWeb web = site.OpenWeb())
{
SPFile file = web.GetFile(fileUrl);
if (file.Exists)
{
return file.Item.ParentList;
}
}
}
return null;
}
第二个更复杂一点。它确实需要您先删除URL的文件部分,然后将其传递给方法以获取正确的SPWeb,然后在Web中找到正确的列表。
private SPList GetListForFile(string fileUrl)
{
using(SPWeb web = OpenWeb(GetFolderUrl(fileUrl)))
{
string listName = fileUrl.Replace(web.ServerRelativeUrl, "");
listName = listName.Substring(0, listName.IndexOf('/'));
return web.Lists[listName];
}
}
private string GetFolderUrl(string fileUrl)
{
return Regex.Replace(fileUrl, @"/[^/]+?\.[A-Z0-9_]{1,6}$", "",
RegexOptions.IgnoreCase | RegexOptions.Singleline);
}
private SPWeb OpenWeb(string folderUrl)
{
SPWeb web = null;
while(web == null)
{
web = Site.OpenWeb(folderUrl);
if (!web.Exists)
{
web.Dispose();
web = null;
}
folderUrl = folderUrl.Substring(0, folderUrl.LastIndexOf("/"));
if (folderUrl.Length == 0)
{
folderUrl = "/";
}
}
return web;
}