Partager via


Procédure : créer un contrôle personnalisé pour un formulaire

Dernière modification : mercredi 7 juillet 2010

S’applique à : SharePoint Foundation 2010

Dans cet article
ListFieldIterator, contrôle
Exemple
Exemple

Pour personnaliser des formulaires d’élément de liste, vous pouvez étendre un contrôle serveur Microsoft SharePoint Foundation par défaut afin de définir votre propre contrôle personnalisé, puis remplacer un modèle de formulaire par défaut existant par un modèle personnalisé faisant référence à votre contrôle personnalisé. Vous pouvez créer une bibliothèque de classes qui définit une classe personnalisée, copier la DLL de votre projet dans le Global Assembly Cache (GAC), puis ajouter un fichier .ascx contenant une définition de modèle de contrôle personnalisé faisant référence à la DLL sur un sous-dossier dans %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES.

ListFieldIterator, contrôle

Le contrôle Microsoft.SharePoint.WebControls.ListFieldIterator sert à énumérer des champs d’élément pour l’affichage dans un formulaire. Ce contrôle est inséré dans les formulaires d’élément de liste par le biais d’une série de modèles de contrôle imbriqués qui sont définis le fichier DefaultTemplates.ascx qui se trouve dans le répertoire %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATES\CONTROLTEMPLATES. Le modèle DocumentLibraryForm dispose de contrôles de barre d’outils et de liens pour le formulaire, mais il insère également le modèle DocumentLibraryFormCore. Ce modèle, à son tour, insère un contrôle DocumentLibraryFields. Le modèle par défaut pour le contrôle DocumentLibraryFields est FileFormFields, un contrôle défini dans le fichier DefaultTemplates.ascx qui insère le contrôle ListFieldIterator.

Exemple

L’exemple suivant définit un contrôle itérateur de champ de liste personnalisé qui étend la classe ListFieldIterator en remplaçant sa méthode IsFieldExcluded. L’exemple empêche les utilisateurs appartenant à un groupe particulier d’afficher un champ spécifique dans les formulaires de bibliothèques de document, sauf si ce sont des administrateurs de site.

Imports System
Imports System.Collections.Generic
Imports System.Text
Imports Microsoft.SharePoint
Imports Microsoft.SharePoint.WebControls

Namespace CustomOverrideControls

   Public Class CustomListFieldIterator
      Inherits ListFieldIterator
      
      Protected Overrides Function IsFieldExcluded(field As SPField) As Boolean
         Dim site As SPWeb = SPContext.Current.Web
         Dim groupId As Integer = site.Groups("ExcludeGroup").ID
         
         If site.IsCurrentUserMemberOfGroup(groupId) AndAlso field.Title = "MySpecialColumn" AndAlso site.CurrentUser.IsSiteAdmin = False Then
            Return True
         End If
         Return MyBase.IsFieldExcluded(field)
      End Function 'IsFieldExcluded
   End Class 'CustomListFieldIterator
End Namespace 'CustomOverrideControls
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;

namespace CustomOverrideControls
{
   public class CustomListFieldIterator : ListFieldIterator
   {
      protected override bool IsFieldExcluded(SPField field)
      {
         SPWeb site = SPContext.Current.Web;
         int groupId = site.Groups["ExcludeGroup"].ID;

         if (site.IsCurrentUserMemberOfGroup(groupId) && field.Title == "MySpecialColumn" && site.CurrentUser.IsSiteAdmin == false)
         {
            return true;
         }
         return base.IsFieldExcluded(field);
      }
   }
}

Pour créer un contrôle personnalisé pour étendre l'itérateur de champ de liste

  1. Dans Visual Studio, cliquez sur Fichier, pointez sur Nouveau, puis cliquez sur Projet.

  2. Dans la boîte de dialogue Nouveau projet, sélectionnez la langue pour votre projet dans la zone Modèles installés, sélectionnez Bibliothèque de classes comme modèle de projet, tapez un nom et un emplacement pour la génération du projet, puis cliquez sur OK.

  3. Pour ajouter une référence à l’assembly Microsoft.SharePoint, cliquez avec le bouton droit sur le projet dans l’Explorateur de solutions, puis dans l’onglet .NET de la boîte de dialogue Ajouter une référence, sélectionnez Microsoft SharePoint et cliquez sur OK.

  4. Pour donner à votre assembly personnalisé un nom fort lorsque vous générez le projet, cliquez avec le bouton droit sur le projet dans l’Explorateur de solutions, cliquez sur Signature, sélectionnez Signer l’assembly et spécifiez un nom pour le fichier de clé de nom fort.

  5. Double-cliquez sur le projet .cs ou .vb dans l’Explorateur de solutions, puis ajoutez du code comme dans l’exemple précédent pour définir une classe relative à un contrôle personnalisé qui étend un contrôle SharePoint Foundation.

  6. Appuyez sur Ctrl+Maj+B pour générer la solution.

  7. Utilisez gacutil.exe, utilitaire en ligne de commande installé avec le Kit de développement logiciel (SDK) Microsoft .NET Framework 2.0, pour copier la DLL de projet dans le Global Assembly Cache (GAC). Depuis l’invite de commandes, tapez une commande telle que la suivante : gacutil.exe -if "<Full file system path to DLL>".

Pour implémenter un contrôle de formulaire personnalisé, vous devez créer un fichier .ascx contenant un modèle de contrôle qui se substitue à un modèle par défaut et avec lequel vous pourrez insérer le contrôle personnalisé dans la page du formulaire.

Exemple

L'exemple suivant définit trois modèles personnalisés imbriqués pour un formulaire. Le premier modèle se substitue au modèle DocumentLibraryForm pour créer une référence au deuxième modèle, CustomDocumentLibraryFormCore. Ce modèle spécifie à son tour le troisième modèle, CustomFileFormFields, en tant que modèle de définition pour le contrôle DocumentLibraryFields. Enfin, le troisième modèle insère un itérateur de champ de liste personnalisé qui peut être défini dans une bibliothèque de classes, comme dans l'exemple précédent.

<SharePoint:RenderingTemplate ID="DocumentLibraryForm" runat="server">
  <Template>
    <SharePoint:InformationBar runat="server"/>
    <wssuc:ToolBar CssClass="ms-formtoolbar" id="toolBarTbltop" RightButtonSeparator="&nbsp;" runat="server">
      <Template_RightButtons>
        <SharePoint:SaveButton TabIndex=1 runat="server"/>
        <SharePoint:GoBackButton runat="server"/>
      </Template_RightButtons>
    </wssuc:ToolBar>
    <SharePoint:FormToolBar runat="server"/>
    <SharePoint:FormComponent TemplateName="CustomDocumentLibraryFormCore" runat="server"/>
  </Template>
</SharePoint:RenderingTemplate>

<SharePoint:RenderingTemplate ID="CustomDocumentLibraryFormCore" runat="server">
  <Template>
    <TABLE class="ms-formtable" style="margin-top: 8px;" border=0 cellpadding=0 id="formTbl" cellspacing=0 width=100%>
      <SharePoint:ChangeContentType runat="server"/>
      <SharePoint:DocumentLibraryFields TemplateName="CustomFileFormFields" runat="server"/>
      <SharePoint:ApprovalStatus runat="server"/>
    </TABLE>

    <SharePoint:WebPartPageMaintenanceMessage runat="server"/>
    <SharePoint:DocumentTransformersInfo runat="server"/>
    <table cellpadding=0 cellspacing=0 width=100%><tr><td class="ms-formline">
      <IMG SRC="/_layouts/images/blank.gif" width=1 height=1 alt="">   
    </td></tr></table>
    <TABLE cellpadding=0 cellspacing=0 width=100% style="padding-top: 7px">
    <tr><td width=100%>
    <SharePoint:ItemHiddenVersion runat="server"/>
    <SharePoint:InitContentType runat="server"/>
    <wssuc:ToolBar CssClass="ms-formtoolbar" id="toolBarTbl" RightButtonSeparator="&nbsp;" runat="server">
      <Template_Buttons>
        <SharePoint:CreatedModifiedInfo runat="server"/>
      </Template_Buttons>
      <Template_RightButtons>
        <SharePoint:SaveButton runat="server"/>
        <SharePoint:GoBackButton runat="server"/>
      </Template_RightButtons>
    </wssuc:ToolBar>
    </td></tr></TABLE>
  </Template>
</SharePoint:RenderingTemplate>

<SharePoint:RenderingTemplate ID="CustomFileFormFields" runat="server">
  <Template>
    <CustomOverrideControls:CustomListFieldIterator runat="server"/>
  </Template>
</SharePoint:RenderingTemplate>

Pour créer un fichier modèle de contrôle personnalisé pour les bibliothèques de documents

  1. Créez un contrôle utilisateur dans un projet SharePoint comme indiqué dans Comment : créer un contrôle utilisateur pour un composant WebPart ou une page d'application SharePoint. Lorsque vous déployez le projet, Visual Studio crée un sous-dossier de projet dans le répertoire %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATES\CONTROLTEMPLATES qui contient le fichier .ascx.

  2. Ajoutez dans le fichier .ascx une définition de modèle qui se substitue à un modèle de contrôle par défaut particulier, comme illustré dans l’exemple précédent.

  3. Réinitialisez les services IIS (Internet Information Services) afin que les modifications prennent effet.

  4. Pour tester l'exemple précédent, créez un champ par le biais de l'interface utilisateur dont le titre commence par « z », puis accédez à un formulaire pour y rechercher un élément dans la bibliothèque de documents afin d'afficher les modifications.