SharePoint 2013 如何获取当前站点对应的“应用目录”中的“适用于SharePoint的应用程序”列表
2014-08-24 22:20
387 查看
一开始我用的是以下方法,根据遍历当前站点下的Web应用程序(Web Application)中所有的网站集(Site Collection),查找模板为“APPCATALOG”的网站集,然后在它的根站点下查找功能标识为“0AC11793-9C2F-4CAC-8F22-33F93FAC18F2”的列表。
这个列表就是“应用目录”下的“适用于SharePoint应用”列表。
o(╯□╰)o 可是在审阅代码时,同事说这个方法效率太低。于是我猜想肯定有某个地方存储“应用目录”及“适用于SharePoint的应用程序”的标识。于是有了如下的方法:
原来在Web应用程序中有个名称为“CorporateCuratedGallerySettings”的功能(Feature),标识(ID)为“F8BEA737-255E-4758-AB82-E34BB46F5828”。它有两个属性:“__AppCatSiteId”,“__AppCatListId”,分别存储的是“应用目录”的标识(网站集ID)和“适用于SharePoint应用”的标识(列表ID)。
O(∩_∩)O~~ 如果你能看懂并且会用到的话,就拿去玩吧。
参阅:
Sharepoint 2013: Existing Features GUID
这个列表就是“应用目录”下的“适用于SharePoint应用”列表。
public static SPList GetCorporateCatalog(SPWeb web) { //SPSite site = GetSiteByWebTemplateId(18, current.Site.WebApplication); SPSite site = GetSiteByWebTemplate("APPCATALOG", web.Site.WebApplication); SPList list = GetListByTemplateFeatureId("0AC11793-9C2F-4CAC-8F22-33F93FAC18F2", site.RootWeb); return list; } public static SPList GetListByTemplateFeatureId(string templateFeatureId, SPWeb web) { foreach (SPList list in web.Lists) { if (string.Equals(list.TemplateFeatureId.ToString(), templateFeatureId, StringComparison.OrdinalIgnoreCase)) { return list; } } return null; } public static SPSite GetSiteByWebTemplateId(int webTemplateId, SPWebApplication webApplication) { foreach (SPSite site in webApplication.Sites) { if (site.RootWeb.WebTemplateId == webTemplateId) { return site; } } return null; } public static SPSite GetSiteByWebTemplate(string webTemplate, SPWebApplication webApplication) { foreach (SPSite site in webApplication.Sites) { if (string.Equals(site.RootWeb.WebTemplate, webTemplate, StringComparison.OrdinalIgnoreCase)) { return site; } } return null; }
o(╯□╰)o 可是在审阅代码时,同事说这个方法效率太低。于是我猜想肯定有某个地方存储“应用目录”及“适用于SharePoint的应用程序”的标识。于是有了如下的方法:
static readonly Guid CorporateCuratedGallerySettingsFeatureID = new Guid("F8BEA737-255E-4758-AB82-E34BB46F5828"); public static SPList GetCorporateCatalog(SPWeb web) { SPFeature settingsFeature = web.Site.WebApplication.Features[CorporateCuratedGallerySettingsFeatureID]; Guid hostSiteId = new Guid(settingsFeature.Properties["__AppCatSiteId"].Value); Guid hostListId = new Guid(settingsFeature.Properties["__AppCatListId"].Value); using (SPSite hostSite = new SPSite(hostSiteId)) using (SPWeb hostWeb = hostSite.RootWeb) { SPList corporateCatalog = hostWeb.Lists[hostListId]; return corporateCatalog; } }
原来在Web应用程序中有个名称为“CorporateCuratedGallerySettings”的功能(Feature),标识(ID)为“F8BEA737-255E-4758-AB82-E34BB46F5828”。它有两个属性:“__AppCatSiteId”,“__AppCatListId”,分别存储的是“应用目录”的标识(网站集ID)和“适用于SharePoint应用”的标识(列表ID)。
O(∩_∩)O~~ 如果你能看懂并且会用到的话,就拿去玩吧。
参阅:
Sharepoint 2013: Existing Features GUID
相关文章推荐
- C# 如何获取当前应用程序的父目录
- sharepoint 2013 如何创建一个webservice获取sharepoint列表数据
- ios开发 如何在应用内获取当前周围wifi列表和强度 并实现在应用内控制wifi开关
- 如何在C#中获取“当前目录”
- 如何获取程序当前目录
- 如何获取ListBox当前列表项(ListBoxItem)中的文本
- SilverLight在SharePoint中获取当前站点URL
- 如何在SharePoint(MOSS或WSS)中获取当前登录的用户名
- WINCE.NET4.2下如何获取程序当前运行目录
- .NET : 如何在Windows Service中获取到当前工作目录
- 获取应用程序的当前目录(VC)
- sharepoint: 如何获取页面上webpart列表
- 如何在C#中获取“当前目录”
- 如何获取Windows应用程序列表
- 如何在C#中获取“当前目录”
- VC得到当前目录与得到应用程序目录的一个应用
- 如何获取应用程序当前路径
- 关于在批处理中如何获取当前目录
- [原创]ASP.NET网站中获取当前虚拟目录的应用程序目录的方法
- .Net 中 获取当前应用程序启动目录的几个方法