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

Windows SharePoint Services 3

Pour personnaliser des formulaires d'élément de liste, vous pouvez étendre un contrôle serveur Windows SharePoint Services 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 Disque_local:\\Program Files\Common Files\Microsoft Shared\Extensions serveur Web\12\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 dans \CONTROLTEMPLATES\DefaultTemplates.ascx. 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 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.

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 Microsoft Visual Studio 2005, 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 Types de projets, sélectionnez Bibliothèque de classes dans la zone Modèles, 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 Windows SharePoint Services 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 Propriétés 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 Windows SharePoint Services.

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

  7. Dans l'Explorateur Windows, faites glisser la DLL de votre dossier projet dans le GAC.

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 pour 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. Dans un éditeur de texte, créez un fichier .ascx contenant les directives nécessaires dans \12\TEMPLATE\CONTROLTEMPLATES. L'exemple précédent nécessite des directives telles que la suivante pour inscrire l'assembly et l'espace de noms du contrôle personnalisé.

    <%@ Control Language="C#"   %>
    <%@Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
    <%@Register TagPrefix="SharePoint" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" namespace="Microsoft.SharePoint.WebControls"%>
    <%@ Register TagPrefix="wssuc" TagName="ToolBar" src="/_controltemplates/ToolBar.ascx" %>
    <%@ Register TagPrefix="wssuc" TagName="ToolBarButton" src="/_controltemplates/ToolBarButton.ascx" %>
    <%@Assembly Name="CustomOverrideControls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b23bfc50a92c9e0d" %>
    <%@Register TagPrefix="CustomOverrideControls" Assembly="CustomOverrideControls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b23bfc50a92c9e0d" namespace="CustomOverrideControls"%>
    
  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, tel que dans l'exemple précédent.

  3. Réinitialisez les services IIS (Internet Information Services) pour 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.

Afficher: