Procédure : implémenter des ressources dans des affichages de liste personnalisés
Dernière modification : vendredi 15 octobre 2010
S’applique à : SharePoint Foundation 2010
Cette tâche de programmation montre comment créer un affichage personnalisé pour une liste Microsoft SharePoint Foundation standard. Dans l’exemple suivant, vous créez deux ressources personnalisées : une ressource spécifie du texte pour introduire un lien personnalisé fourni dans la section du pied de page de la page, tandis que l’autre modifie le texte qui apparaît lorsque la liste ne contient pas d’éléments. L’exemple XSLT substitue le modèle FreeForm par défaut pour définir une section de pied de page spécial avec un lien vers un autre emplacement dans la collection de sites. Il substitue également le modèle ViewEmpty pour modifier le texte qui est restitué pour les listes vides.
Cette tâche de programmation montre les étapes suivantes pour créer un affichage personnalisé et y implémenter des ressources :
Créez une définition de liste personnalisée dans Microsoft Visual Studio 2010.
Ajoutez un fichier XSLT au projet, puis modifiez la valeur XslLink dans Schema.xml afin qu’elle référence votre fichier XSLT.
Ajoutez à votre projet un fichier de ressources qui définit des chaînes de ressources.
Ajoutez des liaisons de paramètres au fichier Schema.xml de la liste, puis ajoutez des déclarations à votre fichier XSLT pour consommer les paramètres.
Pour une tâche de programmation qui montre comment personnaliser le rendu des champs dans les affichages de liste, voir Procédure : personnaliser le rendu d’un champ d’un affichage de liste.
Pour créer une définition de liste personnalisée
Dans Visual Studio 2010, dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Projet.
Dans la boîte de dialogue Nouveau projet, sous Modèles installés, développez le nœud Visual Basic ou Visual C#.
Développez le nœud SharePoint, puis sélectionnez 2010.
Sous Type de projet, sélectionnez Définition de liste.
Tapez un nom pour le projet de définition de liste, puis cliquez sur OK.
Dans l’Assistant Personnalisation de SharePoint, spécifiez un site à utiliser pour le débogage. Pour le niveau de confiance de votre solution, sélectionnez Déployer en tant que solution de batterie, puis cliquez sur Suivant.
Dans la boîte de dialogue Choisir les paramètres de définition de liste, spécifiez un nom d’affichage pour votre définition de liste, sélectionnez le type de liste de base à utiliser pour votre définition, puis cliquez sur Terminer. Le nom d’affichage que vous spécifiez est le nom qui apparaît dans la page Créer.
Pour ajouter et référencer un fichier XSLT
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le projet, pointez sur Ajouter, puis cliquez sur Dossier mappé SharePoint.
Dans la boîte de dialogue Ajouter un dossier mappé SharePoint, sélectionnez le dossier {racine_SharePoint}\TEMPLATE\LAYOUTS\XSL, puis cliquez sur OK.
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le nouveau dossier XSL, pointez sur Ajouter, puis cliquez sur Nouvel élément.
Dans la boîte de dialogue Ajouter un nouvel élément, développez le nœud Visual C#, pour C#, ou le nœud Éléments communs, pour Visual Basic.
Sélectionnez Données, puis sélectionnez Fichier XSLT. Spécifiez un nom pour le fichier, puis cliquez sur Ajouter.
Dans l’Explorateur de solutions, double-cliquez sur le fichier Schema.xml pour l’ouvrir dans l’éditeur de code.
Recherchez la définition d’affichage All Items ou All Documents dans le fichier Schema.xml. Vous pouvez identifier cette définition par l’attribut DefaultView de l’élément View, qui est défini sur TRUE.
Par défaut, l’élément XslLink dans l’affichage spécifie main.xsl en guise de fichier XSLT. Remplacez cette valeur par le nom que vous avez attribué au fichier XSLT ajouté à l’étape 5.
Pour ajouter des ressources pour l’affichage personnalisé
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le projet, pointez sur Ajouter, puis cliquez sur Dossier mappé SharePoint.
Dans la boîte de dialogue Ajouter un dossier mappé SharePoint, sélectionnez le dossier {racine_SharePoint}\CONFIG\Resources, puis cliquez sur OK.
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le nouveau dossier Ressources, pointez sur Ajouter, puis cliquez sur Nouvel élément.
Dans la boîte de dialogue Ajouter un nouvel élément, développez le nœud Visual C# ou le nœud Éléments communs, sélectionnez Général, puis sélectionnez Fichier de ressources. Entrez un nom pour le fichier, puis cliquez sur Ajouter.
Dans l’Éditeur de ressources, entrez un nom et une valeur pour la ressource. La valeur est une chaîne qui s’affiche lorsque la liste est vide. Cet exemple spécifie « EmptyListResource » comme nom de ressource pour la valeur « Please add information to this list ASAP! » (Veuillez ajouter des informations à cette liste dès que possible), et « WikiResource » pour « For information about the contents of this list see the » (Pour plus d’informations sur le contenu de cette liste, voir).
Dans le fichier Schema.xml, ajoutez des liaisons de paramètres à la section <ParameterBindings> de l’affichage. Cette opération ajoute les ressources que vous avez spécifiées à l’étape précédente.
Ces balises présentent les formats suivants : <ParameterBinding Name=”EmptyListString” Location=”Resource(Resource1,EmptyListResource)” /> et <ParameterBinding Name=”TeamWiki” Location=”Resource(Resource1,WikiResource)” />. Dans cet exemple, « EmptyListString » et « TeamWiki » sont les noms de paramètres pouvant être implémentés dans le fichier XSLT, « Resource1 » est le nom du fichier de ressources sans l’extension, tandis que « EmptyListResource » et « WikiResource » sont les noms de ressources que vous avez fournis dans le fichier .resx.
Pour implémenter des ressources dans du code XSLT
Pour substituer les modèles FreeForm et EmptyTemplate par défaut définis dans vwstyles.xsl, importez le fichier main.xsl dans votre fichier XSLT.
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" > <xsl:import href="/_layouts/xsl/main.xsl"/>
L’importation de main.xsl importe également les fichiers vwstyles.xsl et fldtypes.xsl dans votre fichier, car, par défaut, ils sont tous les deux importés dans main.xsl.
Étant donné que vous avez précédemment modifié la valeur de l’élément XslLink et ajouté des liaisons de paramètres dans le fichier Schema.xml, les chaînes de ressources que vous avez définies peuvent être utilisées dans le fichier XSLT.
Déclarez les paramètres comme suit.
<xsl:param name="MyEmptyListString" /> <xsl:param name="TeamWiki" />
Copiez le modèle FreeForm dans votre fichier XSLT, puis ajoutez une section qui définit un rendu spécial de la section de pied de page dans l’affichage All Items, comme suit.
<xsl:template name="Freeform"> <xsl:param name="AddNewText"/> <xsl:param name="ID"/> <xsl:variable name="Url"> <xsl:choose> <xsl:when test="List/@TemplateType='119'"> <xsl:value-of select="$HttpVDir"/>/_layouts/CreateWebPage.aspx?List=<xsl:value-of select="$List"/>&RootFolder=<xsl:value-of select="$XmlDefinition/List/@RootFolder"/> </xsl:when> <xsl:when test="$IsDocLib"> <xsl:value-of select="$HttpVDir"/>/_layouts/Upload.aspx?List=<xsl:value-of select="$List"/>&RootFolder=<xsl:value-of select="$XmlDefinition/List/@RootFolder"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$ENCODED_FORM_NEW"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="HeroStyle"> <xsl:choose> <xsl:when test="Toolbar[@Type='Standard']">display:none</xsl:when> <xsl:otherwise></xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:if test="$ListRight_AddListItems = '1' and (not($InlineEdit) or $IsDocLib)"> <table id="Hero-{$WPQ}" width="100%" cellpadding="0" cellspacing="0" border="0" style="{$HeroStyle}"> <tr><td colspan="2" class="ms-partline"> <img src="/_layouts/images/blank.gif" width="1" height="1" alt="" /> </td></tr> <tr><td class="ms-addnew" style="padding-bottom: 3px"> <span style="height:10px;width:10px;position:relative;display:inline-block;overflow:hidden;" class="s4-clust"> <img src="/_layouts/images/fgimg.png" alt="" style="left:-0px !important;top:-128px !important;position:absolute;" /></span> <xsl:text disable-output-escaping="yes" ddwrt:nbsp-preserve="yes">&nbsp;</xsl:text> <xsl:choose> <xsl:when test="List/@TemplateType = '115'"> <a class="ms-addnew" id="{$ID}-{$WPQ}" href="{$Url}" onclick="javascript:NewItem2(event, "{$Url}");javascript:return false;" target="_self"> <xsl:value-of select="$AddNewText" /> </a> </xsl:when> <!—Define a special footer section for the custom list definition, which has 10000 as template type.--> <xsl:when test="$XmlDefinition/List/@TemplateType ='10000'"> <a class="ms-addnew" id="{$ID}-{$WPQ}" href="{$Url}" onclick="javascript:NewItem2(event, "{$Url}");javascript:return false;" target="_self"> <xsl:value-of select="$AddNewText" /> </a> <p> <xsl:value-of select="$TeamWiki"/> <a href="{$RootSiteUrl}/TeamWiki">Team Wiki</a>. </p> </xsl:when> <xsl:otherwise> <a class="ms-addnew" id="{$ID}" href="{$Url}" onclick="javascript:NewItem2(event, "{$Url}");javascript:return false;" target="_self"> <xsl:value-of select="$AddNewText" /></a> </xsl:otherwise> </xsl:choose> </td></tr> <tr><td><img src="/_layouts/images/blank.gif" width="1" height="5" alt="" /></td></tr></table> <xsl:choose> <xsl:when test="Toolbar[@Type='Standard']"> <script type='text/javascript'> if (typeof(heroButtonWebPart<xsl:value-of select="$WPQ"/>) != "undefined") { <xsl:value-of select="concat(' var eleHero = document.getElementById("Hero-', $WPQ, '");')"/> if (eleHero != null) eleHero.style.display = ""; } </script> </xsl:when> <xsl:otherwise></xsl:otherwise> </xsl:choose> <xsl:if test="List/@TemplateType = '115'"> <script type='text/javascript'> if (typeof(DefaultNewButtonWebPart<xsl:value-of select="$WPQ"/>) != "undefined") { <xsl:value-of select="concat(' var eleLink = document.getElementById("', $ID, '-', $WPQ, '");')"/> if (eleLink != null) { DefaultNewButtonWebPart<xsl:value-of select="$WPQ"/>(eleLink); } } </script> </xsl:if> </xsl:if> </xsl:template>
L’exemple applique un rendu spécial à la section de pied de page de l’affichage, en utilisant le paramètre XmlDefinition pour récupérer la valeur du paramètre TemplateType de la définition de liste, en l’occurrence 10000. En outre, l’exemple utilise le paramètre « TeamWiki » pour retourner la chaîne « WikiResource », ainsi que le paramètre « RootSiteUrl » global pour retourner le site Web racine de la collection de sites qui contient le site Web parent de la liste. L’exemple suppose l’existence d’une bibliothèque Wiki sur le site Web racine appelée « TeamWiki ».
Ajoutez le code suivant au fichier XSLT, qui substitue la définition EmptyTemplate permettant de modifier le texte qui apparaît.
<xsl:template name="EmptyTemplate"> <tr> <td class="ms-vb" colspan="99" style="color:red;font-weight:bold"> <xsl:value-of select="$MyEmptyListString"/> </td> </tr> </xsl:template> </xsl:stylesheet>
Dans le menu Générer, cliquez sur Générer la solution, puis sur Déployer la solution pour déployer votre liste personnalisée dans le site SharePoint Foundation.
Notes
Lorsque vous déployez votre projet, Visual Studio 2010 place le fichier de ressources que vous créez dans le dossier mappé que vous avez spécifié (%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\CONFIG\Resources). Lorsque vous créez une application Web, SharePoint Foundation copie le fichier .resx dans le dossier \inetpub\...\App_GlobalResources créé pour cette application, emplacement auquel doit se trouver le fichier pour que les ressources prennent effet. Toutefois, pour que le fichier prenne effet dans les applications Web qui existent déjà lorsque vous déployez votre projet, vous devez copier manuellement le fichier dans le dossier App_GlobalResources de ces applications Web.