Question

Bonjour À Tous, Je suis en cours d'exécution dans une question où je voudrais masquer et afficher des liens sur la barre de lancement rapide sur la base d'un groupe SharePoint.Je sais comment vous pouvez le faire via le navigateur, mais je vais le faire à l'aide de code, soit par le biais d'une fonction ou d'une page maître.J'ai la publication est activée ce qui me permet de configurer à la fois le mondial de lancement rapide et la navigation.Ma première tentative a été de définir le "Public" sur le lien sur la base d'un groupe SharePoint (Voir code ci-dessous)

SPNavigation spSiteNav = spWeb.Navigation;
SPNavigationNodeCollection spSiteQuickLaunch = spSiteNav.QuickLaunch;
SPNavigationNode spBaseHeading = spWeb.Navigation.QuickLaunch.Cast<SPNavigationNode>().Where(a => a.Title == "I need to").FirstOrDefault();
if (spBaseHeading != null){
    string webAppRelativePath = spWeb.ServerRelativeUrl;

    if (!webAppRelativePath.EndsWith("/")){ webAppRelativePath += "/";}
    string MemPageUrl = string.Format("{0}{1}", webAppRelativePath, "SitePages/CreateNewMemo.aspx");
                        SPNavigationNode MemoPageLink = spBaseHeading.Children.Cast<SPNavigationNode>().Where(a => a.Url == MemPageUrl).FirstOrDefault();
     MemoPageLink.Properties["Audience"] = string.Format(";;;;{0}", "Authors");
     MemoPageLink.Update();
}

Pas de chance, le code définit le public sur le lien, mais non les "Auteurs" les membres peuvent toujours voir le lien sur la barre de lancement rapide.

Ensuite, j'ai essayé le réglage de la IsVisible propriété (Voir code ci-dessous):

SPNavigation spSiteNav = spWeb.Navigation;
SPNavigationNodeCollection spSiteQuickLaunch = spSiteNav.QuickLaunch;
SPNavigationNode spBaseHeading = spWeb.Navigation.QuickLaunch.Cast<SPNavigationNode>().Where(a => a.Title == "I need to").FirstOrDefault();
if (spBaseHeading != null){
    string webAppRelativePath = spWeb.ServerRelativeUrl;
    if (!webAppRelativePath.EndsWith("/")){webAppRelativePath += "/";}
    string MemPageUrl = string.Format("{0}{1}", webAppRelativePath, "SitePages/CreateNewMemo.aspx");
    SPNavigationNode MemoPageLink = spBaseHeading.Children.Cast<SPNavigationNode>().Where(a => a.Url == MemPageUrl).FirstOrDefault();
    MemoPageLink.IsVisible = false;
    MemoPageLink.Update();

}

Pas de chance encore une fois.La propriété est définie, mais le lien est toujours visible non "Auteurs" des membres.

Je suis perdu, toute aide serait grandement apprécier.

Je vous remercie à l'avance....

Était-ce utile?

La solution

Comment gérer le ciblage de l'audience pour la Navigation à l'aide SSOM

UpdateNavigationNodeAudience la méthode permet de définir le ciblage de l'audience pour la Navigation d'un nœud:

 public static void UpdateNavigationNodeAudience(SPWeb web, SPNavigationNode node, Guid[] spAudienceIDs, string[] spGroupNames, string[] adGroupNames)
 {
        var audienceProps = new Dictionary<string, string>();
        audienceProps["SharepointAudienceID"] = spAudienceIDs == null ? string.Empty : string.Join(",", spAudienceIDs.Select(a => a.ToString()).ToArray());
        audienceProps["SharepointGroup"] = spGroupNames == null ? string.Empty : string.Join(",", spGroupNames);
        audienceProps["ActiveDirectoryGroupObjectLDAPPath"] = adGroupNames == null ? string.Empty : string.Join("\n", adGroupNames);
        var audienceValue = string.Format("{0};;{1};;{2}", audienceProps["SharepointAudienceID"], audienceProps["ActiveDirectoryGroupObjectLDAPPath"], audienceProps["SharepointGroup"]);
        node.Properties["Audience"] = audienceValue;
        node.Update();
 }

Note:Il a été testé dans SharePoint 2010

Exemple

L'exemple ci-dessous montre comment la cible de Lancement Rapide menu de nœuds Groupe SharePoint nommé Authors:

using (var site = new SPSite(siteUrl))
{
    using (var web = site.OpenWeb())
    {
       var quickLaunch = web.Navigation.QuickLaunch;
       foreach (SPNavigationNode node in quickLaunch)
       {
           var spGroupNames = new[] {"Authors"};
           UpdateNavigationNodeAudience(web, node, null, spGroupNames, null);
       }
    }
 }

Sur le spectateur format de valeur dans la navigation

La valeur a le format suivant:

{SharepointAudienceID};;{ActiveDirectoryGroupObjectLDAPPath};;{SharepointGroup}

  • {SharepointAudienceID} - Audience SharePoint ID.Le délimiteur , est utilisé pour spécifier plusieurs valeurs
  • {ActiveDirectoryGroupObjectLDAPPath} - Nom du Groupe d'ANNONCES.Le délimiteur \n est utilisé pour spécifier plusieurs valeurs
  • {SharepointGroup} - SP Nom de Groupe.Le délimiteur , est utilisé pour spécifier plusieurs valeurs

Comment cacher des Pages/sites web à partir de Navigation

Utilisez les propriétés suivantes pour le contrôle de la page/visibilité sur le web:

L' HidePageFromCurrentNavigation méthode de cache de la page de navigation en cours:

    public static void HidePageFromCurrentNavigation(SPWeb web,string pageUrl)
    {
        var publishingWeb = PublishingWeb.GetPublishingWeb(web);
        var query = new SPQuery
            {
                Query = string.Format(@"<Where><Eq><FieldRef Name='FileRef'></FieldRef><Value Type='Text'>{0}</Value></Eq></Where>",pageUrl)
            };
        var pages = publishingWeb.GetPublishingPages(query);
        if (pages.Count == 1)
        {
            pages[0].IncludeInCurrentNavigation = false;
        }
    }

L' HideWebFromCurrentNavigation méthode de cache web à partir de navigation en cours:

    public static void HideWebFromCurrentNavigation(SPWeb parentWeb, string webUrl)
    {
        var web = parentWeb.Webs.FirstOrDefault(w => w.ServerRelativeUrl == webUrl);
        if (web != null)
        {
            var publishingWeb = PublishingWeb.GetPublishingWeb(web);
            publishingWeb.IncludeInCurrentNavigation = false;   
        }
    }

Exemple

L'exemple montre comment masquer toutes les pages et sites web à partir de navigation en cours:

using (var site = new SPSite(siteUrl))
{
    using (var web = site.OpenWeb())
    {
       var quickLaunch = web.Navigation.QuickLaunch;
       foreach (SPNavigationNode node in quickLaunch)
       {
            var nodeType = (string)node.Properties["NodeType"];
            if (nodeType == "Page")  //Page node?
            {
                  HidePageFromCurrentNavigation(web, node.Url);    
            }
            else if (nodeType == "Area")  //Web node?
            {
                  HideWebFromCurrentNavigation(web, node.Url);    
            }
       }
    }
 }

Autres conseils

Pour SharePoint 2013, vous devez activer la fonction de collecte de sites "Infrastructure de publication SharePoint Server" pour la cible d'audience au travail.

http://community.office365.com/fr-US / F / 148 / T / 230976.ASPX

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top