zoukankan      html  css  js  c++  java
  • SharePoint 2013 如何获取当前站点对应的“应用目录”中的“适用于SharePoint的应用程序”列表

    一开始我用的是以下方法,根据遍历当前站点下的Web应用程序(Web Application)中所有的网站集(Site Collection),查找模板为“APPCATALOG”的网站集,然后在它的根站点下查找功能标识为“0AC11793-9C2F-4CAC-8F22-33F93FAC18F2”的列表。

    这个列表就是“应用目录”下的“适用于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

  • 相关阅读:
    Vuex ~ 初识
    Vue 2.0 生命周期-钩子函数理解
    vue利用watch侦听对象具体的属性 ~ 巧用计算属性computed做中间层
    Elements in iteration expect to have 'v-bind:key' directives.' 提示错误如何解决?
    微信小程序-如何自定义导航栏(navigationStyle)?
    微信小程序~触摸相关事件(拖拽操作、手势识别、多点触控)
    [Java] Collections
    [Java] Map / HashMap
    [Data Structure] 红黑树( Red-Black Tree )
    [Data Structure] 二叉搜索树(Binary Search Tree)
  • 原文地址:https://www.cnblogs.com/windbell/p/HowTo_Get_CorporateCatalog.html
Copyright © 2011-2022 走看看