Dans le cous précédent, nous avons vu comment charger des informations depuis un site SharePoint grâce à la fonction Load et LoadQuery. Bien entendu, il est possible de faire bien plus de choses avec le client object model. Dans ce cours, nous allons développer un petit programme destiné à gérer les listes du site. Nous disons bien "gérer les listes" et non leurs contenus. Effectivement, nous n'aborderons pas les champs ni les éléments dans ce cours, nous ferons cela dans d'autres cours.
Pour illustrer nos propos, nous allons développer une application WPF. Ouvrez donc Visual Basic 2010 et créez un nouveau projet du type WPF Application que nous nommerez AreaProg.WPF.RestManageList :
Une fois ceci fait, cliquez avec le bouton droit de votre souris sur votre projet et choisissez Properties. Changez ensuite le Framework actuel (Target Framework) sur .NET Framework 4.0 et répondez Yes à la boite de dialogue s'affichant. Visual Studio va fermer et ouvrir à nouveau votre projet pour que celui-ci se base sur le bon Framework.
Nous allons maintenant définir l'aspect graphique de notre application. Nous n'allons pas nous étendre sur cette aspect dans ce cours car nous ne sommes pas là pour apprendre le WPF. Voici donc le code résultat de l'interface graphique souhaitée. Copiez/collez le dans le fichier MainWindow.xaml.
Pour les professionnels de WPF, ne vous alarmez pas si vous voyez des aberrations dans ce code. Effectivement, je ne m'y connais pas en WPF, je me base donc sur mes connaissances du WinForm. Cela n'a de toute façon aucune importance dans l'optique de ce cours. Au final, notre application ressemblera à ceci :
Avant de commencer la programmation, nous allons ajouter les références au client object model de SharePoint. Pour cela, cliquez avec le bouton droit de votre souris sur le dossier References de votre projet et choisissez Add Reference. Cliquez alors sur Browse et allez chercher les fichiers C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\Microsoft.SharePoint.Client.dll et C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\Microsoft.SharePoint.Client.Runtime.dll.
Cliquez maintenant avec le bouton droit de votre souris sur le fichier MainWindow.xaml et choisissez View Code. Ajoutez ces deux lignes en dessous des clause using :
Cela nous permettra de créer un alias pour utiliser facilement le client object model. La première chose que nous allons faire est charger les template de liste dans notre liste déroulante au chargement de notre page. Rendez-vous donc dans le contructeur de la fenêtre et tapez ceci en dessous de la ligne InitializeComponent(); :
Cette ligne va définir la propriété ItemsSource de la liste déroulante des types sur le tableau renvoyé par la fonction GetValues de la classe Enum avec comme paramètre l'énumération ListTemplateType. Effectivement, cette énumération va contenir tous les templates de liste disponibles pour la création d'une liste. Pour récupérer ces templates dans une collection "bindable" avec la source d'élément d'une liste déroulante, nous devons utiliser la fonction GetValues de la classe Enum.
Passons maintenant à la récupération de toutes les listes du site. Nous allons isoler ce code dans une méthode car nous devrons récupérer les listes du site à plusieurs endroits de notre code. Tapez donc cette nouvelle méthode :
Nous commençons par ouvrir un contexte vers notre site SharePoint. Ensuite, nous chargeons la collection des listes du site dans l'objet lists. Nous ne récupérons que les propriétés désirées, c'est à dire le titre, la description, le type et le fait qu'elle apparait ou non dans le quick launch. Nous lançons ensuite l'exécution de la requête avant de lier la collection à la liste pour qu'elle l'affiche en se basant sur la propriété Title. Revenez maintenant dans le constructeur de notre fenêtre et ajoutez cette ligne à la fin :
Ainsi, nous chargerons les listes du site au chargement de notre fenêtre.
Nous allons maintenant coder l'événement Click du bouton "Quitter". Revenez donc sur le designer de votre fichier XAML et doublez-cliquez sur le bouton "Quitter". Dans la méthode ainsi créée, tapez simplement le code suivant :
Ce code permet simplement de quitter le programme en cas de click sur le bouton. Revenez maintenant sur le designer de votre application et double cliquez sur le bouton "Effacer". Ce bouton va permettre d'effacer le contenu des contrôles dans le but de créer une nouvelle liste. Pour cela, nous allons créer une fonction car nous devrons effacer le contenu des contrôles à d'autres endroits de notre code. Tapez donc le code suivant comme nouvelle méthode :
Revenez maintenant dans le designer et double-cliquez sur le bouton "Effacer". Dans la méthode générée, appelez la fonction que nous venons de déclarer :
Ici, il n'y a pas de mystère, ce code permet simplement de réinitialiser les contrôles de notre page. Nous allons maintenant taper le code qui permet d'afficher les informations de la liste sélectionnée. Revenez donc sur le designer de votre application et doublez-cliquez sur la liste. La méthode qui se génère sera automatiquement appelée lorsque l'élément sélectionné dans la liste changera. Tapez donc :
La première ligne va permettre d'activer le bouton "Editer" si un élément est sélectionné dans la liste ou de le rendre inactif dans le cas contraire. Nous vérifions ensuite si un élément est bien sélectionné. Effectivement, nous pouvons désélectionner un élément en cliquant dessus avec la touche Ctrl enfoncée. Si un élément est sélectionné, nous récupérons une référence à la liste en castant l'élément sélectionné en un objet du type SP.List. Ensuite, nous initialisons simplement les contrôles pour qu'ils affichent la valeur des propriétés de la liste que nous avons récupérées. Dans le cas où aucun élément n'est pas sélectionné, nous effaçons le contenu des contrôles. Si vous exécutez votre programme maintenant et que vous sélectionnez la liste Galerie de composants WebPart (ou WebPart Gallerie) et vous devriez voir apparaitre ceci :
Nous allons maintenant passer au processus de création d'une nouvelle liste. Revenez donc dans le designer de votre fenêtre, double-cliquez sur le bouton "Créer" et insérez le code suivant dans la méthode générée :
Avant de créer la liste, nous allons devoir vérifier si il n'existe pas déjà une liste portant ce nom. Ici, nous allons faire simple, nous appelons la méthode GetByTitle sur la collection Lists du site Web pour récupérer la liste portant le nom de celle que nous voulons créer. Nous appelons ensuite la méthode ExecuteQuery. Si celle-ci ne renvoie aucune exception, c'est que la liste n'existe pas, dans le cas contraire, nous initialisons la variable list à null. Si cet objet ne vaut pas null, nous affichons un message d'erreur signalant que la liste existe dékà. Dans le cas contraire, nous pouvons entamer le processus de création de la liste.
La technique de création d'une liste est assez simple. Nous devons créer un objet de type ListCreationInformation qui va permettre de contenir quelques propriétés de la liste que nous allons créer. Nous créons donc un objet de ce type avant de modifier ses propriétés par les valeurs que nous aurons insérées dans nos contrôles. Nous appelons ensuite la méthode Add de la collection de liste du site pour créer la liste sur base de notre objet ListCreationInformation (que nous passons en argument). Nous exécutons ensuite la requête grâce à la méthode ExecuteQuery avant d'appeler la fonction LoadLists() pour mettre à jour les listes de la fenêtre et d'afficher une boite de dialogue indiquant que la création s'est déroulée sans erreur.
Passons maintenant à la suppression d'une liste. Revenez donc au designer de votre application et doublez-cliquez sur le bouton "Supprimer la liste sélectionnée" et insérez ce code :
Nous commençons par nous assurer qu'un élément a bien été sélectionné dans le liste, sans quoi, nous ne ferons rien. Dans le cas où un élément à été sélectionné, nous créons un nouveau contexte vers le site et nous effectuons la suppression. Pour faire cela, ce n'est vraiment pas compliqué. Nous utilisons la fonction GetByTitle pour récupérer la référence à la liste que nous voulons supprimer. Le titre de cette liste est le titre de celle sélectionnée dans la liste (de notre programme). Nous castons donc l'élément sélectionné en objet du type SP.List et nous récupérons le titre de cet objet. Enfin, il nous suffit d'appeler la fonction DeleteObject pour effectuer la suppression. Nous exécutons ensuite la requête avant d'appeler la fonction LoadLists pour recharger l'ensemble des listes du site.
Enfin, nous allons programmer le bouton "Editer". Double-cliquez donc sur ce bouton dans le designer et insérez ce code :
Nous commençons par récupérer le contexte de notre site SharePoint. Nous récupérons ensuite la liste grâce au titre de l'élément sélectionné dans la liste de notre programme. Ensuite, nous modifions simplement les propriétés de la liste comme vous le feriez avec l'object model traditionnel. Ici, nous ne modifions pas la propriété BaseTemplate car une fois défini, il est impossible de le modifier. Une fois les modifications terminées, nous appelons la fonction Update pour prendre en compte les modifications et nous exécutons tout cela grâce à la méthode ExecuteQuery. Enfin nous appelons la fonction LoadLists pour charger les listes du site.
Comme vous avez pu le constater tout au long de ce cours, il est très facile de manipuler les listes via le client object model. N'hésitez pas à mettre ce programme à l'épreuve pour voir si tout fonctionne bien. Voici également le lien vers la solution de ce projet : Projet WPF et le client object model.










