SharePoint Foundation 2010

SP2010-Remplacer les formulaires – Part 1 – Template de Liste

Posted on Updated on

Bonjour à tous.

Cela fait maintenant quelques semaines que je n’ai pas bloggé, je profite d’une petite “accalmie” pour publier un article qui vous montrera comment déployer des formulaires NewForm.aspx; EditForm.aspx et DispForm.aspx dans SharePoint 2010 (fonctionnera également avec SharePoint 2007 & 2013).

Bien souvent, quand je me déplace chez des clients ou que je reprend des développements qui ont été réalisés, je m’aperçois que ces formulaires ont été ré-implémentés et redéployés par le biais d’une solution SharePoint, ce qui est plutôt bien. Ce qui me choque en général, c’est que ces formulaires ne viennent pas remplacer “physiquement” les existants mais s’ajoutent aux formulaires existants, avec des nouveaux noms : newform2.aspx, editform2.aspx ou encore dispform2.aspx.

Si des utilisateurs (malins) connaissent les url vers les formulaires natifs, ils pourront toujours les utiliser !!! Et ça, c’est vraiment pas bien !

Je vais donc tenter de vous expliquer comment remplacer ces formulaires (les écraser en fait) par le biais d’une solutions SharePoint… et sans utiliser du C# => Chalenge Sourire

Nous essaierons d’utiliser au maximum les API natives de SharePoint et les fichiers XML de déploiements supportés.

Dans un second temps, j’aimerai également vous montrer comment remplacer/overrider le comportement natifs des contrôles dans ces formulaires… mais ça sera pour un prochain article !

Première chose, se connecter sur une collection de sites, un site et créer une liste. Dans mon cas ce sera une liste custom… et même une seconde liste que je créée par avance pour la suite de l’article. Je vais également créer une colonne de type lookup (recherche d’éléments déjà présents sur le site) qui “reliera” mes deux listes… Et encore une troisième qui utilisera elle aussi une colonne de type lookup :

On aura donc trois listes avec leurs attributs :

image

  • Pays contiendra le nom du pays, sa surface et son nombre d’habitants
  • Ville contiendra le nom de la ville, le pays d’appartenance, sa surface et son nombre d’habitants
  • Commande contiendra le titre de la commande, le montant, le pays et la ville. Dans un premier temps on utilisera deux lookup, pointant sur chacune de listes pays & ville. On remplacera plus tard ce comportement par des listes déroulantes liées et pré-filtrées. On sélectionnera le pays et cela filtrera la liste des villes proposées. Mais tout cela dans un second temps.

1/ Commençons par créer une solution avec Visual Studio 2010

NB : il faudra travailler un maximum en utilisant les noms internes des objets (List, Site, Web, Field) afin d’éviter les problème de renommage de ces objets (display name). On utilisera donc au maximum les staticName, internalName ou encore Name lorsqu’il seront disponibles sur ces éléments.

Commençons donc par la création de notre solution SharePoint dans Visual Studio 2010 que j’appelle DEMO1, de type “Empty SharePoint Project” :

image

On renseigne l’url du site de déploiement (debug) et on choisit une solution de type “Farm” :

image

La solution est créée, elle est vide ou presque :

image

Nous allons ensuite faire un clic droit sur le projet et ajouter un nouvel élément (Add New Item), de type SharePoint > 2010 > List Definition et on la nomme “Pays”. Cliquer sur “Add” :

image

Un assistant se lance pour nous aider à créer la structure générale de ce nouvel élément. Ainsi, on renseigne le nom d’affichage de notre modèle de liste. “Pays” dans mon cas, et on choisit le modèle “Custom List” qui est basique et conviendra très bien à notre exemple. Je choisis également de créer une instance lorsque la “Feature” déployant notre solution sera activée. On clique sur “Finish” :

image

La structure générale de la liste est créée :

image

On observe tout de suite que Visual Studio n’a pas créé 1 seul fichier mais bien un ensemble. Dans le “Répertoire” Pays, on retrouve 2 fichiers XML :

  1. Elements.xml : décrit à SharePoint comment déployer le modèle lors de l’ajout de ce modèle
  2. Schema.xml : décrit la structure des éléments à déployer : colonnes, vues, etc.

Dans le sous dossier ListInstance1, on retrouve également un fichier XML “Elements.xml” qui décrira comment créer une instance de cette liste à partir du modèle lors de l’activation de la Feature : nom de la liste, url, visibilité, etc.

Nous allons ensuite reproduire 2 fois ces manipulations pour créer deux nouvelles listes : Ville et Commandes :

image

J’ai pris le soin ici de renommer correctement les instances dans l’explorateur de solutions.

2/ Modifier les modèles de liste – Elements.xml

Notre structure générale est créée. Passons maintenant à l’enrichissement de ces modèles en les personnalisant, en ajoutant de nouvelle colonnes, etc.

Pays

Pour la liste pays, nous devons :

  • Ajouter les colonnes Surface, NbrHabitants
  • Masquer le modèle dans la galerie (les utilisateurs/power users ne pourront pas créer de nouvelles instances à partir de ce modèle)
  • personnaliser par-ci, par-là Sourire

Commençons par le fichier Elements.xml du modèle de liste :

<ListTemplate
Name=”Pays”
Type=”10000″
BaseType=”0″
OnQuickLaunch=”TRUE”
SecurityBits=”11″
Sequence=”410″
DisplayName=”Pays”
Description=”My List Definition”
Image=”/_layouts/images/itgen.png”/>

Nous allons commencer par modifier les attributs existants :

  • Name=”Pays” => cela me convient
  • Type=”10000” (attention il ne faudra pas avoir un autre modèle sur la plateforme portant ce numéro)
  • BaseType=”0” => cela me convient (on aura 1 pour les bibliothèques de documents)
  • OnQuickLaunch=”TRUE” => Je change en FALSE, la liste n’apparaitra pas pas défaut dans la barre de navigation rapide “QuickLaunch”
  • SecurityBits=”11″ => OK
  • Sequence => aucune importance, le modèle sera masque dans la galerie des modèles de liste (ordre de tri dans cette galerie)
  • DisplayName=”Pays” => OK
  • Description=”My List Definition” => On donne une description
  • Image=”/_layouts/images/itgen.png”/ => Je vais changer pour fournir une image un peu plus sympa, que je déploierais grâce à la solution dans 14/TEMPLATES/IMAGES/DEMO/monimage.png

On ajoutera les attributs :

  • Category=”Custom Lists” => pas obligatoire
  • DisableAttachments=”TRUE” => on désactive les pièces jointes
  • FolderCreation=”FALSE” => on désactive la création de répertoires
  • Hidden=”TRUE” => On masque le modèle dans la galerie
  • VersioningEnabled=”FALSE” => on désactive le versioning

Ce qui donne :

ListTemplate
Name=”Pays”
Type=”10000″
Category=”Custom Lists”
DisableAttachments=”TRUE”
FolderCreation=”FALSE”
Hidden=”TRUE”
VersioningEnabled=”FALSE”
BaseType=”0″
OnQuickLaunch=”FALSE”
SecurityBits=”11″
Sequence=”410″
DisplayName=”Pays”
Description=”Modèle de liste pays”
Image=”/_layouts/images/demo/pays.png”/>

Notez également qu’il vous sera possible de “localiser” les noms (Name, Description par exemple) pour faire la traduction automatique suivant la langue du navigateur/UI.

Ville

Nous allons effectuer les mêmes manipulation sur le fichier Elements.xml du modèle de liste Ville :

<ListTemplate
Name=”Ville”
Type=”10001″
Category=”Custom Lists”
DisableAttachments=”TRUE”
FolderCreation=”FALSE”
Hidden=”TRUE”
VersioningEnabled=”FALSE”
BaseType=”0″
OnQuickLaunch=”FALSE”
SecurityBits=”11″
Sequence=”410″
DisplayName=”Ville”
Description=”Modèle de liste ville.”
Image=”/_layouts/images/demo/villes.png”/>

