75 champs max dans un formulaires customisés ? Faites sauter la bride !

Bonjour à tous,

Il peut arriver que vous ayez besoin de customiser des formulaires de plus de 75 champs. Vous aurez sans doute remarqué une erreur qui vous empêche d'afficher le formulaire.

Impossible d’afficher ce composant WebPart. Pour résoudre le problème, ouvrez cette page Web dans un éditeur HTML compatible avec Microsoft SharePoint Foundation tel que Microsoft SharePoint Designer. Si le problème persiste, contactez l’administrateur du serveur Web.

En allant fouiller dans les logs de SharePoint, vous vous rendrez compte que le message d'erreur suivant est généré au chargement du formulaire :

Error while executing web part: System.StackOverflowException: L'opération a provoqué un dépassement de capacité de la pile.

 


Kézako ? Il s'agit en fait d'un problème lié au template XSLT qui constitue vos formulaires.

A sa création, un formulaire ne contient qu'un seul template XSLT, et un template ne peut pas encaisser plus de 75 champs.

Quelles sont les solutions qui s'offrent à vous ?

1. Utiliser InfoPath. Il vous faudra alors un MOSS, ce qui n'est pas à la porté de toutes les bourses. (En plus, c'est lourd et moche InfoPath ^^).

2. Modifier un peu le code XSLT de votre formulaire pour ajouter des templates et mettre vos champs dedans !

La procédure pour le formulaire de création (newForm)


1. Ouvrez votre formulaire, affichez son code et cliquez sur "Mode Avancé" dans la barre supérieur. Votre formulaire va alors se recharger.


2. Recherchez cette ligne : <xsl:call-template name="dvt_1.rowedit"/>

3. Copiez collez là deuxfois et faites ressembler le tout à ça :

<xsl:call-template name="dvt_1.rowedit"/>

<xsl:call-template name="dvt_1.rowedit2"/>

<xsl:call-template name="dvt_1.rowedit3"/>

Vous pouvez mettre autant de templates que vous voulez. Comptez 20 à 40 champs par template, idéalement. Donc si votre formulaire fait 80 champs, trois template, c'est parfait.


4. Trouvez la balise : <xsl:template name="dvt_1.rowedit">

5. Placez vous à la fin de cette balise (après la fermeture </xsl:template>)

6. Insérez alors :

<xsl:template name="dvt_1.rowedit">
< xsl:param name="Pos" select="position()"/>
< tr>
< td>
< table border="0" cellspacing="0" width="100%">
Mettre vos 25 premiers champs ici
< /table>
< /td>
< /tr>
< /xsl:template>

<xsl:template name="dvt_1.rowedit2">
< xsl:param name="Pos" select="position()"/>
< tr>
< td>
< table border="0" cellspacing="0" width="100%">
Mettre les 25 champs suivants ici
< /table>
< /td>
< /tr>
< /xsl:template>

<xsl:template name="dvt_1.rowedit3">
< xsl:param name="Pos" select="position()"/>
< tr>
< td>
< table border="0" cellspacing="0" width="100%">
Mettre les 25 derniers champs ici
< /table>
< /td>
< /tr>
< /xsl:template>

On remarque qu'on appelle autant de template qu'on on en a créé dans l'étape 3 (logique me direz-vous !).

J'ai volontairement mis en gras les appels de chacun de ces templates.

7. Il ne vous reste plus qu'à répartir vos 80 champs, 25 par 25 (en gros ^^), à l'intérieur des balises "<table>".


8. Virez tout ce qui concerne le <xsl:template name="dvt_1.rowedit"> qui était présent à la création du formulaire (pas celui que vous avez ajouté !).

9. Chargez votre formulaire : tout fonctionne maintenant !

Procédure pour les formulaires d'affichage et de modification


Même chose sauf qu'il faut nommer vos balises sensiblement différemment.


Affichage (dispForm) :
< xsl:call-template name="dvt_1.rowview"/> et<xsl:template name="dvt_1.rowview">

Modification (editForm), ce sont en fait les mêmes balises que pour le newForm :

< xsl:call-template name="dvt_1.rowedit"/> and <xsl:template name="dvt_1.rowedit">

Merci au post MSDN de Linda Chapman sans qui rien n'aurait été possible

Vues : 339

Commenter

Vous devez être membre de Sharepoint France pour ajouter des commentaires !

Rejoindre Sharepoint France

Commentaire de Jules Alexandre le 4 juillet 2012 à 14:16

Merci Aurélien et Linda pour cette trouvaille.

Cependant j'aimerais rajouter une petite remarque.

Dans l'étape 2 de ta procédure Recherchez cette ligne

il faut en fait Recherchez cette ligne : <xsl:call-template name="dvt_1.rowedit">

Sans le "/". Voilà merci encore et vive les Templates !!!!

© 2019   Créé par Lenny Vercruysse.   Sponsorisé par

Badges  |  Signaler un problème  |  Conditions d'utilisation

[‎27/‎05/‎2015 16:53] Cédric VILLAIN: