如何通过guid获取Sharepoint对象url
本文关键字:对象 url Sharepoint 获取 何通过 guid | 更新日期: 2023-09-27 18:11:26
我正在使用SPAudit,并且我有一个未知类型的对象。这是对象为Site
时的答案。但是object可以是这个enum中的任何类型。
我正在寻找一个方法,它获得一个GUID并返回指定对象的url。比如:
static string GetUrlByGuid(Guid guid)
{
var item = SPFarm.Local.GetObject(guid);
if (item == null)
return null;
return item.ToString(); //return item.Url or something like it
}
您可以使用SPAuditEntry。DocLocation属性获取被审计对象在被审计事件发生时的位置。
例子var query = new SPAuditQuery(site);
query.SetRangeStart(DateTime.Now.AddHours(-36));
var entries = site.Audit.GetEntries(query);
foreach (SPAuditEntry entry in entries)
{
Console.WriteLine(entry.DocLocation);
}
好吧,我的解决方案是不是真的很好,bcs列表和列表,它需要位置字符串(从SPAudit DocLocation属性)。但至少,它是有效的。
private static string GetUrlByGuid(Guid guid, SPAuditItemType type, string location)
{
switch (type)
{
case SPAuditItemType.Site:
return SPContext.Current.Site.Url;
case SPAuditItemType.Web:
try
{
using (var site = new SPSite(SPContext.Current.Site.ID))
using (var web = site.OpenWeb(guid))
{
return web.Url;
}
}
catch (FileNotFoundException)
{
return string.Empty;
}
case SPAuditItemType.List:
{
if (string.IsNullOrEmpty(location))
throw new ArgumentNullException("location");
using (var site = new SPSite(SPContext.Current.Site.Url + "/" + location))
{
using (var web = site.OpenWeb())
{
try
{
return web.Lists[guid].DefaultViewUrl;
}
catch (SPException)
{
return string.Empty;
}
}
}
}
case SPAuditItemType.ListItem:
var match = ListItemRegex.Match(location);
string listUrl = match.Groups[1].Value.Trim('/');
using (var site = new SPSite(SPContext.Current.Site.Url + "/" + location))
using (var web = site.OpenWeb())
{
foreach (SPList list in web.Lists)
{
if (list.RootFolder.ServerRelativeUrl.Trim('/') == listUrl)
{
return string.Format("{0}?ID={1}",
SPUtility.ConcatUrls(web.Url, list.Forms[PAGETYPE.PAGE_DISPLAYFORM].Url),
match.Groups[2].Value);
}
}
}
return string.Empty;
case SPAuditItemType.Document:
return SPContext.Current.Site.Url + "/" + location;
default:
return string.Empty;
}
}
private static readonly Regex ListItemRegex = new Regex(@"(.+?)('d+)_.000", RegexOptions.Compiled);