Commandes

Pour la liste commande, on reproduit les mêmes manipulations, sauf que ne masquera pas ce modèle pour pouvoir créer de multiples instances de cette liste. Nous modifierons également l’attribut OnQuickLaunch à TRUE :

<ListTemplate
Name=”Commandes”
Type=”10002″
Category=”Custom Lists”
DisableAttachments=”TRUE”
FolderCreation=”FALSE”
VersioningEnabled=”FALSE”
BaseType=”0″
OnQuickLaunch=”TRUE”
SecurityBits=”11″
Sequence=”410″
DisplayName=”Commandes”
Description=”Modèle de liste commandes.”
Image=”/_layouts/images/demo/commandes.png”/>

3/ Modifier les modèles de liste – Schema.xml

Maintenant, il nous faut modifier les 3 fichiers Schema.xml pour ajouter les nouvelles colonnes sur chacun de nos 3 modèles.

Pays

Dans notre liste pays, nous allons ajouter deux colonnes supplémentaires : Surface & NbrHabitants. Pour cela, on ouvre le fichier Schema.xml du modèle de liste Pays :

image

Dans cette structure XML, on distinguera 4 parties principales :

  • ContentTypes : déclaration des types de contenus associés à la liste, ici celui élément (Item)
  • Fields : métadonnées/colonnes/champs associés à ce modèle de liste
  • Views : Vues disponibles sur ce modèle de liste
  • Forms : formulaires d’ajout/modification/affichage de chaque élément de cette liste

Nous allons modifier principalement les <Fields /> pour ajouter les deux colonnes. Ici plusieurs écoles s’affrontent. Vous pouvez partir de rien, aidé par l’IntelliSense de Visual Studio ou alors créer une liste et ces colonnes dans SharePoint et utiliser SharePoint Manager 2010 pour récupérer le schéma généré par SharePoint. Pour sa facilité, je choisirai la seconde option, mais en restant vigilant sur le flot de XML généré…

J’ai donc créé une liste “pays” dans SharePoint et créé les colonnes demandées.

On prendra soin également de choisir le type de champ le plus pertinent pour nos données : texte, monnaie, nombre, recherche, etc.

image

    Voila donc le formulaire d’ajout d’un pays :

image

Vous trouverez de quoi télécharger SharePoint Manager 2010 sur CodePlex : SharePoint Manager 2010.

On lance SharePoint Manager 2010, et on explore l’arborescence de nos sites jusqu’à arriver sur notre liste “Pays” :

image

Dans la section de droite, vous trouverez un onglet “SchemaXml” avec l’ensemble du schéma :

image

On repère rapidement, dans la section <Fields> que nos deux champs créés précédemment apparaissent :

  • <Field Type=”Number” DisplayName=”Surface” Required=”FALSE”… />
  • <Field Type=”Number” DisplayName=”NbrHabitants” Required=”FALSE” … />
    Ce sont ces deux nœuds XML qu’il va falloir intégrer au fichier Schema.xml. On copie donc ces deux lignes et on les colle dans Schema.xml, dans le nœud <Fields></Fields> :

image

Petite option supplémentaire, on peut directement ajouter ces deux champs dans les différentes vues proposées par notre modèle de liste Pays. Pour cela, dans Schema.xml, on ouvre le nœud <Views>, on y trouve deux nœuds <View></View>. Une des vues sera utilisée pour les terminaux de type mobiles, et l’autre pour l’affichage par défaut dans le navigateur de cette liste “Pays”. Nous allons directement modifier la vue commençant par :

<View BaseViewID=”1″ Type=”HTML” WebPartZoneID=”Main”

Et ajouter dans le sous-noeud <ViewFields> deux nouvelles lignes (en copiant/collant 1 existante) et en modifiant l’attribut Name avec les noms de noms champs. Je supprime également le Field Attachments correspondant aux pièces jointes que j’ai désactivé dans la déclaration du Template (voir Elements.xml précédent) :

        <ViewFields>
<FieldRef Name=”LinkTitle”></FieldRef>
<FieldRef Name=”Surface”></FieldRef>
<FieldRef Name=”NbrHabitants”></FieldRef>
</ViewFields>

Attention, l’ordre a son important, les premières lignes deviendront les premières colonnes dans l’affichage. On obtiendra donc :

image

Notez également le nœud <OrderBy> au dessous qui vous permettra d’ordonner votre liste sur les noms des pays, alphabétiquement. Je modifie donc :

        <Query>
<OrderBy>
<FieldRef Name=”Title”></FieldRef>
</OrderBy>
</Query>

C’est tout pour ce modèle de liste. Passons maintenant à l’instance qui sera créé à partir de ce modèle. Pour cela, on se rend dans l’explorateur de solution et on ouvre le fichier Elements.xml de l’instance de la liste Pays :

image

Dans ce dernier, nous allons encore modifier la structure XML pour paramétrer l’instance de la liste Pays qui sera automatiquement créée lors de l’activation de la feature (nous y reviendrons…).

On modifie pour obtenir :

<ListInstance Title=”Pays”
OnQuickLaunch=”FALSE”
TemplateType=”10000″
Url=”Lists/Pays”
Description=”Liste des pays”>
</ListInstance>

Notez que le TemplateType est le même que celui définit dans le <ListTemplate>, c’est très important ! Sinon SharePoint ne saura pas quel modèle utiliser pour créer l’instance. Pour l’url, ma liste sera accessible à l’adresse :

Ville

Nous allons reprendre les mêmes manipulations pour ce modèle de liste. Nous allons utiliser également SharePoint Manager 2010 pour récupérer les nœuds XML des colonnes.

Nous utilisons SharePoint Manager 2010, récupération des nœuds XML, copier/coller, etc.

image

Dans le Schema.xml, nous  ajoutons donc :

<Fields>
<Field Type=”Number” DisplayName=”Surface” Required=”FALSE”…

<Field Type=”Number” DisplayName=”NbrHabitants” Required=”FALSE”…

<Field Type=”Lookup” DisplayName=”Pays” Required=”TRUE”…

</Fields>

Jusqu’ici, nous n’avions eu que des colonnes texte ou nombre. Nous venons d’ajouter un nouveau type de colonne, le type “Lookup” (Recherche d’information déjà présentes sur le site). Ces champs permettent de référencer des données qui sont stockées dans une autre liste/bibliothèque SharePoint. Si l’on regarde les différents attributs proposés, on note :

  • List=”{1f675688-39f5-441d-bdb7-19f7c3dce646}”
  • ShowField=”Title”
    Ce sont ces deux attributs qui établissent la relation entre la liste Ville et la liste Pays et plus particulièrement la colonne “Title” de la liste Pays. Lorsque nous déploierons cette solution/feature, SharePoint ne saura pas faire le lien entre ces deux listes, parce que, tout simple le GUID de la liste Pays va être régénéré !!! Et oui… il va donc falloir remplacer ce premier attribut “List” par autre chose (et si possible pas de code C# qui recréera cette relation).
    Après un petit tour dans le SDK de SharePoint, on s’aperçoit qu’il est possible de remplacer ce GUID par l’adresse relative de cette liste : Lists/Pays. On obtient donc :

<Field Type=”Lookup” DisplayName=”Pays” Required=”TRUE” EnforceUniqueValues=”FALSE” List=”Lists/Pays” ShowField=”Title”

Pour la vue par défaut de cette liste, nous effectuons également les modification afin que ces champs apparaissent dans la vue :

image

C’est tout pour ce modèle de liste. Passons maintenant à l’instance qui sera créé à partir de ce modèle. Pour cela, on se rend dans l’explorateur de solution et on ouvre le fichier Elements.xml de l’instance de la liste Ville :

image

Dans ce dernier, nous allons encore modifier la structure XML pour paramétrer l’instance de la liste Ville qui sera automatiquement créée lors de l’activation de la feature (nous y reviendrons…).

On modifie pour obtenir :

<ListInstance Title=”Villes”
OnQuickLaunch=”FALSE”
TemplateType=”10001″
Url=”Lists/Villes”
Description=”Liste des villes.”>
</ListInstance>

image

Notez que le TemplateType est le même que celui définit dans le <ListTemplate>, c’est très important ! Sinon SharePoint ne saura pas quel modèle utiliser pour créer l’instance. Pour l’url, ma liste sera accessible à l’adresse :

Commandes

Pour cette dernière liste, nous allons reproduire exactement les mêmes étapes mais cette fois-ci, nous aurons deux champs de type “lookup”.

Dans le schema.xml nous aurons donc :

<Fields>
<Field Type=”Currency” DisplayName=”Montant” Required=”TRUE” … />
<Field Type=”Lookup” DisplayName=”Pays” Required=”TRUE” …  List=”Lists/Pays” ShowField=”Title” … />
<Field Type=”Lookup” DisplayName=”Ville” Required=”TRUE” List=”Lists/Villes” ShowField=”Title” … />

</Fields>

image

C’est tout pour ce modèle de liste. Passons maintenant à l’instance qui sera créé à partir de ce modèle. Pour cela, on se rend dans l’explorateur de solution et on ouvre le fichier Elements.xml de l’instance de la liste Commandes :

image

Dans ce dernier, nous allons encore modifier la structure XML pour paramétrer l’instance de la liste Commandes qui sera automatiquement créée lors de l’activation de la feature (nous y reviendrons…).

On modifie pour obtenir :

<ListInstance Title=”Commandes”
OnQuickLaunch=”TRUE”
TemplateType=”10002″
Url=”Lists/Commandes”
Description=”Liste de commandes.”>
</ListInstance>

image

Notez que le TemplateType est le même que celui définit dans le <ListTemplate>, c’est très important ! Sinon SharePoint ne saura pas quel modèle utiliser pour créer l’instance. Pour l’url, ma liste sera accessible à l’adresse :

Certains diront qu’il y a des attributs qui ne seront pas utilisé dans notre structure XML (Schema.xml, Elements.xml), je vous laisse vous reporter au SDK, Technet et autre pour faire le tri….

4/ Créer le package de déploiement

Il nous reste une étape, et pas des moindres, créer la solution, la feature qui permettra de déployer nos modèles de listes. Pour cela, Visual Studio nous aide bien (et c’est tout à son honneur quand on a connu SharePoint 2003 & 2007…).

Nous allons donc nous rendre dans le répertoire Features où nous remarquons qu’une feature est déjà disponible :

image

On double-clique, l’assistant de configuration des features apparait :

image

Aucun des modèles/instances n’est ajouté à la feature. Commençons par cela, on utilise les “flèches du milieu” pour faire passer les éléments de gauche à droite :

image

Nous allons également renommer la feature, donner une petite description, etc. Il vous sera également possible d’ajouter une petite icone pour distinguer plus rapidement vos features.

Chose importante, je souhaiterai que mes listes Pays & Villes ne soient créées (leurs instances plus particulièrement) que sur le site à la racine de la collection (RootWeb). Pour cela, le plus simple et de changer le Scope (Etendue) en Site (Collection de sites).

image

Et c’est tout… Bien sûr suivant le projet et les éléments qui le composent, vous choisirez peut être d’utiliser plusieurs fonctionnalités, avec des scopes différents…

5/ Le test !

C’est parti pour le test… vous pouvez utiliser F5 (mode debug… qui ne débuggera rien ici !) ou alors le clic droit sur le projet, Build, Deploy. Ce choisis la seconde option.

Vous aurez peut être une erreur lors du déploiement vous disant que Pays et Pays se déploie dans le même emplacement. En effet en regardant les chemins (path) de déploiement on s’aperçoit que les instances se déploient dans le même répertoire que la définition. Je renomme dans les modèles de liste :

image

Vous obtiendrez peut être cette fenêtre de warning :

image

Elle vous informe tout simplement qu’une liste avec le même nom “Pays” existe deja. On coche “Do not prompt me again for these items” puis on clique sur “Resolve automatically”…

Déploiement réussi :

image

Il faudra également ajouter les images correspondant aux miniatures de nos listes. J’ai fait quelques petits changements dans les Elements.xml des modèles en modifiant l’attribut Image :

  • Image=”/_layouts/images/demo/pays16x16.png”/
  • Image=”/_layouts/images/demo/villes16x16.png”/
  • Image=”/_layouts/images/demo/commandes16x16.png”/

Voila ce que cela donne dans le menu “View all site content” :

image

Rendons nous sur chacune des liste afin de vérifier :

  • La déclaration des vues/affichages (colonnes présentes, tris)
  • La déclaration des colonnes créées

Coté affichage, rien à signaler. Par contre si on lance le formulaire d’ajout d’un pays/ville/commandes, le formulaire ne présente que le champ Titre !!! Effectivement, c’est un comportement particulier de SharePoint voire étrange que l’on constate ici.

Premier réflexe, ajouter les attributs :

ShowInNewForm=”TRUE” ShowInEditForm=”TRUE” ShowInDisplayForm=”TRUE”

Sur chacun des champs. Mais cela n’aura aucun effet. Nous aurons alors deux choix :

  • Recourir à un type de contenu SharePoint
  • Supprimer les types de contenu

En général, je me tourne vers la première option. Mais dans notre cas, aucun intérêt de créer des types de contenu (ContentTypes) vu qu’on ne les utilisera qu’une seule fois (pour Pays & Ville) et qu’on ne réutilisera pas non plus la structure de Commandes (si ce n’est pour créer de nouvelles listes de commandes => et pas des sous-enfants).

Voila donc comment faire fonctionner tout cela. Première opération, supprimer les sections <ContentTypes>…</ContentTypes> ou tout du moins le contenu => <ContentTypes/> dans les 3 Schema.xml :

image

On sauvegarde le tout et on redéploie… et là, magique :

image

5/ Charger des données

Une petite dernière chose, avant de passer à la suite… Les listes étant créées, elles seront supprimées, recréées à chaque déploiement depuis Visual Studio. Pour ne pas perdre trop de temps à se recréer un jeu de test, nous pouvons remplir ces listes directement depuis leur définition. C’est ce qu’on appelle les RowData.

Nous allons commencer par ajouter des données dans Pays puis Ville. Cette méthode est aussi très pratique pour remplir automatiquement des listes de paramètres stockées dans SharePoint (ici notre liste de Pays ne change pas tous les jours…). Voila comment faire.

Dans chacun des fichiers Elements.xml des instances de nos listes, nous allons ajouter un bloc de XML :

<ListInstance Title=”Pays”
OnQuickLaunch=”FALSE”
TemplateType=”10000″
Url=”Lists/Pays”
Description=”Liste des pays”>
<Data>
<Rows>
<Row>
<Field Name=””></Field>
</Row>
</Rows>
</Data>
</ListInstance>

En résumé, les nœuds XML :

  • Data : ensemble des données à ajouter
  • Rows : collection des lignes (ensemble d’enregistrements)
  • Row : 1 ligne d’enregistrement
  • Field : champ à valoriser pour l’enregistrement courant.

Donc pour un pays, on aurait (données recueillies sur www.france.fr) :

    <Data>
<Rows>
<Row>
<Field Name=”Title”>France</Field>
<Field Name=”Surface”>543965</Field>
<Field Name=”NbrHabitants”>65350000</Field>
</Row>
</Rows>
</Data>

En on recréée une structure Row pour chacun des pays. J’en ajouterai une petite dizaine pour les tests.

image

On remarque tout de suite que les pays sont triés sur le nom (alphabétique) alors dans le Schema.xml :

        <Row>
<Field Name=”Title”>France</Field>
<Field Name=”Surface”>543965</Field>
<Field Name=”NbrHabitants”>65350000</Field>
</Row>
<Row>
<Field Name=”Title”>Espagne</Field>
<Field Name=”Surface”>505911</Field>
<Field Name=”NbrHabitants”>46754784</Field>
</Row>
<Row>
<Field Name=”Title”>Angleterre</Field>
<Field Name=”Surface”>130395</Field>
<Field Name=”NbrHabitants”>52234000</Field>
</Row>

Nous allons faire la même chose avec les Villes. Petite différence, le champ lookup qui pointe sur la liste des Pays… Et c’est donc un peu différent. En effet, les champs lookups doivent être renseigné avec ID;#Valeur :

         <Row>
<Field Name=”Title”>Marseille</Field>
<Field Name=”Surface”>240</Field>
<Field Name=”NbrHabitants”>850602</Field>
<Field Name=”Pays”>1;#France</Field>
</Row>
<Row>
<Field Name=”Title”>Madrid</Field>
<Field Name=”Surface”>608</Field>
<Field Name=”NbrHabitants”>3413271</Field>
<Field Name=”Pays”>2;#Espagne</Field>
</Row>

Attention, l’ID et celui dans SharePoint (et donc dans l’ordre d’insertion qui correspond à l’ordre dans l’Element.xml de la liste Pays !)

image

Et voilà ! Puisque les listes sont supprimées à chaque déploiement, nous n’auront pas besoin de remplacer les ID dans les fichiers Elements.xml.

Dernière vérification, la liste de commandes est-elle bien renseignée ?? Bien sûr que oui !

image

Par contre on voit tout de suite que Barcelone n’est pas en Allemagne… Clignement d'œil

Et donc… prochain article… ré-implémenter le comportement de ce formulaire… et faire communiquer nos deux liste déroulantes !

SharePoint 2010 & Visual Studio 2012–Step 5–Nouveautés & Ma première application Silverlight avec OData

Posted on Updated on

Bonjour à tous.

Encore un nouveau billet concernant les nouveautés de Visual Studio 2012 RC pour le développement SharePoint 2010. Petit rappel :

Nous allons rentrer plus en détail dans le développement avec la création d’un WebPart Silverlight permettant de requêter des données par le biais de OData.

Mais me direz-vous, qu’est-ce que OData ? Je vous conseille pour cela un peu de lecture glanée sur le Web :

Pour résumer, c’est la possibilité d’interroger des données au travers d’un WebService (http/https) via un protocole défini et standardisé retournant du JSON ou ATOM (du XML de reste). Je vous laisse vous documenter sur ce sujet.

Revenons à notre thèmes principal. Comment créer ce WebPart Silverlight, le packager et le déployer dans SharePoint 2010 en utilisant Visual Studio 2012. C’est ce que nous allons voir !

(Je précise que Silverlight n’est pas ma tasse de thé !)

1/ Créer le WebPart dans la solution.

Je vous rappelle que nous avions laissé la solution dans cet état au précédent billet :

100

Nous avons déjà créé une colonne de site, un content type et un modèle de bibliothèque de documents.

Pour créer notre WebPart Silverlight, commençons par faire un clic-droit sur le projet, puis “Add > New Item”

101

Dans la fenêtre qui s’ouvre, sélectionner “Silverlight WebPart” et nommons le “WPSilverlight” puis cliquer sur “Add” :

102

Une nouvelle fenêtre s’ouvre, sélectionner “Create a new…” si ce n’est pas déjà fait. Cela va créer un nouveau projet dans la solution actuelle, de type Silverlight qui abritera tout le projet permettant d’implémenter le contrôle Silverlight. Le projet sera compilé puis les binaires seront copiés dans la solution SharePoint automatiquement. Pratique !

On paramètre donc le nom du projet, le répertoire de création du projet, le langage (C#) puis la version de Silverlight (5.0 dans mon cas, 4.0 est aussi disponible). Puis cliquer sur “Finish” :

103

Après quelques secondes, le nouveau projet est créé et le designer Silverlight se charge :

104

106

Dans le projet SharePoint, une nouvelle fonctionnalité (feature) est créée et référencera tous les fichiers utiles pour notre projet Silverlight en particulier les fichiers XML permettant de référencer notre WebPart dans SharePoint. On retrouve donc le fichier “Elements.xml” et “WPSilverlight.webpart” dans cette feature :

107

Le fichier “Elements.xml” va permettre de déclarer le que SharePoint doit utiliser le fichier “WPSilverlight.webpart” mais également le fichier XAP produit par le projet Silverlight :

108

Et dans le fichier “WPSilverlight.webpart” on déclare à SharePoint comment déployer notre WebPart contenu dans la solution. On va par exemple indiquer dans quelle catégorie placer le WebPart, ses dimensions par défaut, son nom dans la galerie de WebParts ou encore un éventuel message d’erreur qui pourra apparaitre lorsque l’utilisateur ne parviendra pas à ajouter ce composant sur une page :

109

2/ Voyons maintenant ce fameux projet Silverlight :

112

Un bon nombre de références sont déjà ajoutées au projet, essentielles aux WebParts Silverlight pour SharePoint 2010.

Cependant un certain nombre de références vont nous être utilises afin de requêter en OData des données provenant de SharePoint. Nous allons donc ajouter deux références au projet Silverlight :

  • System.Windows.Data
  • System.Data.Services.Client

Pour cela, clic-droit sur le répertoire “References” dans le projet Silverlight puis “Add Reference” :

113

Nous allons rechercher nos deux références dans les Assemblies déjà disponibles sur le serveur :

114

115

116

117

118

3/ Notre projet référence maintenant les bonnes Assemblies. Il va falloir ajouter une référence vers le WebService SharePoint 2010 afin de requêter ces données (créer la DataSource).

Pour cela, nous allons ajouter un “Service Reference”. Clic-droit sur le projet, “Add Service Reference” :

119

Une fenêtre s’ouvre où nous allons saisir l’URL du WebService en question… nous ne la connaissons pas encore, mais cela reste simple ! Pour cela, nous allons juste entrer l’URL de notre site SharePoint. Dans mon cas http://sp2010demo  et on clique sur “Go”. Visual Studio 2012 va rechercher tout seul le service qui doit être exposé par SharePoint :

120

Une fois trouvé, Visual Studio va rajouter seul le bout d’URL manquant, vous n’avez rien à faire. Il va donc rajouter : /_vti_bin/ListData.svc et présenter le service (Panel de gauche) disponible. Il vous suffit de nommer votre nouveau service (“ServiceReference”) et cliquer sur “OK”.

121

La référence au service est bien ajoutée au projet Silverlight dans la solution :

122

4/ Nous allons essayer de compiler la solution afin de vérifier qu’il n’y a aucun problème. Dans mon cas j’ai quelques centaines d’erreurs qui remontent (337 pour être exact) !

123

Rien de grave, en fait en ajoutant nos références aux Assemblies, le compilateur s’y perd un peu mais rien de dramatique. Afin de supprimer ces erreurs, il vous suffira de supprimer deux références qui ont été ajoutées à la création du projet :

  • Microsoft.Data.OData.SL
  • Microsoft.Data.Services.Client.SL

On sélectionne donc ces deux références et on les supprime :

124

125

126

On compile, pas d’erreur… c’est la fête :

127

5/ La référence au service de requêtage des données est ajoutée, nous allons maintenant créer la fameuse DataSource qui nous permettra de “binder” les données provenant de SharePoint à un contrôle Silverlight de manière automatique. Pour cela, on sélectionne la référence au service puis on se dirige sur le menu “DATA” puis “Show Data Sources” :

128

Sur la gauche, une boite à outils s’ouvre présentant la DataSource récupérer par la référence au WebService SharePoint et on voit immédiatement les listes et bibliothèques SharePoint de notre site apparaitre :

129

Et là… rien de plus simple ! Ouvrons notre fichier MainPage.xaml contenant la fenêtre principale de notre application Silverlight…

130

On choisit une liste dans la DataSource (dans mon cas “Premiereliste” qui est l’instance de liste créée lors du déploiement de ma solution SharePoint, à partir du modèle) :

131

Un coup de Drag&Drop (glisser-déposer… Clignement d'œil) et c’est gagné !

132

Immédiatement, Visual Studio ajoute une DataGrid “bindée” sur notre DataSource dans la fenêtre du designer Silverlight.

il nous reste à fixer les dimensions, aligner, … faire du beau quoi !

133

Oh que c’est beau…

6/ Et ce n’est pas encore fini, maintenant il nous reste à mettre en place le mécanisme de chargement Asynchrone de notre DataGrid. Pour cela, nous allons faire un tout petit peu de code.

Ouvrons donc le fichier C# associé à notre MainPage.xaml (F7 depuis le designer Silverlight).

134

Première chose, ajouter les “usings” adéquats :

  • using SilverlightProject.ServiceReference //(référence vers le service créé tout à l’heure)
  • using System.Windows.Data
  • using System.Data.Services.Client

135

On enregistre, compile. Tout est ok.

Ensuite nous allons créer 3 attributs à la classe :

  • private IntranetDataContext context;
  • private CollectionViewSource collviewsource;
  • DataServiceCollection<PremiereListeItem> premierelistitems = new DataServiceCollection<PremiereListeItem>();

136

Et enfin implémenter deux méthodes, celle proposée par Visual Studio (UserControl_Loaded) puis dans un seconde temps une deuxième (premierelistitems_LoadCompleted).

La première sera appelée lorsque le UserControl Silverlight aura été chargé (à la fin du chargement du contrôle) et la seconde à la fin du chargement des données depuis la DataSource et qui bindera les données avec le contrôle.

Je ne détaille pas le code, ce n’est pas vraiment pertinent pour l’exemple.

137

private void UserControl_Loaded_1(object sender, RoutedEventArgs e)
{
    context = new IntranetDataContext(new Uri("http://sp2010demo/_vti_bin/ListData.svc"));
    if (!System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
    {
       collviewsource = (System.Windows.Data.CollectionViewSource)this.Resources["premiereListeViewSource"];
       premierelistitems.LoadCompleted += new EventHandler<LoadCompletedEventArgs>(premierelistitems_LoadCompleted);
       premierelistitems.LoadAsync(context.PremiereListe);
    }           
}
private void premierelistitems_LoadCompleted(object sender, LoadCompletedEventArgs e)
{
    if (e.Error == null)
    {
       collviewsource.Source = premierelistitems;
    }
    else
    {
       MessageBox.Show(string.Format("Une erreur s'est produite : {0}", e.Error.Message));
    }
}

Bien sûr il faut compiler. Tout doit être Ok. Il nous maintenant à déployer sur notre site SharePoint 2010. Mais avant cela nous allons vérifier que le debug pour les application Silverlight est bien activé. Pour cela, il faut se positionner sur le projet SharePoint, clic-droit, “Properties” :

138

Dans la partie SharePoint, il faut vérifier que la checkbox “Enable Silverlight debugging…” soit bien cochée. On sauve, compile.

139

Puis on déploie comme vu dans les précédents billets (F5 pour debugger) :

140

6/ Le navigateur s’ouvre sur l’accueil de notre site SharePoint. Il nous faut éditer la page d’accueil pour ajouter le composant WebPart :

144

Dans le ruban, Insérer > Composant WebPart :

145

Dans la galerie de WebParts, le notre apparait bien dans la section “Custom” => SharePointProject1 – WPSilverlight. On cliquer sur “Ajouter” :

146

Le WebPart est ajouté :

147

On sauvegarde la page :

148

7/ Aucune donnée n’apparait. Normal, la liste est vide ! Ajoutons donc un petit document de test :

149

150

151

152

Revenons sur la page d’accueil :

153

Le document que nous venons d’ajouter apparait bien. Vous pouvez directement debugger votre projet Silverlight depuis Visual Studio 2012 au besoin.

Plutôt simple non ? qu’est-ce qu’à ajouté Visual Studio 2012 sur ce mini-développement ? Principalement de nouvelles interface qui ont été intégrées au niveau des DataSources. On peut maintenant requêter très facilement des données SharePoint au travers des services OData et utiliser la source de données produite dans plusieurs type de projet. Cela ne se limite pas au Silverlight. En effet, on pourrait très bien créer une application cliente Métro/WPF qui présenterait ces données de la même manière. Un bon point pour VS2012 !

SharePoint 2010 & Visual Studio 2012–Step 4–Nouveautés & Ma première colonne de site

Posted on Updated on

 

Dans les précédents épisodes, nous avons vu comment installer Visual Studio 2012 sur notre serveur SharePoint 2010 puis comment créer un modèle de bibliothèque de documents et enfin créer un type de contenu à l’aide des divers assistants proposé par l’IDE :

Nous allons maintenant voir comment créer une colonne de site avec la nouvelle interface de Visual Studio 2012. Nous en étions resté au point où la solution Visual Studio contenait un modèle de bibliothèque de documents et un type de contenu personnalisé.

VS2010 - Solution

 

1/ Nous allons maintenant ajouter une nouvelle colonne de site. Pour cela, il faut faire un clic-droit sur la solution “Add > New Item” :

VS2010 - Ajout colonne

 

Dans la fenêtre de sélection du modèle d’item, on sélection “Site Column” et on nomme cette colonne. On prendra soin de nommer cette colonne sans espace, caractères accentués, ponctuation, etc.

VS2010 - Ajout colonne 2

 

Je vous rappelle que dans Visual Studio 2010, cette option n’existait pas. Nous commençons donc directement avec une nouveauté !

2/ On valide cette fenêtre en cliquant sur “Add”. La fenêtre se ferme et nous arrivons directement sur le fichier XML (“Elements.xml”) contenant la déclaration de la colonne de site. Malheureusement il n’y a pas d’assistant comme pour les types de contenu ou les modèles de listes.

Il va donc falloir directement éditer le fichier XML, mais nous conservons l’usage de l’IntelliSense qui va nous être bien pratique :

VS2010 - XML Colonne

 

On peut noter que grâce au fichier XML, nous avons accès à tous les paramétrages de cette colonne comme le nom d’affichage (“DisplayName”), nom interne ‘(“Name”), le type, etc.

Nous n’avons pas non plus d’assistant pour choisir le groupe de classement dans lequel sera classé notre colonne, il faut le faire dans le XML.

 

Donc mis à part l’entrée dans le menu de sélection du type d’item, rien ne change pour la création de colonnes de site (on a tout de même une icone particulière dans l’arborescence de la solution pour ces colonnes de site, et 1 fichier Elements.xml par colonne).

 

Si nous jetons un coup d’œil à la feature, la colonne apparait bien :

VS2010 - Feature

 

3/ Essayons d’associer cette nouvelle colonne de site au type de contenu créé précédemment. Pour cela, nous allons rouvrir la définition du type de contenu et sur l’onglet “Columns”, nous avons une interface permettant de rechercher des colonnes de site existantes :

VS2010 - Content Type

 

On recherche notre colonne de site :

VS2010 - Content Type 2

 

Elle apparait bien dans la liste des colonnes proposées (et pourtant elle n’est pas encore déployée sur le site SharePoint. Visual Studio propose donc les colonnes existantes sur le site et celles provenant de la solution courante).

VS2010 - Content Type 3

 

On valide et on enregistre la modification :

VS2010 - Content Type 4

 

4/ Il nous reste à vérifier qu’en associant ce type de contenu à notre définition de bibliothèque de documents la nouvelle colonne de site apparaisse bien. Pour cela, on rouvre la déclaration du modèle de bibliothèque :

VS2010 - Liste

 

Et nous utilisons le bouton “Content Types” en bas de page. On reconnait l’interface déjà utilisée dans les précédents billets :

VS2010 - Liste Content Type

 

On recherche notre type de contenu en pointant sur le texte “Click here to add a content type”. Ce contrôle va nous permettre de rechercher les types de contenu disponibles. Ici Encore Visual Studio 2012 se base sur les types de contenu déjà déployés dans SharePoint 2010 mais également sur les types de contenu référencés dans la solution Visual Studio 2012:

VS2010 - Liste Content Type 2

 

On valide et on va spécifier que ce type de contenu est le type de contenu par défaut disponible sur cette bibliothèque (en utilisant le bouton “Set as Default”) :

VS2010 - Liste Content Type 3

 

VS2010 - Liste Content Type 4

 

On valide cette fenêtre. Dans la définition de ce modèle de bibliothèque, on voit tout de suite que la colonne de site créée et associée au type de contenu remonte dans la définition :

VS2010 - Liste Content Type 6

 

5/ Pour bien faire les choses, il nous reste à déployer le tout. On reprend la manipulation décrite dans un précédent billet :

 

Clic-droit sur la solution > Deploy :

VS2010 - Déploiement 1

 

Visual Studio nous précise qu’il y a des conflits lors du déploiement (l’instance de liste a déjà été déployée). Je choisi “Resolve Automatically” et Visual Studio supprime l’instance qui était déjà créée et redéploye le package :

VS2010 - Déploiement 2

Cette résolution d’erreur de déploiement est la même que celle utilisée par Visual Studio 2010.

 

Le déploiement est terminé :

VS2010 - Déploiement 3

 

On retrouve bien le tout dans SharePoint 2010 :

La colonne de site :

VS2010 - Résultat 1

 

Le type de contenu :

VS2010 - Résultat 2

 

Et dans le type de contenu, l’association de la colonne de site :

VS2010 - Résultat 3

 

On retrouve également l’instance de la liste créée à partir du modèle de bibliothèque :

VS2010 - Résultat 4

 

En conclusion, peu de nouveauté pour la création de nouvelle colonnes de site. On notera toutefois qu’avoir une icône spéciale dans l’arborescence est assez agréable (pour une fois ce n’est pas l’icône associée aux fichiers XML Clignement d'œil ).

 

De plus, au final l’ensemble combiné est agréable d’utilisation, on se retrouve facilement dans les menus et le fait que Visual Studio sache récupérer ce qui est déjà implémenté dans SharePoint mais également le contenu dans la solution (dans le menu d’association notamment) est un vrai plus. Les nouvelles interface sont harmonisée bien que de mon point de vue il manque un “assistant avancé” entre le mode facile et l’édition directe de XML.

Mais plus je joue avec l’interface, plus il me tarde la sortie finale de Visual Studio 2012 !!!

Au projet épisode… un peu de… Silverlight (une fois n’est pas coutume…). Stay Tuned !

SharePoint 2010 & Visual Studio 2012–Step 3–Nouveautés & Mon premier type de contenu

Posted on Updated on

 

Dans les derniers épisodes, nous avons vu comment installer Visual Studio 2012 sur notre serveur SharePoint 2010 puis comment créer un modèle de bibliothèque de documents :

Nous allons maintenant voir comment créer un type de contenu avec Visual Studio 2012.

 

Rappelez-vous, dans le précédent billet, nous avions laissé Visual Studio dans cet état :

Visual Studio 2012 - Début

Notre modèle de bibliothèque “PremiereListe” était créé dans la solution Visual Studio.

 

1/ Ajoutons un nouveau type de contenu. Pour cela, clic-droit que la solution, “Add > New Item” :

Visual Studio 2012 - Ajout content type 1

 

Dans la fenêtre de sélection du modèle d’”Item”, nous allons choisir “Content Type” et lui donner un nom :

Visual Studio 2012 - Ajout content type 2

 

2/ Une nouvelle fenêtre se lance permettant de sélectionner le type de contenu parent à celui que nous allons créer. Pour l’exemple, on sélectionne “Document” :

Visual Studio 2012 - Choix du parent

 

Visual Studio 2012 - Choix du parent 2

 

Visual Studio 2012 - Choix du parent 3

Et cliquer sur “Finish”. Toujours aucune nouveauté jusqu’ici. Après avoir validé notre configuration, nous arrivons enfin sur quelque chose de nouveau.

4/ En effet, un nouvel assistant va nous aider à configurer notre type de contenu là où avant nous devions recourir à du XML pour associer des colonnes de site à un type de contenu, paramétrer le groupe de classement, etc.

Visual Studio 2012 - Columns 1

On distingue 2 onglets : Columns et Content Type.

 

5/ Le premier onglet Columns va nous permettre d’associer des colonnes de sites existantes à notre nouveau type de contenu. Nous ne pourrons pas créer de nouvelles colonnes de sites directement depuis cette interface. Pour cela nous devrons recourir à un autre moyen que nous verrons bientôt !

 

Le fonctionnement est très simple, dans la première colonne, on recherche la colonne de site voulue, Visual Studio 2012 remonte automatiquement le type de cette colonne. Nous pourrons spécifier si cette colonne sera obligatoire lors de la saisie faite par l’utilisateur dans l’interface Web de SharePoint :

Visual Studio 2012 - Columns 2

Visual Studio 2012 - Columns 3

Visual Studio 2012 - Columns 4

 

L’interface est simple et intuitive, elle fonctionne exactement comme celle permettant de créer des modèles de listes… on n’est pas perdu !

 

6/ Le second onglet est lui aussi très simple. On retrouve le paramétrage général du type de contenu.

Visual Studio 2012 - Paramètres

Visual Studio 2012 - Paramètres 2

On retrouve le nom du type de contenu, sa description et le groupe dans lequel il sera classé. Petite déception dans cette Release Candidate, impossible de créer notre propre groupe pour classer les types de contenu. On est obligé de choisir dans la liste des groupes existants.

Quelques paramètres supplémentaires : hériter des colonnes du parent, lecture seule du type de contenu et masquer ce type de contenu dans le bouton “Nouveau” des listes/bibliothèques auxquels il sera associé.

 

Pour résoudre le problème de la création d’un nouveau groupe de classement, il nous est possible d’accéder au XML généré (“Elements.xml”) et d’éditer directement ce XML en utilisant en plus l’IntelliSense :

Visual Studio 2012 - IntelliSense

 

7/ Et pour en revenir au billet précédent… comment référencer ce nouveau type de contenu dans notre modèle de bibliothèque de documents précédent ? C’est très simple, pour cela il nous suffit de rouvrir la définition du modèle de bibliothèque de documents et de cliquer sur le bouton “Content Types” :

Visual Studio 2012 - List Definition 1

 

Puis de retrouver dans la liste déroulante :

Visual Studio 2012 - List Definition 2

Visual Studio 2012 - List Definition 3

 

Il est également possible de le paramétrer comme type de contenu par défaut sur notre modèle en utilisant le bouton “Set as Default” (en sélectionnant le bon type de contenu).

Visual Studio 2012 - List Definition 4

 

Pour résumer, Microsoft a intégré des petits assistant simples et pratiques dans sa nouvelle version de Visual Studio (2012 RC) qui vont nous faire gagner du temps et simplifier la création de pas mal d’éléments. On regrettera toutefois de devoir recourir au XML pour les paramétrages avancés !

Mais c’est déjà une belle avancée ! vivement la sortie de la version finale de Visual Studio 2012 !

 

Prochain billet, la création de colonnes de site ! Stay Tuned !

SharePoint 2010 & Visual Studio 2012–Step 2–Nouveautés & Ma première définition de liste

Posted on Updated on

 

Dans un précédent billet, nous avons vu comment installer Visual Studio 2012 et initier un premier projet SharePoint 2010 : https://kazoumoulox.wordpress.com/2012/06/04/sp2010-vs2012-part1/

 

Nous allons maintenant voir les nouveautés apportées par cette nouvelle mouture de l’IDE.

 

Une des premières nouveautés est la possibilité de créer des modèle de listes (list definition) directement depuis Visual Studio grâce à un assistant. Pour rappel, dans Visual Studio 2010 nous pouvions bien sûr créer des listes mais pour cela il fallait modifier le XML des fichiers “schema.xml” et “elements.xml” à la main. Microsoft nous propose donc de nous simplifier ce développement grâce à une interface plutôt complète. Allez on se lance !!!

Petit rappel, nous avions laissé visual Studio 2012 dans l’état où nous avions créé une première solution SharePoint 2010 vide :

Visual Studio 2012 - Solution

 

1/ Nous allons créer un nouvel élément de ce projet en cliquant-droit sur la solution et en se déplaçant sur “Add > New Item” :

Visual Studio 2012 - Ajout item

 

La fenêtre permettant de sélectionner le type d’élément à créer se lance :

Visual Studio 2012 - Gallerie Items 1

Visual Studio 2012 - Gallerie Items 2

 

Pour l’œil expérimenté, on voit tout de suite que de nouveaux éléments sont disponibles comparé à Visual Studio 2010 :

  • Site Column
  • Heu… ben je crois que c’est tout !

Ce n’est donc pas dans ce menu non plus que se situent les nouveautés… mais juste après !

 

2/ Nous allons créer une nouvelle liste SharePoint grâce au menu précédent, pour cela on sélectionne l’entrée : “List” et on choisi un nom pour notre liste (on évitera les espaces, caractère spéciaux, accentués, etc. car cela deviendra le nom interne de la liste. On jouera sur le “Title” de la liste pour le nom d’affichage) :

Visual Studio 2012 - Ajout Liste

On clique sur “Add”.

 

3/ Un nouvel assistant se lance :

Visual Studio 2012 - Modèle Liste

 

Enfin de la nouveauté ! Cet assistant nous propose de se baser sur un modèle existant afin de créer notre modèle de liste/bibliothèque.

Soit on décide d’utiliser la première option : la liste sera personnalisable, nous pourrons ajouter des colonnes, vues, type de contenu.

Soit on décide d’utiliser la seconde option : la liste se basera sur un modèle et ne sera pas personnalisable après ajout.

On notera également une différence dans les modèles de listes/bibliothèque disponibles dans ces deux options. Dans la première option, on retrouve seulement les modèles de base alors que dans la seconde on retrouve tous les modèles disponibles sur la collection de sites à laquelle Visual Studio s’est connecté lors de la création de la solution :

Visual Studio 2012 - Modèle Liste 2

Visual Studio 2012 - Modèle Liste 3

 

Pour l’exemple, j’ai choisi “Document Library” et cliqué sur “Finish”.

 

4/ Après avoir validé l’assistant, Visual Studio 2012 dévoile une nouvelle fenêtre permettant de configurer notre nouvelle liste :

Visual Studio 2012 - Modèle Liste créé

 

Encore de la nouveauté ! Cette fenêtre va nous permettre d’ajouter, modifier ou supprimer des colonnes au modèle de base proposé. Nous allons pouvoir également créer, modifier et supprimer des vues/affichages mais également modifier les paramètres de l’instance de la liste qui sera automatiquement créée.

Visual Studio 2012 - Colonnes 2

Visual Studio 2012 - Colonnes List

 

5/ Commençons par le premier onglet : “Columns”

Dans cette fenêtre nous allons personnaliser les colonnes qui seront associées à notre modèle. Pour cela, il suffit de cliquer sur le message “Type a new or existing column name”.

Pour une nouvelle colonne, il suffit d’entrer son nom (attention, ici encore il s’agit du nom interne : pas d’espace, ponctuation, séparateur, accents, etc.) :

Visual Studio 2012 - Colonnes 1

 

Puis on sélectionne son type parmi les types proposés habituellement par SharePoint :

Visual Studio 2012 - Colonnes 2

 

Ou alors on peut piocher dans les colonnes de sites déjà présentes sur la collection de sites (on ne pourra alors pas changer le type) :

Visual Studio 2012 - Colonnes 3

 

Nous apercevons également juste en dessous un bouton “Content Types”. Ce bouton permet d’associer directement un type de contenu existant ou alors d’en créer un nouveau. Nous verrons cela dans un autre billet…

Visual Studio 2012 - Content Type

 

6/ Si on passe à l’onglet suivant “Views”, nous allons pouvoir gérer les vues qui seront disponibles pour notre modèle :

Visual Studio 2012 - Vues

Nous reconnaissons immédiatement les vues de la bibliothèque de documents : Tous les documents, Mode Explorateur, … avec leur paramétrage par défaut.

On va bien sûr pouvoir modifier ces vues par défaut : Row limit, vue par défaut, colonnes affichées et leur ordre :

Visual Studio 2012 - Vues 2

 

Par contre… pas de groupes, de filtres, d’ordre ! Peut-être que cela sera ajouté à la version finale… je l’espère en tout cas !

7/ Si ce n’est pas le cas, il nous reste toujours notre bon vieux XML…

Visual Studio 2012 - XML1

 

On retrouve toujours l’IntelliSense pour nous aider sur le schéma et la structure XML :

Visual Studio 2012 - XML2

 

8/ Il nous reste l’onglet “List”. Peut de choses dans cet onglet. Juste la possibilité de renommer l’instance de notre modèle qui sera créé, son URL, sa description et deux paramètres : Affichage dans le quicklaunch & masquer la liste :

Visual Studio 2012 - List

 

9/ Il nous reste la dernière étape, le déploiement. On retrouve pour cela les mêmes menus que dans Visual Studio 2010 : Deploy, Publish, Retract.

Visual Studio 2012 - Deploy

 

Visual Studio 2012 - Deploy

Exactement la même procédure que pour Visual Studio 2010, rien de neuf.

 

Au final, quelques nouveautés, surtout concernant l’assistance de création des listes qui peut être bien pratique et vous faire gagner en productivité. On gardera à l’esprit tout de même qu’une certaine vigilance est requise concernant les noms de modèles, colonnes pour éviter les noms internes à rallonge, avec des caractère encodés. Mais là aussi, rien de nouveau !

 

Pour finir ce billet, je vous propose un petit tour du gestionnaire de features, du panneau de paramètres de la solution et de l’explorateur de serveurs :

 

Le gestionnaire de features reste simple et fonctionnellement similaire au précédent IDE. Mêmes scopes (ça c’est normal Clignement d'œil ), titre, description et association des features :

Visual Studio 2012 - Features

Visual Studio 2012 - Features 2

Visual Studio 2012 - Features 3

 

 

Et pour la configuration de la solution, rien de neuf non plus !

Visual Studio 2012 - Solution 1

Visual Studio 2012 - Solution 2

 

Dans l’explorateur de serveurs :

Visual Studio 2012 - Servers 1

Visual Studio 2012 - Servers 2

 

Dans le prochain billet, nous parlerons toujours des nouveautés de Visual Studio 2012 pour SharePoint, mais à propos des types de contenu et des colonnes de site. Stay Tuned !

SharePoint 2010 & Visual Studio 2012–Step 1–Installation de Visual Studio 2012

Posted on Updated on

Microsoft vient tout juste de publier la Release Candidate (RC) de Visual Studio 2012. Tout comme le précédent opus, cette mouture de notre IDE préféré intègre des outils permettant de développer avec SharePoint 2010.

Bien sûr Microsoft propose, dans cette Release, un ensemble de nouveaux outils destiné à SharePoint et en particulier au développement d’applications, de listes, de types de contenu, etc. Vous trouverez une liste à cette page : http://msdn.microsoft.com/en-us/library/ee290856(v=vs.110).aspx

 

Je vais essayer dans une suite d’article de détailler ces nouvelles intégrations pour SharePoint 2010. Première étape, installer Visual Studio 2012 RC sur un serveur SharePoint tout propre !

 

1/ Télécharger Visual Studio 2012 (VS2012)

Vous trouverez le télécharger à cette page : http://www.microsoft.com/visualstudio/11/fr-fr/downloads

 

2/ Monter l’iso de VS2012

Récupérer l’iso et insérez-le dans le lecteur disque de votre machine SharePoint (dans mon cas, j’ai monté l’iso fourni sur ma machine SharePoint grâce à VMware Workstation 8.0).

 

3/ Démarrer l’installation

Le setup d’installation doit se lancer tout seul (si ce n’est pas le cas, allez dans le poste de travail et double-cliquer sur le CD). Le print-screen de Visual Studio 2012 doit apparaitre :

 

VS2012 - Print-Screen

 

4/ Après quelques secondes, la fenêtre d’installation apparaitra et vous proposera de modifier l’emplacement d’installation (je laisse celui de base) et d’accepter les termes du contrat de licence. Cochez cette checkbox et cliquez sur “Next”

 

VS2012 - Emplacement

 

5/ Dans la fenêtre suivante, nous allons sélectionner les options utiles à notre installation. Pour cela, je décoche “Blend for Visual Studio” et “Microsoft Foundation Classes for C++” et choisi de conserver le reste, en particulier “Microsoft SharePoint Developer Tools”. Cliquez ensuite sur “Install”.

 

VS2010 - Choix des options

 

6/ L’installation des composants se lance :

 

VS2012 - Installation 1

 

VS2012 - Installation 2

 

7/ Fin de l’installation :

 

VS2012 - fin d'installation

 

8/ Il ne nous reste plus qu’à lancer Visual Studio 2012 ! Pour cela “Démarrer > Tous les programmes > Microsoft Visual Studio 2012” :

 

VS2012 - Lancement

 

9/ Choix des paramètres de l’environnement de développement. Pour ma part, je choisis en général “General Development Settings” :

VS2012 - Choix des paramètres

 

Cliquez sur “Start” :

 

VS2012 - waiting

 

10 / Visual Studio 2012 est démarré !

 

VS2012 - Démarrage

 

Jusqu’ici tout va bien. Commençons notre premier projet SharePoint avec Visual Studio 2012 !!!

 

11/ Mon premier projet…

Pour cela, rien de nouveau : File > New > Project

VS2012 - Nouvelle solution

 

12/ La fenêtre de sélection du modèle de projet se lance, on se déplace dans Visual C# > SharePoint > 2010

 

VS2012 - Nouveau projet

 

On note quelques différences avec VS2010 :

  • Le Framework par défaut est le 4.5 alors que SharePoint 2010 utilise le 3.5
  • Les icônes ont changé
  • Seulement 5 modèles de projet à l’heure actuelle

13/ On sélectionne “SharePoint 2010 Project” et on modifie le chemin où seront enregistré les sources (Location). Puis on clique sur “OK”.

 

14/ La fenêtre de sélection du site de debug et du type de solution apparait. Elle ne diffère en rien de celle de Visual Studio 2010 :

 

VS2012 - Type de projet

 

cliquez sur “Finish”.

 

15/ La nouvelle solution est préparée et apparait après quelques secondes dans la nouvelle interface de Visual Studio 2012 :

 

VS2012 - Nouvelle solution

 

En conclusion de cette partie, nous ne voyons que peu de nouveauté jusqu’ici. Mais dans un prochain billet, nous verrons toutes les nouveautés apportées par Visual Studio 2012 pour le développement avec SharePoint 2010 !

101 Samples pour Développer avec SharePoint 2010

Posted on Updated on

Voici un petit “cadeau” que distribue Microsoft par le biais MSDN. 101 Samples pour SharePoint 2010 qui vous permettront par exemple :

  • D’appeler les services WCF de SharePoint
  • De créer des types de contenus, des Timer Jobs, de la taxonomie, etc. par code
  • De mettre en place JQuery dans un site SharePoint
  • De récupérer les minimal masterpages
  • Du REST
  • Du JSON
  • Le modèle objet client javascript (OM Javascript)

Un petit extrait du contenu :

SharePoint 2010 Developing Styled Master Pages
This sample creates and deploys branded master pages to customize SharePoint sites, including custom stylesheets and images.
SharePoint 2010 Developing JQuery-Enabled Web Parts
This sample develops a Web Part that uses the JQuery library to display items from a SharePoint list.
SharePoint Online Accessing Web Services
This sample connects to SharePoint Online, authenticates by using claims authentication, and then displays the contents of a SharePoint Online list.
SharePoint 2010 Creating Custom SharePoint Service Applications
This sample returns the current weekday by using a custom service application for SharePoint.
SharePoint 2010 Developing AJAX-Enabled Web Parts
This sample creates a SharePoint Web Part that uses Ajax UpdatePanel and UpdateProgress controls to call server-side methods.
SharePoint 2010 Developing Sequential Workflows
This sample develops SharePoint sequential workflows based on items in task lists.
SharePoint 2010 Using JavaScript and CAML to Query Lists
This sample uses the SharePoint Client Object Model to display the details of all the items in a SharePoint list.
SharePoint 2010 Developing Custom Navigation Providers
This sample creates and deploys two links to the top link bar on a SharePoint site.
SharePoint 2010 Creating List Items from Silverlight
This sample creates SharePoint list items by calling the SharePoint Client Object Model from Silverlight applications.
SharePoint 2010 Developing Web Templates
This sample creates web templates, which are similar to SharePoint site definitions, but can be used in sandboxed solutions.
SharePoint 2010 Creating Custom Timer Jobs
This sample creates and schedules a SharePoint timer job that runs code at regular intervals.
SharePoint 2010 Creating Custom Field Types
This sample creates a new field type that adds options for users who create new columns in SharePoint lists, libraries, or content types.
SharePoint 2010 Programmatically Reading User Profile Properties
This sample obtains properties from all SharePoint user profiles in your organization.
SharePoint 2010 Developing Workflow Activities
This sample creates and deploys custom workflow activities that can be used in SharePoint Designer to extend workflows.
SharePoint 2010 Using JQuery to Retrieve List Contents in JSON
This sample uses the JQuery library to obtain and display items in SharePoint lists.
SharePoint 2010 Developing Page Layouts
This sample creates and deploys custom page layouts for content types in SharePoint publishing sites.
SharePoint 2010 Displaying Video Files Stored in Azure
This sample displays videos stored in Windows Azure in Silverlight applications.
SharePoint 2010 Creating Document Sets Programmatically
This sample creates new SharePoint document sets and configures their properties.
SharePoint 2010 Developing Event Receivers
This sample develops and registers an event receiver that intercepts SharePoint list item events such as ItemAdded and ItemUpdating.

 

Le téléchargement est bien sûr gratuit et se passe par ici : http://code.msdn.microsoft.com/SharePoint-2010-101-Code-da251182