Cette documentation est archivée et n’est pas conservée.

Création de modèles de formulaires personnalisés

Windows SharePoint Services 3

Les modèles de contrôle ASP.NET qui sont définis dans \12\TEMPLATE\CONTROLTEMPLATES\DefaultTemplates.ascx déterminent la mise en page des formulaires d'éléments de liste Windows SharePoint Services. Ces modèles peuvent imbriquer des contrôles qui à leur tour utilisent davantage de modèles de contrôle pour la définition de la mise en page du formulaire. Les contrôles peuvent contenir des balises HTML et des contrôles Web, mais aucune instruction liée à des données impliquant la syntaxe <%#...%>. Pour remplacer globalement un modèle de contrôle par défaut sur un serveur Web frontal, vous pouvez ajouter un fichier .ascx personnalisé dans le répertoire \CONTROLTEMPLATES avec un ID de modèle de contrôle qui correspond à l'ID du modèle existant dans le fichier DefaultTemplates.ascx.

Création de modèles personnalisés

En plus de remplacer les modèles par défaut, vous pouvez créer vos propres modèles de formulaires personnalisés et y faire référence par type de liste ou type de contenu. Pour enregistrer un modèle de formulaire personnalisé par type de liste, spécifiez le nom du modèle de formulaire via l'attribut Template dans une balise <Form> dans le fichier Schema.xml de la définition de liste. Par exemple :

<Forms>
  <Form Type="DisplayForm" Url="DispForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" /> 
  <Form Type="EditForm" Url="EditForm.aspx" SetupPath="pages\form.aspx" Template="MyCustomForm" WebPartZoneID="Main" /> 
  <Form Type="NewForm" Url="NewForm.aspx" SetupPath="pages\form.aspx" Template="MyCustomForm" WebPartZoneID="Main" /> 
</Forms>

Pour enregistrer un modèle de formulaire personnalisé par type de contenu, ajoutez une définition telle que la suivante en tant qu'enfant de la balise <ContentType> dans votre fichier Elements.xml pour le Composant fonctionnel.

<XmlDocuments>
  <XmlDocument NamespaceURI="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms">
    <FormTemplates  xmlns="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms">
      <Display>MyCustomForm</Display>
      <Edit>MyCustomForm</Edit>
      <New>MyCustomForm</New>
    </FormTemplates>
  </XmlDocument>
</XmlDocuments>

Dans les exemples précédents, « MyCustomForm » correspond à l'ID d'un modèle de contrôle personnalisé que vous ajoutez dans le répertoire \CONTROLTEMPLATES.

Structure des modèles

Les modèles de contrôle ASCX fournissent plusieurs contrôles dans une structure imbriquée, où les contrôles proprement dits sont des modèles qui peuvent être utilisés pour étendre les formulaires de liste.

Le modèle de formulaire de bibliothèque de documents qui est défini dans \12\TEMPLATE\CONTROLTEMPLATES est un bon exemple d'une structure de modèle de contrôle. Le code exemple suivant montre le modèle de contrôle par défaut défini pour le formulaire de bibliothèque de documents.

<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 runat="server"/>
          <SharePoint:GoBackButton runat="server"/>
        </Template_RightButtons>
      </wssuc:ToolBar>
    <SharePoint:FormToolBar runat="server"/>
    <SharePoint:FormComponent TemplateName="DocumentLibraryFormCore" runat="server"/>
  </Template>
</SharePoint:RenderingTemplate>

Dans cet exemple, le modèle de formulaire de bibliothèque de documents contient plusieurs composants pour la mise en page du modèle de formulaire complet. Parmi ces composants, plusieurs dérivent de la classe de base Microsoft.SharePoint.WebControls.FormComponent, qui elle-même dérive de Microsoft.SharePoint.WebControls.TemplateBaseControl. Cela signifie que les composants peuvent eux-mêmes être transformés en modèles.

Toutefois, la majeure partie du formulaire est en fait rendue par le biais d'un modèle distinct qui est défini dans le fichier DefaultTemplates.ascx dont l'ID est DocumentLibraryFormCore. Ce modèle est composé de plusieurs autres composants et comprend notamment une structure HTML basée sur des tableaux qui permet d'organiser la mise en page, comme illustré dans l'exemple suivant :

<SharePoint:RenderingTemplate ID="DocumentLibraryFormCore" 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 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>

Le composant clé dans le modèle DocumentLibraryFormCore de cet exemple est le composant DocumentLibraryFields, qui fait référence au contrôle Microsoft.SharePoint.WebControls.DocumentLibraryFields, lequel dérive de la classe Microsoft.SharePoint.WebControls.ListFieldIterator. L'itérateur du champ de liste contient la logique de mise en page des champs dans un ordre basé sur des colonnes. Toutefois, la classe ListFieldIterator rend uniquement les contrôles s'ils n'ont pas été remplacés dans les modèles. Par conséquent, si vous ajoutez un contrôle de champ pour un champ spécifique (par exemple, un contrôle qui place le contrôle de champ Title dans le coin supérieur droit et le contrôle de champ Author dessous), l'itérateur ne dispose pas ce contrôle. Vous pouvez également, au lieu de cela, choisir de spécifier votre itérateur de champ de liste, qui dérive de la classe ListFieldIterator et fournit la logique personnalisée nécessaire à l'itération des champs.

Vous pouvez remplacer le modèle DocumentLibraryForm et spécifier un autre modèle DocumentLibraryFormCore. Vous pouvez ensuite personnaliser davantage le modèle de formulaire à partir de là et spécifier des contrôles existants ou ajouter des références à d'autres contrôles personnalisés qui sont définis dans un assembly ou un fichier .ascx.

Aa544142.important(fr-fr,office.12).gif Important :

La modification des fichiers .ascx par défaut que Windows SharePoint Services installe sur les serveurs Web frontaux n'est pas prise en charge. Les modifications que vous apportez aux fichiers initialement installés risquent d'être remplacées lorsque vous installez les mises à jour ou les Service Packs de Windows SharePoint Services ou bien, lorsque vous mettez à niveau une installation vers la version ultérieure du produit.

Afficher: