OVH Cloud OVH Cloud

[WSS] CAML / Affichage dans les views

2 réponses
Avatar
Daniel/Jériko
Bonjour, une question sur une manip apparemment non documentée.

Nous souhaitons créer une vue spécifique pour une bibliothèque de documents
personnalisée : la vue doit lister les éléments contenus dans la
bibliothèque, avec pour chacun un menu contextuel (que nous avons
personnalisé). Mais il faut éviter que chaque élément soit cliquable
directement, sans passer par les options du menu. Donc, il faut que chaque
élément ait un menu, mais pas de lien. Or, cela n'existe pas parmi les champs
proposés par défaut.

Dans le CAML décrivant la vue dans le SCHEMA.XML, la question revient donc à
faire une liste dans laquelle apparaissent les menus contextuels sur les
items, mais sans lien sur les items : donc, utiliser une alternative au
<fieldref Name="LinkFilename"/> dans la section <ViewFields>... mais
laquelle ? Ou bien, trouver un moyen au niveau du <ViewBody> pour modifier
l'affichage de l'item, et faire en sorte que le lien n'apparaisse pas, mais
que le menu apparaisse bien.

Quelqu'un aurait-il déjà été confronté au problème, ou aurait-il une idée ?

D'avance merci !

2 réponses

Avatar
Eric Donneger
Je serais tenté de dire qu'une solution est effectivement de travailler sur
le <ViewBody> en positionnant un <FieldSwitch> autour du noeud <Field/> qui
se charge de la génération du HTML. Le but étant que ce <FieldSwitch>
réagisse sur le champ où vous voulez votre menu : dans ce cas là, à vous de
générer le HTML souhaité et dans le cas par défaut, vous laissez traiter par
le <Field/> standard.

--
Eric Donneger
http://blogs.developpeur.org/FatEric
http://www.clubsps.org


"Daniel/Jériko" a écrit :

Bonjour, une question sur une manip apparemment non documentée.

Nous souhaitons créer une vue spécifique pour une bibliothèque de documents
personnalisée : la vue doit lister les éléments contenus dans la
bibliothèque, avec pour chacun un menu contextuel (que nous avons
personnalisé). Mais il faut éviter que chaque élément soit cliquable
directement, sans passer par les options du menu. Donc, il faut que chaque
élément ait un menu, mais pas de lien. Or, cela n'existe pas parmi les champs
proposés par défaut.

Dans le CAML décrivant la vue dans le SCHEMA.XML, la question revient donc à
faire une liste dans laquelle apparaissent les menus contextuels sur les
items, mais sans lien sur les items : donc, utiliser une alternative au
<fieldref Name="LinkFilename"/> dans la section <ViewFields>... mais
laquelle ? Ou bien, trouver un moyen au niveau du <ViewBody> pour modifier
l'affichage de l'item, et faire en sorte que le lien n'apparaisse pas, mais
que le menu apparaisse bien.

Quelqu'un aurait-il déjà été confronté au problème, ou aurait-il une idée ?

D'avance merci !


Avatar
Daniel/Jériko
Oui, en effet, c'est la solution de la modification du <ViewBody> que j'ai
creusée. Merci pour vos conseils en tout cas.

Je suis parvenu à une solution, décrite ci-après.

Tout le problème était donc de trouver le code à générer pour remplacer dans
le CAML l'affichage du <Field> standard LinkFileName : il fallait un code
équivalent, qui génère la création du contextMenu, mais pas le lien
cliquable. J'ai donc recherché le <displayPattern> du champ de type
LinkFileName, je l'ai trouvé dans le WSS SDK, dans le document GetProjSchema
RPC Example. On y décrit les DisplayPattern de tous les types de champs
utilisés dans les views des différentes listes de base.

Dans le SCHEMA.XML de ma liste personnalisée, dans la section <ViewBody> de
la description de ma vue personnalisée, section <Fields>, j'ai utilisé le
code suivant :

<FieldSwitch><Expr><Property Select="Name"/></Expr>
<Case Value="LinkFilename">
<HTML><![CDATA[ <table height="100%" cellspacing=0
class="ms-unselectedtitle" onmouseover="OnItem(this)" CTXName="ctx]]></HTML>
<Counter Type="View" />
<HTML>" ItemId="</HTML>
<Column Name="ID" HTMLEncode="TRUE" />
<HTML>" ServerUrl="</HTML>
<Field Name="ServerUrl" URLEncodeAsURL="TRUE" />
<HTML>" FileDirRef="</HTML>
<Field Name="FileDirRef" HTMLEncode="TRUE" />
<HTML>" HTMLType="</HTML>
<Column Name="HTML_x0020_File_x0020_Type" />
<HTML>" FileType="</HTML>
<Column Name="File_x0020_Type" />
<HTML>" DocIcon="</HTML>
<MapToAll>
<Column Name="HTML_x0020_File_x0020_Type" />
<HTML>|</HTML>
<Column Name="File_x0020_Type" />
</MapToAll>
<HTML>" FSObjType="</HTML>
<LookupColumn Name="FSObjType" />
<HTML>" COUId="</HTML>
<Field Name="CheckedOutUserId" />
<HTML>" SourceUrl="</HTML>
<Column Name="_SourceUrl" URLEncode="TRUE" />
<HTML><![CDATA[ "><tr><td width="100%" Class="ms-vb">]]></HTML>
<LookupColumn Name="FileLeafRef" HTMLEncode="TRUE" />
<HTML><![CDATA[</td><td><img src="/_layouts/images/blank.gif" width
style="visibility: hidden" alt=""></td></tr></table>]]></HTML>
</Case>

---------------------------------------------------------------------------------------------

"Eric Donneger" a écrit :

Je serais tenté de dire qu'une solution est effectivement de travailler sur
le <ViewBody> en positionnant un <FieldSwitch> autour du noeud <Field/> qui
se charge de la génération du HTML. Le but étant que ce <FieldSwitch>
réagisse sur le champ où vous voulez votre menu : dans ce cas là, à vous de
générer le HTML souhaité et dans le cas par défaut, vous laissez traiter par
le <Field/> standard.

--
Eric Donneger
http://blogs.developpeur.org/FatEric
http://www.clubsps.org


"Daniel/Jériko" a écrit :

> Bonjour, une question sur une manip apparemment non documentée.
>
> Nous souhaitons créer une vue spécifique pour une bibliothèque de documents
> personnalisée : la vue doit lister les éléments contenus dans la
> bibliothèque, avec pour chacun un menu contextuel (que nous avons
> personnalisé). Mais il faut éviter que chaque élément soit cliquable
> directement, sans passer par les options du menu. Donc, il faut que chaque
> élément ait un menu, mais pas de lien. Or, cela n'existe pas parmi les champs
> proposés par défaut.
>
> Dans le CAML décrivant la vue dans le SCHEMA.XML, la question revient donc à
> faire une liste dans laquelle apparaissent les menus contextuels sur les
> items, mais sans lien sur les items : donc, utiliser une alternative au
> <fieldref Name="LinkFilename"/> dans la section <ViewFields>... mais
> laquelle ? Ou bien, trouver un moyen au niveau du <ViewBody> pour modifier
> l'affichage de l'item, et faire en sorte que le lien n'apparaisse pas, mais
> que le menu apparaisse bien.
>
> Quelqu'un aurait-il déjà été confronté au problème, ou aurait-il une idée ?
>
> D'avance merci !