SharePoint 2007 : Liste Personnalisée, Colonnes de Site et Menu Contextuel

Dans le précédent post, je vous avais montré à quoi ressemblait la liste de Quizz que j'avais crée :

image

Or si vous regardez bien le champ question, il est un peu particulier...c'est loin d'être un champ Titre classique (le contenu est en italique et en gras)

Mais avant d'expliquer en détail comment obtenir ce genre de champ, voyons ce qui a été précédemment réalisé (cf post précédents, ici et ) :

  1. Création d'une feature QuizzFields qui définit 4 champs : Réponse, Choix, Catégorie et Question.
  2. Création d'une feature QuizzContentType qui définit le type de contenu regroupant ces 4 champs

Seulement je ne vous ai pas tout montré lors du dernier post, en effet le fichier elements.xml correspondant à QuizzField définit des champs supplémentaires :

QuizzFields > elements.xml

   1:  <?xml version="1.0"?>
   2:  <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
   3:    ...
   4:    <Field ID="{7BCDA1EC-2484-4703-8288-4990D03551E6}"
   5:      Name="QuizzQuestionNoMenu"
   6:      SourceID="http://schemas.microsoft.com/sharepoint/v3"
   7:      StaticName="QuizzQuestionNoMenu"
   8:      Group="Demo"
   9:      ReadOnly="TRUE"
  10:      Type="Computed"
  11:      DisplayName="$Resources:Quizz,Quizz_Field_Question;"
  12:      Dir=""
  13:      DisplayNameSrcField="QuizzQuestion"
  14:      AuthoringInfo="$Resources:core,Linked_Item;">
  15:      <FieldRefs>
  16:        <FieldRef ID="{3bfd9f63-3c57-4a0d-b22a-3ed324150348}" Name="QuizzQuestion"/>
  17:      </FieldRefs>
  18:      <DisplayPattern>
  19:        <IfNew>
  20:          <HTML><![CDATA[<IMG Style='float:right;' SRC="/_layouts/[%=System.Threading.Thread.CurrentThread.CurrentUICulture.LCID%]/images/new.gif" alt="]]></HTML>
  21:          <HTML>$Resources:core,new_gif_alttext</HTML>
  22:          <HTML><![CDATA[">]]></HTML>
  23:        </IfNew>
  24:        <HTML><![CDATA[<a onfocus="OnLink(this)" href="]]></HTML>
  25:        <URL/>
  26:        <HTML><![CDATA[" ONCLICK="GoToLink(this);return false;" target="_self">]]></HTML>
  27:        <Column Name="QuizzQuestion" Default="$Resources:core,NoTitle"/>
  28:        <HTML><![CDATA[</a>]]></HTML>
  29:      </DisplayPattern>
  30:    </Field>
  31:    <Field ID="{CAC4431D-FBFD-41A0-9F3A-C1FBC2FDB223}"
  32:        Name="QuizzQuestionMenu"
  33:        SourceID="http://schemas.microsoft.com/sharepoint/v3"
  34:        StaticName="QuizzQuestionMenu"
  35:        Group="Demo"
  36:        ReadOnly="TRUE"
  37:        Type="Computed"
  38:        DisplayName="$Resources:Quizz,Quizz_Field_Question;"
  39:        DisplayNameSrcField="QuizzQuestion"
  40:        ClassInfo="Menu"
  41:        AuthoringInfo="$Resources:core,Linked_Item_With_Menu;">
  42:      <FieldRefs>
  43:        <FieldRef ID="{3bfd9f63-3c57-4a0d-b22a-3ed324150348}" Name="QuizzQuestion"/>
  44:        <FieldRef ID="{7BCDA1EC-2484-4703-8288-4990D03551E6}" Name="QuizzQuestionNoMenu"/>
  45:        <FieldRef ID="{3c6303be-e21f-4366-80d7-d6d0a3b22c7a}" Name="_EditMenuTableStart"/>
  46:        <FieldRef ID="{2ea78cef-1bf9-4019-960a-02c41636cb47}" Name="_EditMenuTableEnd"/>
  47:      </FieldRefs>
  48:      <DisplayPattern>
  49:        <FieldSwitch>
  50:          <Expr>
  51:            <GetVar Name="FreeForm"/>
  52:          </Expr>
  53:          <Case Value="TRUE">
  54:            <Field Name="QuizzQuestionNoMenu"/>
  55:          </Case>
  56:          <Default>
  57:            <Field Name="_EditMenuTableStart"/>
  58:            <Field Name="QuizzQuestionNoMenu"/>
  59:            <Field Name="_EditMenuTableEnd"/>
  60:          </Default>
  61:        </FieldSwitch>
  62:      </DisplayPattern>
  63:    </Field>
  64:  </Elements>

Ce qui revient à dire tout simplement à SharePoint de créer 2 champs liés à QuizzQuestion :

  • QuizzQuestionNoMenu affichera la question avec un lien vers la page d'information
  • QuizzQuestionMenu affichera QuizzQuestionNoMenu mais avec un menu contextuel

image

Vous l'aurez compris, dans l'exemple ci dessus, il s'agit simplement d'englober le champ qui nous interesse par EditMenuTableStart et EditMenuTableEnd.

Une fois les champs définis, il ne me reste plus qu'à créer ma définition de liste de la façon suivante :

Créons une définition basé sur une liste personnalisé (copier-coller basique provenant du répertoire C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\FEATURES\CustomList)

  • Préciser que cette liste utilisera le ContentType Quizz
  • Rajouter les champs d'affichage (QuizzQuestionMenu et QuizzQuestionNoMenu) dans la section <Fields>
  • Rajouter les champs désirés (QuizzQuestionMenu, QuizzChoices, QuizzAnswers, QuizzCategory) dans la section <Views><View><ViewFields>

Et le tour est joué ! enfin c'est vite dit, voilà le bout d'XML tronqué (sinon le fichier fait dans les 4000 lignes):

QuizzListDefinition > schema.xml

   1:  <?xml version="1.0" encoding="utf-8"?>
   2:  <List Title="QuizzListDefinition" FolderCreation="FALSE" 
   3:        Direction="$Resources:Direction;" Url="Lists/Quizz List" BaseType="0">
   4:    <MetaData>
   5:      <ContentTypes>
   6:        <ContentTypeRef ID="0x010081DA7661E43E254B8B4F823AA9A3F578"/>
   7:        <ContentTypeRef ID="0x0120" />
   8:      </ContentTypes>
   9:      <Fields>
  10:        <!-- Copier coller des champs QuestionMenu et NoMenu  -->
  11:      </Fields>
  12:      <Views>
  13:        <View BaseViewId="0" Type="HTML"><!-- ... --></View>
  14:        <View BaseViewID="1" Type="HTML" WebPartZoneID="Main" 
  15:              DisplayName="$Resources:core,objectiv_schema_mwsidcamlidC24;" 
  16:              DefaultView="TRUE" SetupPath="pages\viewpage.aspx" 
  17:              ImageUrl="/_layouts/images/generic.png" Url="AllItems.aspx">
  18:          <!-- ... -->
  19:          <ViewFields>
  20:            <FieldRef Name="QuizzQuestionMenu" />
  21:            <FieldRef Name="QuizzChoices" />
  22:            <FieldRef Name="QuizzAnswers" />
  23:            <FieldRef Name="QuizzCategory" />
  24:          </ViewFields>
  25:          <Query><!-- ... --></Query>
  26:        </View>
  27:      </Views>
  28:      <Forms><!-- ... --></Forms>
  29:    </MetaData>
  30:  </List>


QuizzListDefinition > elements.xml

   1:  <?xml version="1.0" encoding="utf-8"?>
   2:  <Elements Id="ac51712b-36a6-4afc-bf95-efee98b8ddb0" xmlns="http://schemas.microsoft.com/sharepoint/">
   3:    <ListTemplate
   4:        Name="QuizzListDefinition"
   5:        DisplayName="$Resources:Quizz,Quizz_List_Definition_DisplayName;"
   6:        Type="10042"
   7:        Description="$Resources:Quizz,Quizz_List_Definition_Description;"
   8:        BaseType="0"
   9:        OnQuickLaunch="TRUE"
  10:        SecurityBits="11" />
  11:  </Elements> 


QuizzListDefinition > feature.xml

   1:  <Feature xmlns="http://schemas.microsoft.com/sharepoint/"
   2:           Id="65E774A0-0B40-4341-B694-429B61A6EE15"
   3:           Title="$Resources:FeatureTitle;"
   4:           Description="$Resources:FeatureDescription;"
   5:           Scope="Site"
   6:           Hidden="True"
   7:           DefaultResourceFile="_Res"
   8:           Version="1.0.0.0">
   9:    <ElementManifests>
  10:      <ElementManifest Location="elements.xml" />
  11:    </ElementManifests>
  12:  </Feature>

Il ne reste plus qu'à activer la feature et tout celles dont elle dépend et vous pourrez créer votre ... ou presque.

En effet, les habitués des definitions de liste savent très bien que la déclaration du fichier schema.xml ne fonctionnera pas. Le fait de réferencer le ContentType (<ContentTypeRef ID="0x010081DA7661E43E254B8B4F823AA9A3F578"/>) n'est pas suffisant pour faire le lien entre le ContentType et la liste, il faudrait mettre en plus les colonnes de site du ContentType dans les champs de la liste... les dupliquer en quelque sorte...

Et bien, non. Il existe une solution ! J'en parlerai dans le prochain post :)

<Philippe/>

Publié mardi 6 janvier 2009 16:38 par phil
Classé sous , , ,
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

About phil

Philippe Sentenac est Consultant SharePoint à Wygwam en région Parisienne. Il intervient essentiellement sur des missions liées à SharePoint (2007 et 2010 ) mais aussi autour du Web 2.0. Plus généralement, il s'intéresse à l'ASP.Net (MVC) , à Silverlight, et à tout ce qui est orienté Web en rapport avec les nouvelles technologies, qu'il pratique depuis 2006. Féru de développement, il est passionné par les problématiques de méthodologies et d'industrialisation du développement.

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01