Partager via


Utilisation d’une source de données personnalisée pour la navigation

Dernière modification : lundi 1 novembre 2010

S’applique à : SharePoint Foundation 2010

Le chrome d’un site Web Microsoft SharePoint Foundation inclut plusieurs contrôles de navigation liés à des contrôles de source de données. Dans chaque cas, la fonction du contrôle de source de données est d’extraire les nœuds du plan de site ou autres données de navigation d’un fournisseur de navigation, puis de transmettre les données au contrôle de navigation pour affichage.

Vous pouvez remplacer certains contrôles de source de données derrière les contrôles de navigation intégrés par vos propres contrôles. Ce type de personnalisation ne nécessite pas que vous modifiez les pages maîtres ou déployiez les pages de contenu personnalisées. Le mécanisme de remplacement est entièrement dicté par les instructions déclarées dans une fonctionnalité SharePoint Foundation. Pour plus d’informations sur la création et le déploiement des fonctionnalités, voir Utilisation des fonctionnalités.

Sources de données personnalisables

Dans les pages maîtres installées avec SharePoint Foundation, les contrôles de source de données derrière trois importants contrôles de navigation sont déclarés comme contrôles de délégué, ce qui autorise la substitution de délégué pour les sources de données. Vous pouvez substituer une source de données personnalisée pour chacun des contrôles de navigation suivants :

  • Barre de liens supérieure

  • Lancement rapide

  • Arborescence

Pour remplacer la source de données par défaut de l’un de ces contrôles, vous devez créer une fonctionnalité et la déployer dans une solution de batterie. Le remplacement peut être l’un des contrôles de source de données fournis par SharePoint Foundation ou par le Microsoft .NET Framework ; il peut aussi s’agir d’un contrôle de source de données personnalisé que vous avez créé. Si vous écrivez votre propre contrôle de source de données, l’assembly compilé doit être installé dans le Global Assembly Cache (GAC) par la fonctionnalité qui déclare la substitution de délégué ou par un autre processus. Le contrôle personnalisé doit aussi avoir une entrée SafeControl dans le fichier web.config. Pour plus d’informations, voir Procédure : personnaliser un contrôle de délégation.

Fonctionnement de la substitution de contrôle

Comme un contrôle d’espace réservé, un contrôle de délégué définit une région d’une page maître qui peut être remplacée par un autre contenu. Dans le cas présent, le contrôle de source de données est le contenu par défaut qui peut être remplacé par un contrôle de substitut à l’exécution.

Par exemple, l’extrait suivant de v4.master déclare un contrôle AspMenu pour la barre de liens supérieure et un DelegateControl comme source de données du menu. Le contenu par défaut du délégué est un contrôle SiteMapDataSource.

<SharePoint:AspMenu
    ID="TopNavigationMenuV4"
    Runat="server"
    EnableViewState="false"
    DataSourceID="topSiteMap"
    AccessKey="1"
    UseSimpleRendering="true"
    UseSeparateCss="false"
    Orientation="Horizontal"
    StaticDisplayLevels="2"
    MaximumDynamicDisplayLevels="1"
    SkipLinkText=""
    CssClass="s4-tn"/>
<SharePoint:DelegateControl 
    runat="server" 
    ControlId="TopNavigationDataSource" 
    Id="topNavigationDelegate">
    <Template_Controls>
        <asp:SiteMapDataSource
            ShowStartingNode="False"
            SiteMapProvider="SPNavigationProvider"
            id="topSiteMap"
            runat="server"
            StartingNodeUrl="sid:1002"/>
    </Template_Controls>
</SharePoint:DelegateControl>

Comme pour le contrôle d’espace réservé, le contenu par défaut d’un contrôle de délégué peut être remplacé par un contenu personnalisé, dans le cas présent par un autre contrôle.La différence avec un contrôle de délégué est que vous ne pouvez pas substituer le contenu par défaut en ajoutant un balisage à une page de contenu, comme vous le faites avec un espace réservé. De fait, vous effectuez la substitution en déployant une solution de batterie qui inclut une fonctionnalité identifiant le contrôle que vous voulez remplacer et celui qui le remplacera.

La procédure d’implémentation d’une fonctionnalité pour une substitution de délégué est décrite en détail dans Procédure : personnaliser un contrôle de délégation. En bref, vous ajoutez un manifeste d’élément à votre fonctionnalité et, dans le manifeste, vous déclarez un élément Control qui identifie le contrôle de délégué, ainsi que l’assembly et la classe du candidat de substitution.

Par exemple, le code XML suivant remplace la source de données de la barre de liens supérieure par un contrôle de source de données personnalisé intitulé Contoso.NavigationDataSource.

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="https://schemas.microsoft.com/sharepoint/">
  <Control Id="TopNavigationDataSource"Sequence="50"
    ControlClass="Contoso.NavigationDataSource"
    ControlAssembly="Contoso, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <Property Name="SiteMapProvider">SPNavigationProvider</Property>
    <Property Name="ID">topSiteMap</Property>
  </Control>
</Elements>

La valeur de l’attribut ControlId du contrôle de délégué est TopNavigationDataSource. Par conséquent, la valeur de l’attribut Id de l’élément Control doit aussi être TopNavigationDataSource. Le contrôle personnalisé est ainsi relié au délégué cible.

Les attributs ControlClass et ControlAssembly de l’élément Control indiquent à SharePoint Foundation où se trouve le contrôle candidat. L’assembly signé qui contient le code du contrôle doit être installé dans le Global Assembly Cache.

Un élément clé de l’exemple de balisage est l’élément Property qui définit l’attribut ID du contrôle candidat avec la valeur topSiteMap. Il s’agit de la même valeur que celle que le contrôle AspMenu utilise pour son attribut DataSourceID. À l’exécution, le contrôle de menu crée une liaison à un contrôle de source de données avec cet ID. Son objectif est de trouver le contrôle personnalisé, et non le contrôle par défaut. Le contrôle personnalisé, bien sûr, doit être dérivé de la classe HierarchicalDataSourceControl parce que c’est ce que le contrôle AspMenu attend dans une source de données.

Il est possible de se trouver dans le cas où plusieurs fonctionnalités ciblent le même contrôle de délégué. Pour résoudre les conflits, chaque fonctionnalité doit spécifier un numéro de séquence pour son candidat de substitution, en établissant la priorité d’un candidat sur un autre. À l’exécution, le contrôle de délégué accepte l’union des éléments de contrôle déclarés au niveau de la batterie de serveurs, de l’application Web, de la collection de sites et du site Web. Le contrôle qui possède le plus petit numéro de séquence est ajouté à l’arborescence. Dans le cas d’une égalité dans les numéros de séquence, l’ordre des contrôles est arbitraire.

Dans l’exemple de balisage du contrôle Contoso.NavigationDataSource, l’attribut Sequence a la valeur 50. Même si le numéro de séquence du contrôle de source de données par défaut n’est pas révélé par son balisage, on peut sans risque présumer qu’il est supérieur à 100. Si le contrôle Contoso est le seul candidat pour la substitution, il remplacera la source de données par défaut.

Voir aussi

Tâches

Procédure : personnaliser un contrôle de délégation

Procédure : personnaliser l'affichage du menu de lancement rapide

Concepts

Contrôles de navigation

Contrôle de délégation (modélisation des contrôles)

Procédure : partager la barre de liens supérieure entre les sites