如何通过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
    }

如何通过guid获取Sharepoint对象url

您可以使用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);