287
Ce livre sur SharePoint 2010 s’adresse à des développeurs .NET justifiant d’une expérience en ASP.NET et désireux de personnaliser la plate- forme collaborative qu’est Microsoft SharePoint Server 2010. Le livre détaille le développement des principaux composants et distille les conseils indispensables au déploiement de ceux-ci par le biais de fonctionnalités et de solutions SharePoint. La première partie du livre se focalise sur le développement des composants les plus couramment utilisés tels que les webparts, les colonnes personnelles, les évènements, les pages applicatives et sur la manipulation de données SharePoint via le langage CAML et la nouvelle API Linq. L’accent est également mis sur le modèle objet client, toute nouvelle API SharePoint 2010 permettant d’interagir avec des clients .NET, Silverlight et ECMAScript. Vous découvrirez aussi comment intégrer vos propres services WCF et manipuler REST dans SharePoint. La deuxième partie du livre est consacrée aux divers services et outils intégrés à SharePoint 2010. Parmi ceux-ci, SharePoint Designer, Excel Services, Forms Services, Access Services, Visio Services et Business Connectivity Services. L’interaction entre SharePoint et d’autres technologies telles que Silverlight, jQuery est également présentée. Enfin, les bonnes pratiques de déploiement et les possibilités d’administration via PowerShell clôturent l’ouvrage. Les deux auteurs sont reconnus Microsoft MVP (Most Valuable Professional) sur SharePoint et vous profiterez de leur expérience de terrain au travers des nombreux exemples de codes contenus dans ce livre et disponibles en téléchargement sur www.editions-eni.fr. Les chapitres du livre : Avant-propos - Les pages dans SharePoint - Personnalisation des interfaces SharePoint – Manipuler les données dans SharePoint – Les flux de travail (Workflows) – Administration et déploiement – SharePoint et les services – SharePoint et les autres technologies Ce livre numérique a été conçu et est diffusé dans le respect des droits d’auteur. Toutes les marques citées ont été déposées par leur éditeur respectif. La loi du 11 Mars 1957 n’autorisant aux termes des alinéas 2 et 3 de l’article 41, d’une part, que les “copies ou reproductions strictement réservées à l’usage privé du copiste et non destinées à une utilisation collective, et, d’autre part, que les analyses et les courtes citations dans un but d’exemple et d’illustration, “toute représentation ou reproduction intégrale, ou partielle, faite sans le consentement de l’auteur ou de ses ayants droit ou ayant cause, est illicite(alinéa 1er de l’article 40). Cette représentation ou reproduction, par quelque procédé que ce soit, constituerait donc une contrefaçon sanctionnée par les articles 425 et suivants du Code Pénal. Copyright Editions ENI Ce livre numérique intègre plusieurs mesures de protection dont un marquage lié à votre identifiant visible sur les principales images. SharePoint 2010 Développez en .NET pour personnaliser SharePoint Stéphane EYSKENS Ludovic LEFORT Résumé L'auteur Stephane Eyskens est consultant depuis une douzaine d'années sur diverses technologies et s'est consacré exclusivement à .NET et SharePoint durant ces quatre dernières années en enchaînant les projets dans divers grands groupes. Il est reconnu Microsoft MVP (Most Valuable Professional) sur SharePoint depuis avril 2008. Ludovic Lefort est développeur sur les technologies Microsoft depuis près de dix ans. Actuellement consultant indépendant, ses missions concernent toutes SharePoint. Il a été reconnu Microsoft MVP (Most Valuable Professional) sur SharePoint pour la troisième année consécutive. Les deux auteurs sont très actifs sur les sites communautaires liés à SharePoint et partagent volontiers leurs connaissances lors de sessions techniques. Ce livre est pour eux l’occasion de transmettre aux lecteurs le fruit d’une expérience réelle sur le développement autour de SharePoint. - 1 -

Developpez en .Net Pour Sharepoint

Embed Size (px)

Citation preview

Page 1: Developpez en .Net Pour Sharepoint

Ce livre sur SharePoint 2010 s’adresse à des développeurs .NET justifiant d’une expérience en ASP.NET et désireux de personnaliser la plate-forme collaborative qu’est Microsoft SharePoint Server 2010. Le livre détaille le développement des principaux composants et distille les conseils indispensables au déploiement de ceux-ci par le biais de fonctionnalités et de solutions SharePoint. La première partie du livre se focalise sur le développement des composants les plus couramment utilisés tels que les webparts, les colonnes personnelles, les évènements, les pages applicatives et sur la manipulation de données SharePoint via le langage CAML et la nouvelle API Linq. L’accent est également mis sur le modèle objet client, toute nouvelle API SharePoint 2010 permettant d’interagir avec des clients .NET, Silverlight et ECMAScript. Vous découvrirez aussi comment intégrer vos propres services WCF et manipuler REST dans SharePoint. La deuxième partie du livre est consacrée aux divers services et outils intégrés à SharePoint 2010. Parmi ceux-ci, SharePoint Designer, Excel Services, Forms Services, Access Services, Visio Services et Business Connectivity Services. L’interaction entre SharePoint et d’autres technologies telles que Silverlight, jQuery est également présentée. Enfin, les bonnes pratiques de déploiement et les possibilités d’administration via PowerShell clôturent l’ouvrage. Les deux auteurs sont reconnus Microsoft MVP (Most Valuable Professional) sur SharePoint et vous profiterez de leur expérience de terrain au travers des nombreux exemples de codes contenus dans ce livre et disponibles en téléchargement sur www.editions-eni.fr. Les chapitres du livre : Avant-propos - Les pages dans SharePoint - Personnalisation des interfaces SharePoint – Manipuler les données dans SharePoint – Les flux de travail (Workflows) – Administration et déploiement – SharePoint et les services – SharePoint et les autres technologies

Ce livre numérique a été conçu et est diffusé dans le respect des droits d’auteur. Toutes les marques citées ont été déposées par leur éditeur respectif. La loi du 11 Mars 1957 n’autorisant aux termes des alinéas 2 et 3 de l’article 41, d’une part, que les “copies ou reproductions strictement réservées à l’usage privé du copiste et non destinées à une utilisation collective”, et, d’autre part, que les analyses et les courtes citations dans un but d’exemple et d’illustration, “toute représentation ou reproduction intégrale, ou partielle, faite sans le consentement de l’auteur ou de ses ayants droit ou ayant cause, est illicite” (alinéa 1er de l’article 40). Cette représentation ou reproduction, par quelque procédé que ce soit, constituerait donc une contrefaçon sanctionnée par les articles 425 et suivants du Code Pénal. Copyright Editions ENI

Ce livre numérique intègre plusieurs mesures de protection dont un marquage lié à votre identifiant visible sur les principales images.

SharePoint 2010 Développez en .NET pour personnaliser SharePoint

Stéphane EYSKENS ­ Ludovic LEFORT

Résumé

L'auteur

Stephane Eyskens est consultant depuis une douzaine d'années sur diverses technologies et s'est consacré exclusivement à .NET et SharePoint durant ces quatre dernières années en enchaînant les projets dans divers grands groupes. Il est reconnu Microsoft MVP (Most Valuable Professional) sur SharePoint depuis avril 2008. Ludovic Lefort est développeur sur les technologies Microsoft depuis près de dix ans. Actuellement consultant indépendant, ses missions concernent toutes SharePoint. Il a été reconnu Microsoft MVP (Most Valuable Professional) sur SharePoint pour la troisième année consécutive. Les deux auteurs sont très actifs sur les sites communautaires liés à SharePoint et partagent volontiers leurs connaissances lors de sessions techniques. Ce livre est pour eux l’occasion de transmettre aux lecteurs le fruit d’une expérience réelle sur le développement autour de SharePoint.

- 1 -

Page 2: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 3: Developpez en .Net Pour Sharepoint
Page 4: Developpez en .Net Pour Sharepoint
Page 5: Developpez en .Net Pour Sharepoint
Page 6: Developpez en .Net Pour Sharepoint
Page 7: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 8: Developpez en .Net Pour Sharepoint

Openmirrors.com

Openmirrors.com

Page 9: Developpez en .Net Pour Sharepoint

Openmirrors.com

Openmirrors.com

Page 10: Developpez en .Net Pour Sharepoint
Page 11: Developpez en .Net Pour Sharepoint
Page 12: Developpez en .Net Pour Sharepoint
Page 13: Developpez en .Net Pour Sharepoint
Page 14: Developpez en .Net Pour Sharepoint
Page 15: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 16: Developpez en .Net Pour Sharepoint
Page 17: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 18: Developpez en .Net Pour Sharepoint
Page 19: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 20: Developpez en .Net Pour Sharepoint
Page 21: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 22: Developpez en .Net Pour Sharepoint
Page 23: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 24: Developpez en .Net Pour Sharepoint
Page 25: Developpez en .Net Pour Sharepoint

Écran de test :

Cet outil peut s’avérer très pratique. D’une part car il vous permet de construire vos requêtes via un assistant graphique et, d’autre part, car il offre la possibilité de se connecter au serveur SharePoint par les services web. Cela signifie que vous pouvez l’utiliser sur n’importe quel client Windows se trouvant en dehors de la ferme sur laquelle vous travaillez.

Vous pouvez le trouver sur le site de U2U à l’adresse http://www.u2u.info.

Notez qu’au moment de la rédaction de ce livre, cet outil ne prend pas encore en charge les jointures ni les projected fields. Cependant, on peut raisonnablement espérer une mise à jour.

- 24 -

Openmirrors.com

Page 26: Developpez en .Net Pour Sharepoint
Page 27: Developpez en .Net Pour Sharepoint

Openmirrors.comOpenmirrors.com

Openmirrors.com

Page 28: Developpez en .Net Pour Sharepoint

Openmirrors.com

Openmirrors.com

Page 29: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 30: Developpez en .Net Pour Sharepoint
Page 31: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 32: Developpez en .Net Pour Sharepoint
Page 33: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 34: Developpez en .Net Pour Sharepoint
Page 35: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 36: Developpez en .Net Pour Sharepoint
Page 37: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 38: Developpez en .Net Pour Sharepoint
Page 39: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 40: Developpez en .Net Pour Sharepoint
Page 41: Developpez en .Net Pour Sharepoint

quasiment incontournable avec SharePoint 2007.

Par contre, SPLINQ étant une couche d’abstraction supplémentaire générant elle­même du CAML, ceci induit forcément une légère dégradation des performances. Le temps d’exécution des composants sera toujours plus rapide si ceux­ci génèrent directement le CAML.

Le gain en termes de développement est par contre énorme Il est en effet à la fois plus facile et plus rapide de travailler avec SPLINQ que de travailler en CAML.

- 16 -

Openmirrors.com

Page 42: Developpez en .Net Pour Sharepoint

Le modèle objet client

Les objectifs de cette section sont les suivants :

Comprendre la notion de client/serveur.

Apprendre à développer des applications Silverlight, .NET et JavaScript qui utilisent le modèle objet client de SharePoint 2010.

1. Introduction

Le modèle objet client est un nouvel ensemble d’API destinées à faciliter la communication entre SharePoint 2010 et les applicatifs clients.

Avec SharePoint 2007, les applicatifs clients purs devaient gérer eux mêmes la communication avec les services web exposés par SharePoint, notamment lists.asmx.

Ce nouveau modèle objet communique automatiquement et de manière transparente avec ceux­ci.

En outre, tout est conçu pour minimiser la quantité de données transportées sur le réseau, le nombre d’appels (allers/retours) entre le client et le serveur. Avec cette nouveauté, Microsoft facilite grandement l’arrivée de clients riches

Des API spécifiques existent pour Silverlight, .NET et l’ECMAScript qui est en fait constitué d’un framework JavaScript.

Afin de garantir une certaine cohérence entre ces API, Microsoft a fait en sorte de minimiser les différences entre celles­ci, notamment en utilisant une nomenclature similaire et une mécanique commune pour charger, initialiser les objets et envoyer les requêtes à SharePoint.

2. Le client ECMAScript

a. Particularités du client ECMAScript

Le client ECMAScript est constitué d’un framework JavaScript délivré par SharePoint 2010 et permettant aux divers composants web hébergés sur les WFE de bénéficier d’une API riche et parfaitement intégrée à SharePoint.

L’interaction entre l’API cliente et le back­end SharePoint se fait via une communication asynchrone, c’est­à­dire un appel côté client en spécifiant au serveur une méthode de callback qui doit être appelée lorsque le serveur a traité la requête.

Le modèle objet client ECMAScript ne peut être utilisé que par des composants hébergés dans la ferme SharePoint. En effet, pour éviter les problèmes de « cross site scripting », Microsoft a fait en sorte d’interdire l’utilisation de l’ECMAScript via des applicatifs extérieurs à la ferme.

Le schéma suivant symbolise la communication entre SharePoint et le client ECMAScript :

b. Operations CRUD (Create Read Update Delete) via ECMAScript

- 1 -

Page 43: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 44: Developpez en .Net Pour Sharepoint
Page 45: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 46: Developpez en .Net Pour Sharepoint
Page 47: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 48: Developpez en .Net Pour Sharepoint
Page 49: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 50: Developpez en .Net Pour Sharepoint
Page 51: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 52: Developpez en .Net Pour Sharepoint
Page 53: Developpez en .Net Pour Sharepoint

Openmirrors.comOpenmirrors.com

Page 54: Developpez en .Net Pour Sharepoint

Openmirrors.com

Openmirrors.com

Page 55: Developpez en .Net Pour Sharepoint

List<Client> ListeClients = new List<Client>(); Client ClientSelectionne = null; public MainPage() InitializeComponent(); ChargerClients(); //Cette méthode charge les clients dans la liste de gauche private void ChargerClients() if (Contexte == null) Contexte = new ClientContext("http://intranet/sites/clients"); ClientsSp = Contexte.Web.Lists.GetByTitle( "Clients").GetItems(CamlQuery.CreateAllItemsQuery()); Contexte.Load(ClientsSp, Client => Client.Include( c => c.Id, c => c["Title"], c => c["Ville"])); Contexte.ExecuteQueryAsync(RemplirListeClients, ProblemeExecution); //méthode de callback appelée en cas de problème private void ProblemeExecution(object sender, ClientRequestFailedEventArgs e) this.Dispatcher.BeginInvoke(() => MessageBox.Show(e.Exception.Message); ); //méthode de callback appelée si exécution ok private void RemplirListeClients(object sender,ClientRequestSucceededEventArgs e) this.Dispatcher.BeginInvoke(() => foreach (ListItem Cli in ClientsSp) Client NouveauClient = new Client(); NouveauClient.id = Cli.Id; NouveauClient.PhotoClient = "http://intranet/sites/clients/Photos/ContosoLogo2.jpg"; NouveauClient.NomClient = Cli["Title"] as string; FieldLookupValue VilleClient = Cli["Ville"] as FieldLookupValue; if (VilleClient != null) NouveauClient.AdresseClient = VilleClient.LookupValue; ListeClients.Add(NouveauClient); Clients.ItemsSource = ListeClients; ); //méthode appelée pour supprimer un client private void SupprimerClient(int id) ListItem ClientCible = ClientsSp.GetById(id); if (ClientCible != null) ClientCible.DeleteObject(); Contexte.ExecuteQueryAsync(ClientSupprime, ProblemeExecution);

- 14 -

Openmirrors.com

Page 56: Developpez en .Net Pour Sharepoint
Page 57: Developpez en .Net Pour Sharepoint

L’accès aux données via REST

1. Introduction

La méthodologie REST (Representational State Transfer) est désormais complètement intégrée nativement dans SharePoint 2010.

Pour rappel, REST n’est pas un protocole mais bien une méthodologie qui revient aux fondements du protocole HTTP.

En effet, l’objectif de REST est principalement de supporter un grand nombre de requêtes entrantes et d’offrir une architecture SOA (Architecture Orientée Services) robuste. Ce besoin de supporter la charge est le fondement principal du protocole HTTP.

Celui­ci est en réalité très simple et est stateless par défaut, ce qui signifie qu’aucune persistance de donnée n’est prévue entre requêtes. Cette non­gestion de l’état des données entre les différentes requêtes HTTP avait justement pour but de minimiser la charge supportée par les serveurs web.

Les applications web, devenant de plus en plus nombreuses et de plus en plus exigeantes, ont provoqué l’apparition de nouveaux protocoles tels que SOAP (Simple Object Access Protocol) et des mécanismes de gestion d’état tels que les sessions, le cache serveur, etc.

REST revient aux fondamentaux, à savoir l’exploitation du protocole HTTP « nu ». En effet, seuls les verbes de base tels que POST, GET, PUT, DELETE, MERGE… sont utilisés. À l’inverse de SOAP, aucune enveloppe supplémentaire n’est utilisée pour transporter les données.

Par ailleurs, REST permet également de rendre l’URL plus « significative » dans la mesure où celle­ci ne doit pas forcément pointer vers une ressource physique existante. Au contraire, chaque partie d’URL peut­être considérée comme une variable, ce qui permet de raccourcir la longueur des URL et de les rendre plus intuitives.

La méthodologie REST devenant de plus en plus à la mode, il était important de l’intégrer correctement à SharePoint. Il s’agissait surtout d’utiliser les capacités du framework 3.5 car WCF exposait déjà des API REST spécifiques.

2. Intégration de WCF et de REST dans SharePoint 2010

Nativement, WCF était totalement exclu de SharePoint 2007. Il était bien sûr possible de l’intégrer mais au prix de nombreux efforts Désormais, WCF est automatiquement intégré dans SharePoint 2010 sans qu aucune étape de configuration préalable ne soit requise.

Les services web de SharePoint sont développés en WCF. Les services .asmx sont toujours présents mais principalement pour assurer une compatibilité arrière.

L’intégration de WCF se matérialise de la manière suivante :

- 1 -

Openmirrors.com

Page 58: Developpez en .Net Pour Sharepoint

À savoir, le déploiement des fichiers .svc au niveau du dossier 14\ISAPI, des DLL dans la GAC et la configuration déjà réalisée du serveur IIS et des web.config liés aux applications SharePoint.

En SharePoint 2007, il fallait prendre en charge la modification des web config et la configuration IIS avant de pouvoir intégrer des composants WCF au sein de SharePoint.

SharePoint expose les services WCF suivants :

Certains sont plutôt prévus pour être utilisés par SharePoint lui­même et d’autres, tels que ListData.svc, sont clairement destinés à être utilisés par diverses applications

Dans cette section, nous nous préoccuperons de ListData.svc, le successeur de Lists.asmx qui nous permet d’effectuer des requêtes REST.

3. Syntaxe des requêtes REST

En travaillant toujours avec notre site de clients, nous allons tout simplement pointer vers le service ListData.svc qui est accessible via le mappage virtuel _vti_bin/ListData.svc, c’est­à­dire le même emplacement pour tous les services web.

- 2 -

Page 59: Developpez en .Net Pour Sharepoint

En ouvrant le navigateur et allant sur notre site, nous devrions obtenir ceci :

C’est­à­dire la liste des objets faisant partie de la structure du site. En l’occurrence, les différentes galeries, la liste de clients, etc.

Donc l’URL du site cible suivie de _vti_bin/ListData.svc retourne la description XML de la structure du site en question.

Là où, avec Lists.asmx, il fallait appeler une WebMethod du service en lui passant un flux XML en paramètre décrivant ce que l’on souhaitait récupérer, il est beaucoup plus aisé d’obtenir le même type de résultat avec ListData.svc. En effet, en ajoutant simplement Pays dans l’URL :

http://intranet/sites/clients/_vti_bin/ListData.svc/Pays

- 3 -

Openmirrors.com

Page 60: Developpez en .Net Pour Sharepoint

Le service retourne la liste des pays contenus dans la liste Pays. Nous n’avons donc rien dû fournir comme paramètre supplémentaire.

C’est là que la magie REST commence à faire effet. Par exemple, pour récupérer seulement le pays dont l’ID est 4, comme illustré par l’image ci­dessus, on peut tout simplement saisir l’URL :

http://intranet/sites/clients/_vti_bin/ListData.svc/Pays(4)

La syntaxe de base se résume donc comme ceci :

http://<site cible>/_vti_bin/ListData.svc/<Nom Liste>(ID)

a. Filtres additionnels

Bien sûr, bien que cette syntaxe soit très facile d’utilisation, elle n’est pas suffisante pour pouvoir effectuer des requêtes plus complexes

Un certain nombre de paramètres additionnels peuvent être ajoutés à l’URL pour spécifier des critères de filtres additionnels. Ceux­ci sont :

$filter permet d’ajouter une ou plusieurs conditions.

$expand permet de récupérer des métadonnées provenant d’autres listes, c’est similaire aux Projected Fields de CAML vus précédemment.

$orderby permet de spécifier un ordre de tri.

$skip permet de supprimer les n premiers éléments retournés.

$top permet de ne conserver que les n premiers éléments retournés

$select permet de spécifier les colonnes à inclure.

En saisissant l’URL suivante :

http://intranet/sites/clients/_vti_bin/ListData.svc/Pays?$filter= Title eq ‘Client 1’

On récupère la liste des clients dont la colonne Titre est égale à la valeur Client 1. On peut également combiner les critères :

http://intranet/sites/clients/_vti_bin/ListData.svc/Pays?$filter =((Title eq ‘Client 1’) and (Age eq 34)) or (Titre eq ‘Client 2’)

On peut donc combiner des conditions avec des opérateurs logiques et utiliser des parenthèses pour établir des priorités.

Les possibilités sont quasiment infinies. En plus du paramètre $filter, il est possible d’utiliser les autres paramètres comme, par exemple, $expand.

$expand permet de spécifier que l’on souhaite inclure des données liées aux données ciblées par la requête. Par exemple, si l’on souhaite récupérer le client 1 et afficher son nom plus le nom de la ville et sa description :

.../_vti_bin/ListData.svc/Pays?$filter=Title eq ‘Client 1’&$expand=Ville&$select=Ville/Titre,Ville/Description

Il faut fournir à $expand le nom de la colonne de recherche qui pointe vers la liste des villes, en l’occurrence, Ville.

Le paramètre $select permet de spécifier les colonnes à inclure. On peut même enchaîner les projections :

/ vti bin/ListData svc/Pays?$filter Title eq ‘Client 1’&$expand=Ville,Ville/Pays&$select=Ville/Titre,Ville/Description ,Ville/Pays/Titre

Où Ville/Pays représente la chaîne suivante :

- 4 -

Page 61: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 62: Developpez en .Net Pour Sharepoint
Page 63: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 64: Developpez en .Net Pour Sharepoint
Page 65: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 66: Developpez en .Net Pour Sharepoint
Page 67: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 68: Developpez en .Net Pour Sharepoint
Page 69: Developpez en .Net Pour Sharepoint

public class RestWCFService : RestWCFInterface public InfoDocument LireInfoDocument(string NomListe, string DocumentId) int IdElement = 0; InfoDocument RetourMetadonnes = null; WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK; SPList ListeCible = null; try ListeCible = SPContext.Current.Web.Lists[NomListe]; catch try ListeCible = SPContext.Current.Web.Lists[new Guid(NomListe)]; catch WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.NotFound; return null; try IdElement = Convert.ToInt16(DocumentId); SPListItem ElementCible = ListeCible.GetItemById(IdElement); string ChampTitre = ListeCible.Fields.GetFieldByInternalName("Title").Title; string ChampTaille = ListeCible.Fields.GetFieldByInternalName("File_x0020_Size").Title ; string ChampDateCreation = ListeCible.Fields.GetFieldByInternalName("Created").Title; string ChampDateModification = ListeCible.Fields.GetFieldByInternalName("Last_x0020_Modified").T itle; string ChampUrl = ListeCible.Fields.GetFieldByInternalName("EncodedAbsUrl").Title; string ChampVersion = ListeCible.Fields.GetFieldByInternalName("_UIVersionString").Titl e; RetourMetadonnes = new InfoDocument(); RetourMetadonnes.Taille = (ElementCible[ChampTaille] != null) ? ElementCible[ChampTaille].ToString() : ""; RetourMetadonnes.Titre = (ElementCible[ChampTitre] != null) ? ElementCible[ChampTitre].ToString() : ""; RetourMetadonnes.Cree = (ElementCible[ChampDateCreation] != null) ? ElementCible[ChampDateCreation].ToString() : ""; RetourMetadonnes.Modifie = (ElementCible[ChampDateModification] != null) ? ElementCible[ChampDateModification].ToString() : ""; RetourMetadonnes.Url = (ElementCible[ChampUrl] != null) ? ElementCible[ChampUrl].ToString() : ""; RetourMetadonnes.Version = (ElementCible[ChampVersion] != null) ? ElementCible[ChampVersion].ToString() : ""; catch (ArgumentException)

- 13 -

Openmirrors.com

Page 70: Developpez en .Net Pour Sharepoint
Page 71: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 72: Developpez en .Net Pour Sharepoint

Conclusion

L’accès aux données est grandement facilité dans SharePoint 2010, que ce soit pour les applicatifs clients ou serveurs.

Là où, en 2007, il fallait impérativement maîtriser le CAML, en 2010, ce n’est plus un passage obligé même si cela reste préférable. Le modèle objet client est certainement l’une des grandes évolutions car SharePoint lui­même est basé dessus et les interfaces sont à présent très réactives et très confortables à utiliser.

Nul doute que des applicatifs clients de tous types (SilverLight notamment) viendront se greffer sur le colosse SharePoint dans les mois et années à venir.

- 1 -

Page 73: Developpez en .Net Pour Sharepoint

Introduction

Dans ce chapitre nous allons aborder ensemble en quelques paragraphes les nouveautés apportées par SharePoint 2010 en ce qui concerne le flux de travail (ou workflows en anglais).

Pour commencer, nous allons définir ce qu’est un flux de travail. Un flux de travail est un ensemble d’actions séquentielles (flux de travail séquentiel) ou non (flux de travail à états).

Le flux de travail est un élément central dans l’architecture de SharePoint. Dans cette nouvelle version de la plate­forme collaborative, les outils de création de flux de travail ont été fortement améliorés. Nous verrons cela plus en détail dans la suite de ce chapitre.

1. Les types de flux de travail

Dans cette version de SharePoint, les flux de travail peuvent être regroupés en trois catégories : les flux de travail de liste, les flux de travail réutilisables et les flux de travail de site Les flux de travail de site n étaient pas présents dans la version 2007 de SharePoint.

a. Les flux de travail de liste

Le flux de travail de liste est le type le plus simple. Il est associé à une liste bien précise et n’est utilisable que pour les éléments de cette même liste. Etant donné que la liste cible doit être spécifiée dès la création du flux de travail, vous pouvez à l’intérieur de celui­ci accéder à tous les champs de la liste. Ce type de flux de travail est pratique de par sa simplicité de création mais atteint relativement vite ses limites par manque de flexibilité.

b. Les flux de travail réutilisables

Contrairement aux flux de travail de liste, les flux de travail réutilisables sont associés avec un type de contenu (ou content type en anglais) et non plus avec une liste précise. Cela leur procure une flexibilité beaucoup plus grande. En effet, un content type peut être associé avec une ou plusieurs listes et ce de manière complètement dynamique. Il n’est plus nécessaire de connaître la cible du flux de travail dès sa création.

Lors de la création de ce type de flux de travail, il vous est demandé de choisir un type de contenu cible et, comme pour la liste, cela signifie que tous les champs de ce type de contenu seront disponibles à l’intérieur du flux de travail.

La flexibilité de ce type de flux de travail va encore plus loin. En effet vous pourriez penser qu’il est donc nécessaire de créer un type de contenu particulier avec toutes les colonnes nécessaires à votre flux de travail. Cela aurait pour effet de rendre votre flux de travail utilisable uniquement pour ce type de contenu et pour ses enfants En réalité ce n’est pas le cas. Vous pouvez développer un flux de travail sur le type de contenu « élément » car il est le parent de tout autre type de contenu de SharePoint. Parfait dans l’idée, mais vous voilà limité aux champs du content type « élément », autrement dit la colonne titre et quelques autres colonnes système.

C’est là qu’intervient la notion de colonnes d’association. Il s’agit de colonnes que vous allez définir à l’intérieur de votre flux de travail Ces colonnes seront automatiquement ajoutées à l intérieur de la liste avec laquelle votre flux de travail sera associé. De cette manière, vous garantissez à votre flux de travail l’existence des colonnes dont il a besoin, quel que soit l’endroit où il sera utilisé. Sympathique, non ?

c. Les flux de travail de site

Grande nouveauté de SharePoint 2010. Jusqu’à présent un flux de travail ne pouvait être démarré qu’à partir d’un élément de liste. Cela n’est plus vrai grâce au flux de travail de site.

Comme leur nom l’indique, les flux de travail de site sont associés avec un site dans SharePoint. Un exemple fréquemment rencontré est la demande d’appréciation d’un site. Vous souhaitez donc permettre au visiteur d’un site de vous donner ses commentaires sur celui­ci. Dans ce cas, vous n’avez aucunement besoin d’une liste ou d’un élément dans cette liste. Le flux de travail devra simplement poser quelques questions via un formulaire et vous l’envoyer par mail. Voici un exemple concret où l’utilisation des flux de travail de site est bien pratique.

- 1 -

Openmirrors.com

Page 74: Developpez en .Net Pour Sharepoint

Les flux de travail en mode déclaratif

1. Présentation de SharePoint Designer 2010

Dans cette section vous allez découvrir quelques­unes des nouveautés apportées par SharePoint Designer 2010 en termes de création de flux de travail.

La première chose que vous allez remarquer est son changement de look. En effet l’interface utilisateur a été complètement revue et améliorée. Comme tous les autres produits, SharePoint Designer intègre désormais le ruban Office afin de rendre son utilisation la plus intuitive possible.

Fini le temps des fenêtres s’ouvrant en cascade pour la conception des flux de travail. Cette fois la construction des flux de travail est complètement intégrée dans l’interface de SharePoint Designer.

Parmi les nouvelles actions qui ont été ajoutées à SharePoint Designer, vous apprécierez particulièrement celle permettant l’impersonalisation. Il est maintenant possible de faire tourner un flux de travail sur le compte de l’auteur Workflow.

Une autre amélioration appréciable est le fait de pouvoir choisir la manière dont on utilise le contenu d’un champ de type personne. Lorsque vous utilisez ce type de champ de votre flux de travail, vous pouvez définir la manière dont sa valeur sera retournée :

- 1 -

Page 75: Developpez en .Net Pour Sharepoint

SharePoint Designer intègre également un concepteur de tâche permettant de créer des tâches personnalisées complètement paramétrables.

Ce Designer vous permet également de définir des opérations qui s’exécuteront suivant le statut de la tâche.

- 2 -

Openmirrors.com

Page 76: Developpez en .Net Pour Sharepoint

Pour terminer cette introduction, vous pouvez également noter que contrairement à la version précédente du produit, cette fois les administrateurs de collection de sites peuvent très simplement définir si les utilisateurs finaux peuvent ou non utiliser SharePoint Designer :

2. Création d’un premier flux de travail

Commençons par un flux de travail le plus simple possible afin de se familiariser avec la nouvelle interface graphique de SharePoint Designer.

Ce flux de travail va simplement envoyer un courrier électronique vers le créateur d’un nouvel élément dans une liste.

Pour cela nous avons un site avec une liste personnalisée que nous appellerons DemoWF.

Commençons par créer un nouveau flux de travail sur cette liste. Pour cela, cliquez sur Flux de travail, créez un nouveau flux de travail de liste et choisissez la liste DemoWF.

- 3 -

Page 77: Developpez en .Net Pour Sharepoint

Choisissez un nom pour votre nouveau flux de travail.

Vous voici à présent face à l’interface de création du flux de travail.

Une seule action sera nécessaire : l’envoi de courrier électronique.

Pour ajouter une action sur le flux de travail, deux possibilités s’offrent à vous : soit en tapant le début du nom de l’action :

- 4 -

Openmirrors.com

Page 78: Developpez en .Net Pour Sharepoint

Soit en utilisant le ruban Office

Ajoutez et configurez l’action Envoyer un courrier électronique :

- 5 -

Page 79: Developpez en .Net Pour Sharepoint

Notez qu’il est possible d’ajouter des éléments dynamiques comme par exemple dans ce cas :

Le nom complet de la personne ayant créé l élément dans la liste

Le titre de l’élément.

Un lien vers le statut actuel du flux de travail.

Énormément d’autres informations peuvent être ajoutées au mail, vous les découvrirez par vous­même au fur et à mesure que vous utiliserez SharePoint Designer.

Dans les paramètres du flux de travail, modifiez ses options de démarrage pour qu’il démarre automatiquement lors de la création d’un nouvel élément dans la liste :

Publiez ensuite le flux de travail.

- 6 -

Openmirrors.com

Page 80: Developpez en .Net Pour Sharepoint

Voilà, votre flux de travail est maintenant actif. Créez un nouvel élément dans votre liste de test pour le tester.

Pour que les flux de travail puissent envoyer des courriers électroniques, il faut que la configuration des « mails sortants » soit correcte au niveau de votre ferme.

3. Réutilisation d’un flux de travail existant

Une autre des nouvelles fonctionnalités de SharePoint Designer 2010 est le fait de pouvoir réutiliser un flux de travail déjà existant comme point de départ d’un nouveau flux de travail. Il peut s’agir aussi bien d’un flux de travail que vous avez créé comme d’un flux de travail fourni avec SharePoint 2010.

Il ne s’agit pas d’héritage mais juste d’une copie. Si vous modifiez le flux de travail source, les nouveaux flux de travail ne seront pas impactés par ce changement.

Les flux de travail réutilisables peuvent être copiés.

Copiez et modifiez, par exemple, le flux de travail d’approbation fourni avec SharePoint.

Vous serez invité à choisir un nom pour votre nouveau flux de travail :

- 7 -

Page 81: Developpez en .Net Pour Sharepoint

Vous êtes à présent en mesure de créer votre propre version du flux de travail d’approbation de SharePoint 2010.

4. Les flux de travail réutilisables et les colonnes d’association

Dans SharePoint 2010 vous pouvez créer des flux de travail qui ne sont pas attachés à une liste précise mais plutôt à un type de contenu

Cela permet de développer des flux de travail qui pourront être attachés à une ou plusieurs listes.

Pour ce qui est du développement, la différence majeure réside dans le fait que vous ne connaissez pas la liste des champs qui seront disponibles lors de l’exécution du flux de travail.

Admettons que vous souhaitiez développer un flux de travail qui pourra être attaché à n’importe quelle liste d’un site, quelle que soit sa structure Le problème est que dans ce cas vous n aurez accès qu au champ commun à tous les types de contenu : Titre.

- 8 -

Openmirrors.com

Page 82: Developpez en .Net Pour Sharepoint

Heureusement, une solution existe pour définir des champs au niveau du flux de travail et pour que ces champs soient automatiquement ajoutés à la liste sur laquelle le flux de travail sera attaché. Il s’agit des colonnes d’association.

Retournez dans SharePoint Designer et créez un nouveau flux de travail (mais, cette fois, un flux de travail réutilisable).

Entrez un nom et choisissez Tous comme type de contenu :

À présent, définissez deux colonnes d’association :

Date début (Type date, obligatoire)

Date Fin (Type date, obligatoire)

- 9 -

Page 83: Developpez en .Net Pour Sharepoint

Ajoutez ensuite une action envoyant simplement un mail au créateur de l’élément avec les deux dates définies.

Ces deux colonnes seront donc automatiquement créées lors de l’association du flux de travail. Pour le tester, publiez votre flux de travail dans SharePoint

Retournez dans votre liste de test sur votre site et ajoutez un nouveau flux de travail à cette liste :

- 10 -

Openmirrors.com

Page 84: Developpez en .Net Pour Sharepoint

Choisissez le flux de travail que vous venez de créer et associez­le à votre liste :

À présent, créez un nouvel élément dans votre liste. Vous pouvez remarquer que vos deux colonnes ont été ajoutées à la liste

5. Les paramètres de formulaire d’initiation

Il est possible au flux de travail de récupérer des données entrées par l’utilisateur et de les stocker. Ces données ne sont pas stockées dans la liste comme pour les colonnes d’association mais dans le flux de travail lui­même.

Prenons l exemple suivant nous souhaitons modifier le flux de travail créé précédemment afin qu il récupère un commentaire de la part de l’utilisateur lors du démarrage du flux de travail. Autrement dit, lorsque l’utilisateur décidera de démarrer le flux de travail il sera envoyé devant un formulaire lui demandant de laisser un commentaire.

Modifiez votre flux de travail dans SharePoint Designer afin de lui ajouter un paramètre de formulaire d’initiation

Ce paramètre sera de type plusieurs lignes de texte et s’appellera tout simplement Commentaire.

- 11 -

Openmirrors.com

Page 85: Developpez en .Net Pour Sharepoint

Publiez à nouveau votre flux de travail et démarrez­le sur un élément de votre liste. Vous serez invité à définir une valeur pour votre paramètre.

6. Modifier les formulaires de flux de travail avec InfoPath 2010

Tous les formulaires de flux de travail dans SharePoint 2010 sont des formulaires InfoPath. Que l’on parte d’un formulaire d’initiation ou d’un formulaire de tâches, il s’agit toujours d’un formulaire pouvant être modifié avec InfoPath 2010.

La page des propriétés des flux de travail contient une section formulaires listant tous les formulaires utilisés par le flux de travail. Dans notre cas, nous retrouvons le formulaire permettant d’entrer un commentaire lors du démarrage.

Pour le modifier, il suffit de cliquer sur son nom. Il sera automatiquement ouvert en mode design dans InfoPath.

- 12 -

Openmirrors.com

Page 86: Developpez en .Net Pour Sharepoint

Effectuez quelques modifications de style et renvoyez­le vers le flux de travail à l’aide du bouton publication rapide d’InfoPath.

Et voilà, un vrai jeu d’enfant ! Démarrez une nouvelle instance de votre flux de travail pour tester votre nouveau formulaire.

Pour en savoir plus sur la personnalisation de formulaires avec InfoPath 2010, reportez­vous à la section consacrée à InfoPath et Form Services du chapitre SharePoint et les services de ce livre.

7. Import/Export de flux de travail depuis SharePoint Designer 2010

Trois outils permettent la création de flux de travail dans SharePoint 2010 :

SharePoint 2010

- 13 -

Openmirrors.com

Openmirrors.com

Page 87: Developpez en .Net Pour Sharepoint

Visio 2010

Visual Studio 2010

SharePoint Designer se situe entre les deux autres outils.

Un analyste peut par exemple définir un nouveau flux de travail dans Visio 2010 à l’aide du nouveau modèle fourni d’origine. Ensuite il peut exporter ce prototype et le fournir à un développeur qui pourra l’importer dans SharePoint Designer afin de le compléter.

Ensuite les flux de travail réutilisables de SharePoint Designer peuvent être sauvés comme templates. Cela signifie qu’ils seront compactés dans un fichier WSP et sauvés dans la liste élément de site présente dans votre site SharePoint. Ensuite vous devez télécharger ce fichier WSP localement et l’importer dans Visual Studio. Pour cela Visual Studio contient un template de projet appelé Import reusable flux de travail.

- 14 -

Openmirrors.com

Page 88: Developpez en .Net Pour Sharepoint

Les flux de travail dans Visual Studio 2010

1. Création d’un flux de travail de liste.

Pour illustrer la création d’un flux de travail de liste depuis Visual Studio nous allons utiliser un exemple simple. Notre flux de travail démarrera à chaque modification d’un élément dans une liste et créera une tâche demandant à la personne assignée de revoir l’élément. Le flux de travail se terminera lorsque cette tâche sera terminée et un mail sera envoyé à la personne ayant modifié l’élément.

Créez un nouveau projet dans Visual Studio 2010 de type Sequential Workflow.

Entrez l’URL de votre site et choisissez List workflow comme type de flux de travail.

Les flux de travail ne peuvent pas être déployés dans une sandboxed solution.

Décidez d’associer directement votre flux de travail avec votre liste de test. Cela facilitera votre débogage.

- 1 -© ENI Editions - All rigths reserved - Openmirrors.com

Page 89: Developpez en .Net Pour Sharepoint

Pour terminer, définissez que le flux de travail devra démarrer à chaque fois qu’un élément de la liste est modifié.

Vous voici à présent dans votre nouveau projet face au flux de travail. Commencez par déposer quelques éléments sur le plan de travail comme ceci

- 2 - © ENI Editions - All rigths reserved - Openmirrors.com

Openmirrors.com

Page 90: Developpez en .Net Pour Sharepoint

Pour résumer, vous devez ajouter les actions suivantes :

logToHistoryListActivity

createTask

whileActivity

onTaskChanged

Configurez les actions comme ceci :

LogToHistoryListActivity1

La seule propriété à définir est HistoryDescription, il s’agit du texte qui sera ajouté à l’historique du flux de travail et qui sera visible dans la page de statut du flux de travail.

createTask1

- 3 -© ENI Editions - All rigths reserved - Openmirrors.com

Page 91: Developpez en .Net Pour Sharepoint

Il s’agit de l’activité qui va créer une nouvelle tâche pour une personne qui sera en charge de vérifier l’élément modifié.

Assignez la propriété CorrelationToken avec la valeur taskToken.

Le CorrelationToken permet dans ce cas de s’assurer que lors de l’exécution du flux de travail, la tâche concernée par l’action onTaskChanged sera bien celle créée par l’activité createTask1.

Il vous faut également créer un nouveau Field qui contiendra l’ID de la tâche et l’attacher à la propriété TaskId.

Double cliquez sur l’action pour lui ajouter ce code :

- 4 - © ENI Editions - All rigths reserved - Openmirrors.com

Openmirrors.com

Page 92: Developpez en .Net Pour Sharepoint
Page 93: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 94: Developpez en .Net Pour Sharepoint
Page 95: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 96: Developpez en .Net Pour Sharepoint

Les tâches planifiées

Les objectifs de cette section sont les suivants :

Connaître l’utilité des tâches planifiées.

Apprendre à créer, exécuter et supprimer une tâche planifiée.

Apprendre à planifier une tâche.

Apprendre à choisir un type d’enregistrement pour une tâche.

1. Introduction

Les tâches planifiées (Timer Jobs) sont des composants permettant d’exécuter à fréquence régulière une série d’opérations. Elles sont encapsulées en tant que composants de la ferme SharePoint.

Un administrateur peut décider de désactiver/activer une tâche, il peut également consulter l’état de la dernière exécution directement depuis la centrale d’administration.

SharePoint lui même utilise ce mécanisme pour ses propres tâches administratives comme, par exemple, l envoi des alertes, la vérification des quotas spécifiés, l’envoi de mails, etc.

L’exécution de toutes ces tâches est prise en charge par un service Windows tournant sur le serveur qui s’appelle Windows SharePoint Services Timer matérialisé par le processus OWSTIMER.EXE.

En plus des tâches standard générées et gérées par SharePoint, il est possible de créer ses propres tâches.

La création de tâche est indiquée pour toute opération devant être exécutée de manière régulière (une fois par jour/semaine/mois, toutes les 10 minutes…).

Enfin, les tâches planifiées de SharePoint offrent une alternative à celles de Windows qui jusque­là étaient systématiquement utilisées.

Cette possibilité reste toujours intéressante pour des tâches hybrides nécessitant à la fois d’accéder à SharePoint et à des ressources physiques sur le serveur car bien qu il soit possible d accéder à celui ci depuis une tâche SharePoint, il est préférable de l’éviter.

2. Les définitions des tâches (Job Definitions)

Une définition est l’entité SharePoint qui représente une tâche. Toutes les définitions ainsi que l’état d’exécution des tâches peuvent être consultés dans la centrale d’administration :

- 1 -

Page 97: Developpez en .Net Pour Sharepoint

Sur cette capture d’écran, toutes ces tâches sont internes à SharePoint. Les informations affichées sont simplement le nom de la tâche, son champ d’application et son type de planification. En cliquant sur une tâche spécifique, vous obtenez également sa dernière heure d’exécution et la possibilité d’activer/désactiver la tâche :

Vous l’avez sans doute remarqué, il n’y a pas de bouton Supprimer. Pour supprimer une tâche, il faut utiliser l’API (Application Programming Interface).

En cliquant sur État du travail du minuteur, vous obtenez la liste des tâches et leur taux de réussite lors de leur dernière exécution

- 2 -

Openmirrors.com

Page 98: Developpez en .Net Pour Sharepoint
Page 99: Developpez en .Net Pour Sharepoint

namespace Chap05.TachesPlanifiees public class TachePlanifiee: SPJobDefinition public TachePlanifiee() public TachePlanifiee( string TitreTache, SPWebApplication App, string SiteCible, string ListeCible,string ListeArchive) : base(TitreTache, App, null, SPJobLockType.Job) this.Title = TitreTache; this.Properties["SiteCible"] = SiteCible; this.Properties["ListeCible"] = ListeCible; this.Properties["ListeArchive"]= ListeArchive; public override void Execute(Guid targetInstanceId) base.Execute(targetInstanceId); string NomSite = this.Properties["SiteCible"].ToString(); string NomListe = this.Properties["ListeCible"].ToString(); string NomListeArchive = this.Properties["ListeArchive"].ToString(); SPWebApplication App = this.Parent as SPWebApplication; if (App == null) throw new ApplicationException("Web application nulle"); try SPContentDatabase Db = App.ContentDatabases[targetInstanceId]; using (SPSite Site = Db.Sites[NomSite]) using (SPWeb Web = Site.RootWeb) SPList ListeCible = Web.Lists[NomListe]; SPList ListeArchiveCible = Web.Lists[NomListeArchive]; SPQuery Requete = new SPQuery(); Requete.Query = "<Where><Lt><FieldRef Name=’Created’/><Value Type=’DateTime’>"; Requete.Query += SPUtility.CreateISO8601DateTimeFromSystemDateTime( DateTime.Now.AddDays(-1)).ToString(); Requete.Query+= "</Value></Lt></Where>"; SPListItemCollection ListeCibleItems = ListeCible.GetItems(Requete); foreach (SPListItem Item in ListeCibleItems) SPListItem ItemArchive = ListeArchiveCible.Items.Add(); foreach (SPField Colonne in Item.Fields) if (!Colonne.ReadOnlyField && ! Colonne.Hidden && Colonne.InternalName != "Attachments") ItemArchive[Colonne.Title] = Item[Colonne.Title]; foreach (string NomFichier in Item.Attachments) SPFile Fichier = Web.GetFile( Item.Attachments.UrlPrefix + NomFichier); ItemArchive.Attachments.Add( NomFichier, Fichier.OpenBinary());

- 4 -

Openmirrors.com

Page 100: Developpez en .Net Pour Sharepoint
Page 101: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 102: Developpez en .Net Pour Sharepoint
Page 103: Developpez en .Net Pour Sharepoint

Pour déboguer une tâche, vous devez attacher Visual Studio au processus OWSTIMER.exe et insérer un point d’arrêt dans votre code, comme illustré ci­dessous :

Vous aurez pris soin au préalable de déployer la DLL, de redémarrer IIS et de redémarrer OWSTIMER.

g. Gérer les erreurs

Dans SharePoint, en fonction du composant que vous développez, vous pouvez dans certains cas lever une ApplicationException qui sera interceptée par SharePoint et affichée à l’écran. Dans d’autres cas, comme pour les tâches planifiées, lancer une telle exception basculera la tâche en état Failed et ajoutera une entrée dans les fichiers de logs SharePoint présents dans le répertoire 14\LOGS

- 8 -

Openmirrors.com

Page 104: Developpez en .Net Pour Sharepoint
Page 105: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 106: Developpez en .Net Pour Sharepoint
Page 107: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 108: Developpez en .Net Pour Sharepoint
Page 109: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 110: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 111: Developpez en .Net Pour Sharepoint

Introduction

Depuis 2001, Microsoft a décidé de s’attaquer au marché des portails collaboratifs avec SPS 2001. En 2003 une nouvelle version du même produit voit le jour. Il faut ensuite attendre 2007 pour voir apparaître SharePoint décliné en trois versions : Windows Sharepoint Services v3, Microsoft Office Sharepoint Server 2007 standard/ et Microsoft Office SharePoint Server enterprise.

Jusqu’alors, cette mouture était de loin la plus complète de la série et celle qui rencontra le plus de succès auprès des sociétés. Rares sont les entreprises aujourd’hui qui n’ont pas implémenté SharePoint en leur sein. Un véritable engouement est né autour de SharePoint grâce à la version 2007.

Fort de cette réussite peu commune, Microsoft rempile en sortant SharePoint 2010 qui se décline également en trois versions : SharePoint Foundation, SharePoint Server Standard et SharePoint Ser ver Enterprise.

Vous noterez que le mot « Office » n’est plus inclut dans le nom, ceci afin d’éviter la confusion dans l’esprit des néophytes qui pouvaient parfois penser que SharePoint n’était qu’un « simple » produit de la suite Office tels que Word ou Excel. Comme vous le découvrirez, il n’en est rien, SharePoint est une plate­forme à part entière nécessitant parfois d’élaborer des architectures physiques et logiques très complexes.

SharePoint 2010 comble largement les lacunes de son prédécesseur et offre davantage de possibilités en termes de gestion documentaire, de gestion de contenu, de portail de publication etc. L’une des évolutions majeures réside également dans sa capacité à implémenter des espaces accessibles depuis Internet de manière plus aisée que précédemment et également de proposer des solutions d’hébergement flexibles notamment grâce au tout nouveau concept de « Sandboxed Solutions ».

De nouvelles API destinées à faciliter l’interfaction entre SharePoint et d’autres systèmes font leur apparition, SharePoint devient de plus en plus une plate­forme applicative.

Enfin, cette version de SharePoint fait également la part belle aux outils de personnalisation tels que SharePoint Designer, InfoPath et encapsule toute une série de services puissants destinés à faciliter l’adapdation de la plate­forme aux besoins spécifiques des entreprises. Il est désormais évident que la personnalisation de SharePoint ne se fera pas seulement au travers de développements « purs et durs » mais aussi en utilisant les outils et services gravitant alentours.

C’est précisément le défi que tente de relever ce livre, vous permettre d’appréhender le produit dans toute sa diversité afin de faire les meilleurs choix lorsque vous serez en charge d’implémenter SharePoint au sein de votre entreprise.

Riches de leur expérience, les auteurs ont agrémenté ce livre de nombreux exemples de code, d’astuces et de mises en garde afin de vous permettre d’identifier rapidement les avantages et inconvénients de chaque situation. L’ouvrage s’articule entièrement autour d’exemples pratiques précédés d’une brève introduction théorique.

Après lecture de ce livre, vous serez à même d’appréhender la majorité des problématiques inhérentes à la personnalisation de la plate­forme SharePoint 2010.

- 1 -

Openmirrors.com

Page 112: Developpez en .Net Pour Sharepoint
Page 113: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 114: Developpez en .Net Pour Sharepoint
Page 115: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 116: Developpez en .Net Pour Sharepoint
Page 117: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 118: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 119: Developpez en .Net Pour Sharepoint

Les ressources physiques d’un serveur SharePoint

1. SharePoint Root, la racine

Le répertoire C:\Program Files\Fichiers Communs\Microsoft Shared\web server extensions\14\ est régulièrement appelé la racine SharePoint ou encore « SharePoint Root » en anglais. Il était appelé « 12 Hive » dans la version 2007.

Si ce répertoire attire autant l’attention, c’est parce que la majorité des composants SharePoint que vous développez doivent y être déployés.

Pour bien comprendre la manière dont SharePoint est organisé, le plus simple est de parcourir les principaux répertoires et d’identifier leur rôle. Le répertoire TEMPLATE intéresse plus particulièrement les développeurs, voici donc sa composition :

Et voici le rôle des principaux répertoires :

ADMIN : contient les pages et les différentes ressources utilisées par la centrale d’administration.

CONTROLTEMPLATES : contient tous les contrôles utilisateurs qui sont utilisés dans les colonnes personnelles, éventuellement les WebPart.

FEATURES : contient toutes les fonctionnalités de la ferme.

IMAGES : contient toutes les images affichées dans les sites.

LAYOUTS : contient toutes les pages applicatives et certaines pages maîtres.

SiteTemplates : contient les fichiers relatifs aux modèles de sites.

SQL : contient différents scripts SQL et certificats.

THEMES : contient les images et les fichiers CSS utilisés par les thèmes.

- 1 -

Openmirrors.com

Page 120: Developpez en .Net Pour Sharepoint

XML : contient les schémas XSD de CAML, contient les fichiers CAML décrivant les colonnes standard & personnelles

Ces répertoires sont la majorité du temps la cible principale des déploiements.

Directement en dessous du 14, vous retrouvez aussi les répertoires suivants :

LOGS : tous les fichiers logs de SharePoint s’y trouvent et doivent être consultés lorsque vous avez un problème.

ISAPI : toutes les DLL SharePoint s’y trouvent ainsi que les services web.

BIN : tous les exécutables SharePoint (dont stsadm) s’y trouvent.

Resources : fichiers de ressources de SharePoint pour gérer le multilinguisme.

2. Les répertoires Web

SharePoint étant basé sur ASP.NET et donc sur IIS, il bénéficie d’une structure de répertoires web similaire à celle des applications web classiques.

Vous retrouverez donc toute la structure SharePoint dans le répertoire C:\Inetpub\wwwroot\wss\VirtualDirectories.

Ensuite, un répertoire par application y figure. Voici sa structure :

Soit, un sous­répertoire par application dont le nom est le port sur lequel l’application SharePoint écoute.

Dans chacun de ces répertoires, vous retrouvez les standards d’ASP.NET, à savoir, le répertoire bin, App_GlobalResources etc.

3. La GAC (global assembly cache)

La GAC n’est pas du tout spécifique à SharePoint mais plutôt à la plate­forme DotNet. C’est une sorte d’emplacement système où est localisée toute une série d’assemblages qui peuvent être versionnés. En outre, tout assemblage placé dans la GAC bénéficie du mode de sécurité Full Trust signifiant que le code exécuté par un assemblage de la GAC peut plus ou moins tout faire. Certains composants SharePoint doivent impérativement être déployés dans la GAC mais ce n’est pas le cas de tous.

Les WebPart par exemple peuvent tout à fait être déployés dans le répertoire bin de l’application web dans laquelle on souhaite les utiliser.

Une bonne pratique consiste à éviter la GAC autant que possible afin de ne pas octroyer à un assemblage plus de droits que ceux dont il a réellement besoin.

- 2 -

Page 121: Developpez en .Net Pour Sharepoint

Les solutions SharePoint

1. Créer des solutions avec les modèles de projet Visual Studio

Avant SharePoint 2010 et Visual Studio 2010, les modèles de projet SharePoint 2007 de Visual Studio 2008 n’étaient pas idéaux dans la mesure où ils ne donnaient pas la main au développeur sur la manière dont la solution SharePoint .wsp était générée.

Pour certains types de projet, la solution était d’ailleurs même directement supprimée par Visual Studio après déploiement.

Or, il va de soi que la seule méthode professionnelle et industrialisée de déploiement de composants SharePoint passe par des solutions.

Il faut donc oublier toute méthode qui consisterait à déployer manuellement, via des fichiers batch, via PowerShell… des composants pour aller faire des copies de fichiers sur les différents serveurs de la ferme, de redémarrer manuellement IIS etc.

Le caractère multiserveurs de SharePoint rend le déploiement de composants très important. En effet, les ¾ du temps, les développeurs développent sur une machine de type « stand alone » où tout est toujours déployé sur cette seule machine. Du coup, des techniques de déploiement manuels sont toujours possibles mais le jour où il faut déployer en production, elles ne sont plus adaptées et peuvent même poser de gros problèmes. Par exemple, dans une architecture de ferme simplifiée comme celle illustrée ci­dessous :

Si l’on déploie un composant WebPart, il faut qu’au minimum la DDL et le fichier .webpart soient déployés sur les deux serveurs WFE (Web Front End). Si vous omettez de les déployer sur un des deux WFE, lorsqu’un visiteur se connectera, cela fonctionnera ou non en fonction du WFE sur lequel le load balancer (répartisseur de charge) aura redirigé la requête HTTP.

Dans les environnements réels, SharePoint est systématiquement installé en mode ferme et donc sur plusieurs serveurs.

Les solutions SharePoint permettent de déployer automatiquement les composants sur tous les serveurs de la ferme.

- 1 -

Openmirrors.com

Page 122: Developpez en .Net Pour Sharepoint
Page 123: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 124: Developpez en .Net Pour Sharepoint
Page 125: Developpez en .Net Pour Sharepoint

SharePoint 2010, il est désormais possible de déployer des solutions au niveau des collections de sites. Ce type de solution est appelé « SandBoxed Solution ».

Ces solutions offrent les avantages suivants :

Un administrateur de collection de sites peut ajouter/déployer/activer une solution au niveau de sa propre collection sans demander une assistance supplémentaire aux équipes techniques.

La consommation de ces solutions peut être contrôlée par l’administrateur de la ferme. Il peut leur allouer plus ou moins de ressources.

Ces solutions ne peuvent pas dépasser la portée d’une collection. Cela signifie qu’aucun élément de la solution ne peut être déployé physiquement sur l’un des serveurs. Tout est stocké entièrement en base de données.

En cas d’hébergement mutualisé de sites SharePoint, les différents espaces peuvent indépendamment déployer leurs propres solutions sans interférer avec les autres.

Elles offrent une plus grande garantie en matière de sécurité.

Ce type de solution est sans doute promis à un bel avenir.

- 5 -

Openmirrors.com

Page 126: Developpez en .Net Pour Sharepoint

Résumé

Bien comprendre la gestion des solutions et des fonctionnalités constitue certainement une étape majeure dans l’apprentissage de SharePoint. Tout développement professionnel doit être délivré sous forme de solution aux équipes gérant l’infrastructure. Bien qu’il existe des techniques alternatives, il faut idéalement toujours recourir aux solutions même dans un environnement de développement, qu’il soit d’entreprise ou personnel.

Dans ce chapitre, vous avez appris :

À déployer vos composants au sein de fonctionnalités.

À comprendre les différents niveaux de fonctionnalités et les interdépendances entre ceux­ci.

À identifier les différentes ressources ciblées par les déploiements (les répertoires web, la racine SharePoint, la GAC).

À comprendre l’intérêt de travailler avec des solutions.

À générer des solutions avec Visual Studio ou manuellement.

À utiliser PowerShell pour l’administration régulière de SharePoint.

À créer vos propres commandes PowerShell.

À utiliser les tâches planifiées.

- 1 -

Page 127: Developpez en .Net Pour Sharepoint

Introduction

SharePoint 2010 marque la fin des fournisseurs de services partagés (Shared Services Provider). Les SSP étaient une brique importante dans l’architecture de MOSS 2007. Ils permettaient de partager des fonctionnalités à l’intérieur de la ferme. Ces fonctionnalités étaient par exemple les profils utilisateurs, le moteur de recherche ou encore forms services. Dans la version 2010 de SharePoint, les SSP sont remplacés par ce que l’on appelle plus simplement des Services. Il n’est plus nécessaire maintenant de créer des SSP pour utiliser les services. Les services de SharePoint peuvent être comparés aux services de Windows : il s’agit de processus tournant en arrière­plan et disponibles par tous les composants de votre ferme.

Dans ce chapitre, nous allons aborder quelques­uns de ces services, plus précisément les services permettant d’interagir avec les produits de la gamme Office 2010.

- 1 -

Openmirrors.com

Page 128: Developpez en .Net Pour Sharepoint

Excel Services

1. Introduction

Le service de calcul Excel (Excel Services) est un élément des applications de services offert par SharePoint. Dans beaucoup de sociétés, les classeurs Excel représentent une partie importante des applications utilisées, et ce dans presque tous les départements. Ces fichiers sont quelquefois relativement complexes et une réécriture complète de toutes les opérations représente un travail long et coûteux.

C’est pour toutes ces raisons que SharePoint offre la possibilité d’intégrer ces classeurs directement à partir de son interface afin de permettre leur partage entre tous les utilisateurs. Une autre fonctionnalité intéressante est d’autoriser leur utilisation au travers d’une interface Web, sans nécessiter l’installation du client Excel.

Les services de calcul Excel apportent également encore plus de puissance à votre classeur en vous donnant la possibilité d’écrire vos propres fonctions Excel dans le langage .NET de votre choix.

L’inverse est également vrai, vos classeurs Excel peuvent à leur tour fournir une base de calcul puissante pour vos applications au travers du service Web Excel Services.

2. Configurer SharePoint pour utiliser le service de calcul Excel

La configuration de ce service se fait par la page des applications de services accessible par la console d’administration SharePoint

a. Activer le service

Pour commencer, il faut vérifier que le service est bien actif dans la ferme. Pour cela ouvrez la console d’administration SharePoint et allez dans la partie Gestion des applications, puis Gérer les applications de service.

Cette page affiche la liste des services disponibles dans la ferme, ainsi que leur statut. Si le service de calcul Excel n’est pas actif, démarrez­le :

b. Définir un emplacement comme fiable

Pour pouvoir être utilisé par les services de calcul Excel, un classeur doit se trouver dans un emplacement approuvé. Cela signifie qu’un administrateur doit désigner un emplacement conteneur comme étant fiable et pouvant être utilisé par les services de calcul Excel. Ceci peut être une bibliothèque de documents, un répertoire Windows partagé ou un dossier Web.

Pour commencer, rendez­vous dans la centrale d’administration de SharePoint dans la partie Gérer les applications de service et ensuite dans la partie Excel Services.

- 1 -

Page 129: Developpez en .Net Pour Sharepoint

Cliquez ensuite sur le lien Emplacements de fichiers approuvés.

Cette page affiche la liste des emplacements approuvés existants. Par défaut une ligne est déjà ajoutée, elle active Excel Services pour tous les sites.

- 2 -

Openmirrors.com

Page 130: Developpez en .Net Pour Sharepoint

Vous pouvez évidemment définir les emplacements approuvés de manière plus granulaire et également définir des sources non SharePoint.

Vous constatez que les emplacements personnalisés peuvent être de trois types.

3. Publier un classeur Excel

Pour être utilisable dans les services de calcul Excel, un classeur doit être publié dans un emplacement approuvé. C est l objet des lignes qui suivent

Créez un nouveau classeur dans un client Excel. Ce classeur calcule un montant TTC sur la base d’un prix HTVA.

- 3 -

Page 131: Developpez en .Net Pour Sharepoint

Pour publier le classeur dans Excel Services, allez dans le menu Fichier, sous Enregistrer et envoyer et Enregistrer dans SharePoint.

Il ne faut pas oublier de préciser que le fichier doit être ouvert dans le navigateur.

- 4 -

Openmirrors.com

Page 132: Developpez en .Net Pour Sharepoint

Nous pouvons ensuite télécharger ce document dans une bibliothèque de documents et l’ouvrir dans le navigateur :

Cette application peut donc être utilisée depuis n’importe quelle machine, avec ou sans Excel installé, opérant sur Windows ou sur n’importe quel autre système d’exploitation.

Sous SharePoint 2007, aucune bibliothèque n’était définie comme fiable par défaut. Sous SharePoint 2010 toutes les bibliothèques le sont par défaut.

Bien que le classeur s’exécute sans problème en mode Web, toutes les cellules sont en lecture seule : vous ne pouvez effectuer aucune modification sur celles­ci.

Pour autoriser la modification de certaines valeurs, vous devez tout d’abord leur assigner un nom. Assignez le nom HTVA à la cellule B1.

Publiez à nouveau le formulaire dans SharePoint, mais cette fois modifiez les paramètres de publication.

Ajoutez un paramètre à partir de la cellule nommée HTVA.

- 5 -

Page 133: Developpez en .Net Pour Sharepoint

Ouvrez à nouveau le classeur dans le navigateur, cette fois vous pouvez modifier la valeur de la cellule via le volet de droite.

4. Ecrire des fonctions personnalisées

Excel offre une multitude de fonctions répondant à énormément de besoins. Malgré cela il ne permet pas toujours de remplir tous les besoins d’une société. Les services de calcul Excel permettent d’écrire dans le langage .NET de votre choix de nouvelles fonctions utilisables dans Excel. Ces fonctions ne seront utilisables qu’au sein des services Excel.

Les classeurs publiés dans les services de calcul Excel ne peuvent pas contenir de code VBA. Les fonctions personnalisées sont un très bon moyen de contourner cette limitation.

Pour commencer, pour que les fonctions personnalisées soient fonctionnelles, il faut que l’emplacement approuvé dans lequel est déployé le classeur l’autorise. Cela est défini via la centrale d’administration de SharePoint

- 6 -

Openmirrors.com

Page 134: Developpez en .Net Pour Sharepoint
Page 135: Developpez en .Net Pour Sharepoint

Cliquez sur le lien Assemblys de fonctions définis par l’utilisateur.

Cette page contient la liste des assemblys autorisées à contenir des fonctions personnalisées. Vous avez la possibilité d’ajouter votre propre assembly de deux manières différentes :

Si l’assembly est déployée dans la GAC : en entrant sa signature.

Si l’assembly est déployée dans un répertoire du serveur : en entrant simplement l’emplacement complet de la dll.

- 8 -

Openmirrors.com

Page 136: Developpez en .Net Pour Sharepoint

Voilà, votre fonction est à présent utilisable. Modifiez donc votre classeur pour utiliser les nouvelles fonctions crées.

Il est normal que le résultat de la fonction soit #NOM ? car vos fonctions personnalisées ne sont pas utilisables dans le client Excel mais le seront dans votre navigateur web.

Publiez le formulaire dans SharePoint et testez à nouveau votre classeur.

- 9 -

Page 137: Developpez en .Net Pour Sharepoint

- 10 -

Openmirrors.com

Page 138: Developpez en .Net Pour Sharepoint

InfoPath 2010 et Forms Services

1. Introduction

La plupart des applications métier nécessitent des informations entrées par l’utilisateur. Une façon commune de demander ces informations est l’utilisation de formulaires. InfoPath est l’outil idéal dans la gamme Office 2010 pour construire des formulaires électroniques.

Contrairement à la version précédente, tous les formulaires de liste, librairie ou flux de travail dans SharePoint 2010 sont des formulaires InfoPath, d’où l’importance de ce produit.

InfoPath est également présent dans les autres outils Office 2010. Il permet par exemple d’afficher les "panneaux d’information de document" (document information panel) dans Word.

La conception de formulaires dans InfoPath tourne autour de trois axes majeurs:

La validation de données qui permet de vérifier les informations entrées par l’utilisateur afin d’éviter que des données invalides ne soient soumises.

Le design : InfoPath fournit de nombreux contrôles permettant de construire des formulaires complexes. La notion de vue permet quant à elle d’améliorer l’expérience de l’utilisateur en découpant un formulaire en plusieurs "pages" pouvant être affichées suivant le contexte. InfoPath contient également une notion de formatage conditionnel vous permettant d’afficher ou non certains contrôles de votre formulaire.

Les connexions de données : les données sont au centre des formulaires InfoPath. Tout formulaire contient au minimum une source de données, il s’agit de la source de données principale qui contient les données du formulaire lui­même (la valeur de ses champs). D’autres sources de données peuvent être ajoutées afin d’intégrer des données venant de sources externes.

Revenons dans le contexte de SharePoint 2010. Premièrement, InfoPath va vous permettre de personnaliser les formulaires standard. Ce sont les formulaires vous permettant de voir, d’ajouter ou de modifier des éléments d’une liste ou d une librairie Nous ajouterons à ces formulaires ceux permettant d interagir avec un flux de travail

La modification de ces formulaires est extrêmement simple et ne nécessite pas l’utilisation de code. Un clic dans le ruban de SharePoint ouvre le formulaire courant en mode édition dans InfoPath, un deuxième clic dans InfoPath publie le nouveau formulaire dans SharePoint.

InfoPath vous permet également de développer de véritables applications métier utilisant un formulaire en entrée. Les utilisateurs remplissent un formulaire et le soumettent. Les données du formulaire seront sauvées dans une liste SharePoint. Ensuite, différentes opérations pourront être exécutées sur ces données, comme par exemple l’exécution d’un flux de travail.

2. Différence entre Forms Services et InfoPath

- 1 -

Page 139: Developpez en .Net Pour Sharepoint

La différence entre InfoPath et Forms services n’est pas toujours claire pour beaucoup de personnes. Il s’agit pourtant de deux technologies différentes.

InfoPath est un produit de la gamme Office, tout comme Excel, Word, PowerPoint, etc. Il peut donc être utilisé sans SharePoint, tout comme n’importe quel autre outil Office.

Depuis cette nouvelle version, le client InfoPath est divisé en deux applications

InfoPath Designer 2010 pour la conception de modèles de formulaires et la publication du modèle dans SharePoint.

InfoPath Filler 2010 pour le remplissage des formulaires par les utilisateurs finaux.

Forms Services est un service de SharePoint permettant d’afficher un formulaire InfoPath sous forme de page web et donc de l’utiliser sans qu’InfoPath ne soit installé sur le poste client. Cependant, il faut garder à l’esprit que les formulaires destinés à Form Services ne bénéficient pas de toutes les fonctionnalités de InfoPath, contrairement au formulaire utilisé dans le client InfoPath.

Forms Services est disponible en tant que fonctionnalité Entreprise dans SharePoint Server 2010.

3. Personnalisation des formulaires de liste

Commencez par l’utilisation la plus simple d’InfoPath dans SharePoint 2010 : la personnalisation des formulaires de liste. Chaque fois que vous visionnez, modifiez ou créez un nouvel élément dans une liste SharePoint, vous êtes confronté à un formulaire de liste présenté dans une fenêtre modale.

Cette fenêtre est en réalité une page contenant un WebPart et affichant un formulaire InfoPath.

Comme dit précédemment, un simple clic dans le ruban permet d’ouvrir le formulaire en mode édition dans InfoPath. L’action en question se trouve dans l’onglet Liste.

Pour cet exemple, vous utiliserez une liste simple de type "Liste personnalisée" qui par défaut ne contient qu’une colonne nommée titre

Nous allons modifier le comportement et le design de ce formulaire en lui ajoutant une image et en n’acceptant que les titres contenant au minimum trois caractères.

Commencez par ajouter une image au formulaire. Pour cela, insérez l’image depuis l’onglet Insertion d’InfoPath comme vous le feriez avec n’importe quel autre programme.

- 2 -

Openmirrors.com

Page 140: Developpez en .Net Pour Sharepoint

Cette étape avait pour seul objectif de démontrer la simplicité d’utilisation d’InfoPath. Voyons à présent comment ajouter une règle de validation sur le champ titre du formulaire

Cliquez sur le champ titre pour le sélectionner puis cliquez sur Gérer les règles de l’onglet Propriétés, cela aura pour effet d’ouvrir le volet de gestion des règles pour ce champ.

Ajoutez une règle de type validation depuis ce volet, cette règle ne validera que les titres d’au moins trois caractères.

La fonction string­length retourne la longueur d’un texte, le point (.) quant à lui signifie que la fonction sera appliquée sur le champ lui­même, autrement dit celui sur lequel la règle est appliquée.

Voici donc à quoi doit ressembler votre nouvelle règle :

- 3 -

Page 141: Developpez en .Net Pour Sharepoint

Voyons ensuite comment publier notre formulaire modifié. Comme pour l’édition de celui­ci, la publication se fait en un seul clic. Utilisez le bouton Publication rapide.

Pour terminer, testez votre nouveau formulaire dans SharePoint.

4. Création de liste SharePoint depuis InfoPath

Dans l’exemple précédent nous avons vu comment personnaliser les formulaires de liste dans SharePoint. Dans celui­ci nous allons découvrir comment utiliser InfoPath et Forms services pour créer des listes sous SharePoint.

Démarrez InfoPath Designer 2010 et créez un nouveau formulaire de type Liste SharePoint

- 4 -

Openmirrors.com

Page 142: Developpez en .Net Pour Sharepoint

L’assistant vous demande alors de définir le site cible, c’est­à­dire le site sur lequel le formulaire sera déployé.

Dernière étape de l’assistant : définir la liste cible, à l’intérieur du site sélectionné à l’étape précédente.

À ce niveau, deux choix s’offrent à vous : créer une nouvelle liste ou modifier une liste existante. Dans le cas présent, ajoutez une nouvelle liste et appelez­la Mon Application.

- 5 -

Openmirrors.com

Openmirrors.com

Page 143: Developpez en .Net Pour Sharepoint

Vous voici face à un formulaire ne contenant qu’un seul champ appelé titre. Cela n’est pas une surprise et correspond au type de contenu de base de SharePoint : Elément.

Lorsque vous allez publier le formulaire sur la liste, chaque champ du formulaire sera transformé en colonne dans la liste. Vous ne devrez donc pas vous soucier de la liste lors de votre développement, tout se fera essentiellement dans InfoPath.

Vous allez ajouter quelques champs sur votre formulaire, l objectif est que la liste contienne une collection de formations. Ajoutez quelques contrôles :

Pour résumer, vous avez ajouté les champs suivants :

Description (zone de texte formatée)

Formateur (Zone de texte)

Niveau (liste de sélection, champ ne pouvant pas être vide)

Une fois tous les contrôles ajoutés, n’oubliez pas de renommer les champs de la source de données principale. Cela

- 6 -

Openmirrors.com

Page 144: Developpez en .Net Pour Sharepoint

peut être fait depuis l’onglet Propriétés du ruban lorsque le contrôle est sélectionné.

C’est ce nom qui sera utilisé pour créer les colonnes dans la liste SharePoint. Comme précisé avant, le champ Niveau est une liste de sélection. Cette liste peut contenir trois valeurs : Débutant, Avancé et Expert.

Ouvrez les propriétés du contrôle et modifiez les choix de la liste.

Rendez également le champ obligatoire depuis cette fenêtre.

Cliquez ensuite sur le bouton Publication rapide pour créer la nouvelle liste et publier le formulaire.

Tentez donc d’ajouter un nouvel élément dans la liste pour tester votre nouveau formulaire.

- 7 -

Page 145: Developpez en .Net Pour Sharepoint

Nous venons de voir comment créer une liste dans un site basé sur un modèle de formulaire InfoPath.

5. Les sources de données externes

Jusqu’à présent nous n’avons utilisé qu’une seule source de données dans nos formulaires : la source de données principale, autrement dit les données du formulaire lui­même.

Les sources de données externes dans InfoPath permettent d’incorporer des données étrangères au formulaire. Ces données peuvent provenir de différentes sources.

Service Web SOAP

Service Web REST

Bibliothèque ou liste SharePoint

Base de données (Microsoft SQL Server uniquement)

Document XML

Pour notre exemple, nous allons remplacer le champ Formateur (qui est pour l’instant une simple zone de texte) pour une liste de sélection connectée à une liste dans notre site SharePoint. Cette liste s’appelle Formateurs et contient bien entendu une liste de personnes chargées de cours.

Ouvrez à nouveau le formulaire de votre première liste afin de remplacer la zone de texte Formateur par une liste déroulante liée à votre nouvelle liste.

- 8 -

Openmirrors.com

Page 146: Developpez en .Net Pour Sharepoint

Notre but est donc de remplacer une zone de texte par une liste déroulante. Pour cela il n’est pas nécessaire de supprimer le contrôle initial ni de créer un nouveau champ du formulaire. InfoPath permet de remplacer un contrôle par un autre très simplement.

Faites un clic droit sur le contrôle à remplacer et choisissez Changer le contrôle ­ Zone de liste déroulante.

À présent, il vous reste à lier la zone déroulante avec la liste Formateurs sur votre site. Pour ce faire, affichez les propriétés du contrôle.

Par défaut les éléments de la liste doivent être définis statiquement. Cela signifie que vous devez entrer toutes les valeurs possibles à la main. Ce n’est évidemment pas ce que nous voulons dans ce cas.

Les valeurs proviennent d’une source de données externe au formulaire :

Votre prochaine action consiste à définir cette nouvelle source externe. Cliquez sur Ajouter.

Il s’agit d’une connexion de réception de données :

Vers une liste SharePoint :

- 9 -

Page 147: Developpez en .Net Pour Sharepoint

Entrez ensuite l adresse du site SharePoint et choisissez la liste Formateurs

Seul le champ Titre vous intéresse, il contient le nom du formateur. Dans cet écran vous pouvez également définir un tri pour les résultats retournés. Cela fait partie des petites améliorations par rapport à la version précédente d’InfoPath et facilite la vie des développeurs.

Terminez l assistant et sauvez votre connexion sous le nom Formateurs

- 10 -

Openmirrors.com

Page 148: Developpez en .Net Pour Sharepoint

Définissez le champ Titre à la fois comme valeur et comme nom complet. Cela signifie que ce champ sera présenté dans la liste déroulante et sauvé dans la liste SharePoint.

Publiez à nouveau le formulaire et testez­le. Vous constatez que la liste a bien été remplie depuis SharePoint.

6. Utilisation du WebPart de formulaire InfoPath

Parmi les nouveaux WebPart livrés avec SharePoint 2010 figure le WebPart de formulaire InfoPath (Forms services WebPart). Ce composant permet de présenter n’importe quel formulaire InfoPath dans une page de site.

En regardant un peu plus loin, nous pouvons voir dans InfoPath une manière de créer des WebPart de manière graphique sans aucune connaissance de programmation et sans nécessité de déploiement sur le serveur.

Nous allons repartir du formulaire créé précédemment. Notre but sera de l’ajouter dans une base qui contiendra à la fois le formulaire lui­même et la liste des éléments déjà créés. Le formulaire sera affiché en mode ajout et permettra donc la création de nouveaux éléments.

Voici le résultat final que nous souhaitons obtenir :

- 11 -

Page 149: Developpez en .Net Pour Sharepoint

Une modification a été apportée au formulaire précédent : l’ajout d’un bouton Ajouter qui permet de soumettre le formulaire.

Modifiez à nouveau le formulaire dans InfoPath et ajoutez un bouton :

Dans les propriétés du bouton, définissez son action à Envoyer :

Publiez à nouveau le formulaire.

Rendez­vous maintenant sur la page d’accueil de votre site et ajoutez deux WebPart. Tout d’abord une vue sur notre liste principale :

Et ensuite le WebPart de formulaire InfoPath :

- 12 -

Openmirrors.com

Page 150: Developpez en .Net Pour Sharepoint

Modifiez ensuite les propriétés de ce WebPart pour qu’il affiche votre formulaire.

Dans cet exemple, vous devez modifier la liste cible et le comportement après l’envoi du formulaire pour qu’un nouveau formulaire vierge soit présenté après l’envoi.

Vous constatez alors que le WebPart de formulaire InfoPath vous permet réellement d’intégrer vos développements InfoPath dans vos pages SharePoint de manière tout à fait transparente.

Il est également possible de connecter le WebPart de formulaire InfoPath à un autre WebPart.

7. Utilisation de code dans les formulaires InfoPath

Jusqu’à la version précédente d’InfoPath, l’utilisation de code dans les formulaires InfoPath nécessitait le déploiement de ceux­ci par un administrateur de la ferme. En effet le déploiement du formulaire ne pouvait se faire que via l’administration centrale de SharePoint.

Grâce aux sandboxed solutions de SharePoint 2010, il est à présent possible à un administrateur de collection de sites de déployer du code. La solution est placée dans la galerie de solutions de la collection de sites.

La création de code pour InfoPath ne peut se faire que dans VSTA (Visual Studio Tools for Application). Malheureusement, Visual Studio 2010 ne prend pas en charge les projets InfoPath.

Nous allons illustrer l’utilisation de code par un exemple simple. Nous allons développer un formulaire contenant une zone de liste modifiable (combox box) connectée sur une liste SharePoint contenant des salutations (Mr, Mme…).

- 13 -

Page 151: Developpez en .Net Pour Sharepoint

L’utilisateur aura la possibilité d’entrer une valeur ne se trouvant pas dans la liste. Dans ce cas nous pouvons utiliser du code pour ajouter ce nouvel élément dans la liste de salutation.

Commencez par créer une liste de salutation :

Ouvrez à présent InfoPath 2010 et créez un nouveau formulaire de type Bibliothèque de formulaires SharePoint.

Ajoutez votre combo box sur la forme et connectez­la à votre liste de salutation.

- 14 -

Openmirrors.com

Page 152: Developpez en .Net Pour Sharepoint

Publiez le formulaire dans une nouvelle bibliothèque de formulaires de votre site et créez un nouvel élément.

Votre zone de liste modifiable est bien connectée à votre liste SharePoint. Il vous reste maintenant à ajouter le code nécessaire à l ajout d un nouvel élément

La première étape consiste à choisir un langage de programmation pour votre développement. Nous avons le choix entre Visual Basic.NET et C#.

Le langage sélectionné par défaut est Visual Basic.NET certainement parce qu’historiquement les applications Office pouvaient être personnalisées en utilisant VBA.

Le choix du langage peut être fait depuis le ruban sous l’onglet Développeur.

- 15 -

Page 153: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 154: Developpez en .Net Pour Sharepoint
Page 155: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 156: Developpez en .Net Pour Sharepoint

Visio Services

1. Introduction

Visio Services fait partie des nouveautés apportées par SharePoint 2010. Il permet de présenter des diagrammes Visio 2010 dans un navigateur Internet. Il n’est donc plus nécessaire d’avoir le client Visio installé sur sa machine pour pouvoir lire des diagrammes Visio. De plus, il est également possible de connecter le diagramme à différentes sources de données externes et de faire vivre le diagramme en fonction de ces données.

Commençons par créer un premier diagramme dans Visio 2010. Ce diagramme contient quatre serveurs. Dans un premier temps, notre but est simplement de publier ce diagramme dans SharePoint.

Ouvrez Visio 2010 et créez un nouveau diagramme de type Diagramme de réseau simple.

Ajoutez­y un conteneur afin de garder vos serveurs groupés :

- 1 -

Page 157: Developpez en .Net Pour Sharepoint

Vous pouvez maintenant ajouter vos quatre serveurs sur le diagramme comme ceci :

Nommez à présent vos serveurs de la manière suivante :

SRV001

SRV002

SRV003

SRV004

Vous pouvez ajouter le nom des serveurs dans la propriété Nom de réseau de chaque contrôle.

- 2 -

Openmirrors.comOpenmirrors.com

Openmirrors.com

Page 158: Developpez en .Net Pour Sharepoint

Il reste à présent à définir un nouveau graphique de données afin d’afficher le nom du premier serveur sur le diagramme.

Ajoutez un élément en tant que Texte lié au champ Nom de réseau.

- 3 -

Page 159: Developpez en .Net Pour Sharepoint

Cela a pour effet d’ajouter le nom du serveur au diagramme :

Faites la même chose pour les autres serveurs.

Il est possible d’effectuer cette opération pour plusieurs composants à la fois en faisant une multisélection.

Voici donc le résultat escompté :

Passez maintenant à la publication du formulaire dans SharePoint. Dans le menu Fichier ­ Enregistrer et envoyer ­ Enregistrer dans SharePoint choisissez Dessin Web comme type de fichier et enregistrez­le localement.

- 4 -

Openmirrors.com

Page 160: Developpez en .Net Pour Sharepoint

Ensuite vous pouvez le télécharger dans une bibliothèque de documents SharePoint. Il suffit donc d’ouvrir le diagramme depuis cette bibliothèque pour voir votre diagramme dans le navigateur, sans utilisation du client Visio.

2. Connexion aux données externes

Partons de notre diagramme précédent. Notre but est de le lier avec des données présentes dans une liste SharePoint. Nous voulons que le diagramme soit automatiquement modifié lorsque les données de cette liste le seront.

Réouvrez le diagramme dans Visio et allez dans l’onglet Données. C’est à partir de celui­ci que vous pourrez créer des sources de données externes.

Le diagramme sera lié avec une liste de serveurs dans SharePoint. Il s’agit d’une liste personnalisée dont voici le contenu :

Cette liste est relativement simple et ne contient que trois colonnes :

Titre nom du serveur

Statut : Est­ce que le serveur est opérationnel ?

Patch : Le serveur a­t­il été patché ?

Revenez à la création de votre source de données. Commencez par définir que les données se trouvent dans une

- 5 -

Page 161: Developpez en .Net Pour Sharepoint

liste SharePoint.

Précisez ensuite l’URL de votre site et choisissez la liste Serveurs.

Voilà qui termine l’assistant de création de source de données. Le contenu de la liste de serveurs est maintenant visible dans le volet Données externes de Visio

Mappez donc ces données à notre serveur sur le diagramme. La manière la plus simple de le faire est d’effectuer la manipulation sur un seul élément et d’ensuite appliquer les changements aux autres serveurs.

Créez un nouveau graphique de données. Cette fois nous voulons trois choses :

Afficher le nom du serveur dans le graphique.

- 6 -

Openmirrors.com

Page 162: Developpez en .Net Pour Sharepoint

La couleur du serveur doit s’adapter à son état : rouge si le serveur est tombé, vert s’il est disponible.

Un drapeau vert ou rouge indiquant si le serveur a été patché.

Premièrement, il faut lier un élément de la liste des serveurs avec le premier contrôle sur le diagramme Pour cela, c’est très simple, il faut glisser­déposer le premier élément du volet données externes sur le premier serveur du diagramme.

Passez ensuite à la création du graphique de données afin de lier les colonnes de la liste SharePoint avec des comportements du contrôle.

Premier comportement à définir : le nom du serveur.

Deuxième élément à ajouter : le statut du serveur.

- 7 -

Page 163: Developpez en .Net Pour Sharepoint

Le contrôle sera coloré en vert si la valeur du champ Statut vaut Up et en rouge dans le cas où la valeur est égale à Down.

Troisième et dernier élément, le drapeau signalant que le serveur a été patché ou non.

Cette fois la valeur est affichée en tant que Jeu d’icônes. La colonne Patch étant de type oui/non vous devez tester la valeur 0 et 1 pour définir la couleur du drapeau.

Voilà qui termine la définition de votre graphique de données. Revenez à votre diagramme pour voir le résultat.

Comme vous pouvez le constater, seul le premier serveur a été modifié et vous ne voulez certainement pas répliquer les mêmes modifications sur tous les contrôles. Heureusement, Visio contient un assistant permettant de lier automatiquement tous les contrôles à une source de données.

Cet assistant se trouve sous l’onglet Données.

- 8 -

Openmirrors.com

Page 164: Developpez en .Net Pour Sharepoint

Cet assistant a besoin de faire le lien entre un contrôle sur le diagramme et un (et un seul) élément dans la liste de serveurs. C’est la raison pour laquelle nous avons défini un nom pour chaque serveur au début de l’exemple précédent.

Visio pourra donc faire le lien entre la colonne Titre de la liste SharePoint et le champ de forme Nom de réseau que vous avez rempli précédemment.

Exécutez l’assistant pour lier tous les contrôles.

Publiez à nouveau le formulaire dans SharePoint pour tester le diagramme du navigateur Internet. Si vous modifiez les données de notre liste et rafraîchissez le diagramme, vous pouvez remarquer les changements de statut.

3. Création d’un fournisseur de données personnalisé

- 9 -

Page 165: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 166: Developpez en .Net Pour Sharepoint
Page 167: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 168: Developpez en .Net Pour Sharepoint

private object asyncState; //reference vers ce fournisseur private bool completed; #region IAsuncResult object IAsyncResult.AsyncState get return this.asyncState; WaitHandle IAsyncResult.AsyncWaitHandle get return null; //non utilisé par Visio Services bool IAsyncResult.CompletedSynchronously get return false; bool IAsyncResult.IsCompleted get return this.completed; #endregion #region AddonDataHandler public override IAsyncResult BeginGetData(HttpContext context, AsyncCallback callback, object asyncState) this.asyncState = asyncState; ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadTask), callback); return this; public override void Cancel() public override DataSet EndGetData(IAsyncResult result) return this.Data; #endregion #region Retrouver les données private void ThreadTask(object state) AsyncCallback callback = (AsyncCallback)state; string filename = String.Empty; System.IO.StreamReader reader=null; try this.Data.Reset(); //Retrouver le nom du fichier int filenamestart = this.QueryString.IndexOf("File=") + 5; filename = this.QueryString.Substring(filenamestart);

- 13 -

Page 169: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 170: Developpez en .Net Pour Sharepoint

Access Services

1. Introduction

Access Services fait partie des nouveautés en termes de services apportées par SharePoint 2010. Jusqu’à la version précédente, la connectivité entre SharePoint et Access se limitait à connecter le contenu de SharePoint dans Access afin de pouvoir modifier le contenu d’une liste depuis le client Access.

Dans cette version de la plate­forme, SharePoint permet de réellement héberger une application Access. Les tables seront transformées en listes, les formulaires en pages et les macros en workflows.

SharePoint joue en quelque sorte le rôle de serveur Web hébergeant une application Access complète.

2. Activer Access Services

La première chose à vérifier est que le service est actif sur votre ferme Pour cela, ouvrez la console d administration SharePoint et rendez­vous dans le menu Gestion des applications, Gérer les applications de service.

Vérifiez donc que le service est bien démarré.

Si le service n’est pas démarré, démarrez­le.

3. Création d’une application dans Access

Même si l’objectif de ce livre n’est pas de vous apprendre à créer des applications Access, la création d’une application extrêmement simple nous sera utile pour illustrer l’intégration d’Access dans SharePoint.

Ouvrez Access et créez une nouvelle base de données web.

- 1 -

Page 171: Developpez en .Net Pour Sharepoint

Créez une nouvelle table nommée Pays :

Et une deuxième qui contiendra une liste de villes :

Cette deuxième table est liée à la liste de pays.

- 2 -

Openmirrors.com

Page 172: Developpez en .Net Pour Sharepoint

L’étape suivante consiste à créer deux nouveaux formulaires, un pour chaque table.

4. Publication de l’application dans SharePoint

Considérons la création de l’application comme terminée. Il vous reste maintenant à la publier dans SharePoint. Pour cela, utilisez le menu Office d’Access.

- 3 -

Page 173: Developpez en .Net Pour Sharepoint

Entrez l’URL de votre site ainsi que le nom que vous souhaitez donner à votre application et lancez la publication.

Une fois la publication terminée, votre application Access sera disponible dans SharePoint et totalement fonctionnelle indépendamment de la base de données Access. Les données ne sont pas stockées dans Access mais bien dans des listes SharePoint.

Testez vos différents formulaires en ligne, ou créez par exemple un nouveau formulaire de navigation comme ceci

Bien que les données soient stockées dans SharePoint, un lien existe toujours entre la base de données Access originale et le site SharePoint : vous avez la possibilité de faire des modifications et de les synchroniser avec SharePoint

- 4 -

Openmirrors.com

Openmirrors.com

Openmirrors.com

Page 174: Developpez en .Net Pour Sharepoint

Business Connectivity Services (BCS)

1. Introduction

Business Connectivity Services (BCS) est le nouveau nom pour les Business Data Catalog de SharePoint 2007. Cette technologie permet d’intégrer des données externes dans SharePoint 2010. Parmi les améliorations notables, on peut noter le fait de pouvoir updater la source de données depuis SharePoint et l’intégration de WCF.

2. Les types de contenu externe

Le type de contenu externe est la brique centrale des Business Connectivity Services. Il vous permet de définir la connexion vers la source de données externe.

Dans notre exemple nous allons créer une nouvelle connexion vers une base de données SQL contenant cette table

Il s’agit d’une table contenant une liste de contacts avec leur nom, prénom et numéro de téléphone. Pour définir la connexion avec SharePoint, ouvrez SharePoint Designer 2010 et rendez­vous dans la partie Types de contenu externe.

Et demandez la création d’un nouveau type de contenu.

Assignez tout d’abord un nom et une description à votre nouveau type de contenu.

- 1 -

Page 175: Developpez en .Net Pour Sharepoint

Ensuite, choisissez un type d’élément Office.

Par défaut les listes externes seront synchronisées avec les clients Office comme de simples listes. Cependant, il est également possible, par exemple, de les définir comme des contacts. Cela aura pour effet de permettre la synchronisation des éléments de votre table SQL sous forme de contacts dans Outlook.

Voici la liste des types d’éléments Office :

Maintenant que le nom, la description et le type d’élément sont définis, il faut configurer la connexion vers la base de données.

Cliquez sur le lien suivant :

Après avoir configuré les paramètres de connexion vers votre base de données, tous les éléments de celle ci seront affichés.

Faites un clic droit sur votre table et choisissez Créer toutes les opérations.

- 2 -

Openmirrors.com

Page 176: Developpez en .Net Pour Sharepoint

Cela va démarrer un assistant qui vous aide à générer automatiquement toutes les méthodes nécessaires pour lire, créer, modifier et supprimer des éléments dans votre table. Pour compléter cet assistant, rien de plus simple, il suffit de suivre les erreurs et de les corriger une par une.

Tout d’abord, SharePoint Designer vous demande de mapper les colonnes de votre table SQL avec des propriétés Office. Rappelez­vous, nous avons défini que notre liste pouvait être utilisée comme liste de contacts Office, il faut donc établir le lien entre SQL et Office pour chaque champ.

- 3 -

Page 177: Developpez en .Net Pour Sharepoint

Cliquez sur suivant. Cet écran vous permet de définir un filtre afin de ne pas retourner toutes les lignes de votre table dans SharePoint. Dans notre cas nous ne définirons pas de filtre. Terminez donc l’assistant.

Toutes les opérations ont bien été créées. Sauvez votre type de contenu externe.

Il est possible de définir des permissions pour chaque type de contenu externe depuis l’administration centrale de SharePoint 2010.

3. Les listes externes

Les listes externes sont créées à partir d’un type de contenu externe et sont extrêmement proches des listes standard utilisées dans SharePoint. Elles permettent l’affichage et la modification des données externes via l’interface SharePoint, de manière totalement transparente pour l’utilisateur.

Pour créer une nouvelle liste externe, restez dans SharePoint Designer 2010 dans la partie Types de contenu externe.

Créez une nouvelle liste externe.

- 4 -

Openmirrors.com

Page 178: Developpez en .Net Pour Sharepoint

Définissez ensuite un nom pour votre nouvelle liste.

Ouvrez à présent votre site pour tester la nouvelle liste

Notez que la création de listes externes est également possible depuis l’interface de SharePoint.

- 5 -

Page 179: Developpez en .Net Pour Sharepoint

Pour terminer, nous allons tester que, contrairement à SharePoint 2007 et BDC, BCS est bien bidirectionnel Pour cela, ajoutez un nouvel élément à votre liste.

- 6 -

Openmirrors.com

Page 180: Developpez en .Net Pour Sharepoint
Page 181: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 182: Developpez en .Net Pour Sharepoint
Page 183: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 184: Developpez en .Net Pour Sharepoint
Page 185: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 186: Developpez en .Net Pour Sharepoint

causer des problèmes en modifiant l’état de la page maître. En effet, dans SharePoint, les fichiers de type .js, .master, .aspx sont par défaut en état « UnCustomized ». Toute modification de ceux­ci via SharePoint Designer entraîne un changement d’état vers l’état « Customized ».

En prenant une page maître comme objet de référence, voici quelques explications concernant ces deux états :

La page maître affichée dans le navigateur tire sa source du fichier physique déployé dans la racine SharePoint.

La version physique de la page maître est sauvegardée en base de données de contenu en incluant vos modifications Ceci a deux impacts majeurs

Si une nouvelle version physique de la page maître est déployée sur les serveurs SharePoint, elle n’aura pas d’impact sur les instances « customized », ce sera donc toujours la version customized qui sera chargée.

Une version customized ajoute une baisse de performance au niveau du serveur SQL car pour chaque page chargée, des allers/retours supplémentaires vers le serveur SQL sont réalisés.

L’usage de SharePoint Designer doit donc se faire en toute connaissance de cause. Je préconise d’utiliser SharePoint Designer en tant qu’outil sur un environnement de développement, d’exporter ce travail vers Visual Studio et enfin de le déployer dans SharePoint via des solutions (en tout cas, en ce qui concerne les manipulations liées aux pages maîtres).

b. Avec Visual Studio

Visual Studio offre la possibilité d’empaqueter vos pages maîtres dans des solutions SharePoint et c’est dans ce but précis qu’il est intéressant de l’utiliser.

SharePoint Designer reste à mon sens plus pratique pour modifier/tester les changements apportés à une page maître car il offre une interface graphique parfaitement intégrée à SharePoint et permet de tester ses modifications en temps réel (sur un environnement de développement bien sûr).

Il est fréquent de concevoir/modifier une page maître avec SharePoint Designer et ensuite d’en récupérer le code afin de l’inclure dans une solution Visual Studio.

Maintenant que vous connaissez les principaux contrôles utilisés par les pages maîtres, voici un exemple montrant comment créer un contrôle délégué personnel, l’encapsuler dans une page maître et déployer celle­ci via une fonctionnalité SharePoint.

Une autre fonctionnalité, si elle est active, indiquera à SharePoint si le contrôle délégué est fourni à la page maître par le site courant. Le contrôle se chargera d’afficher certaines informations relatives à l’utilisateur courant tel qu illustré ci dessous

Commencez par :

Créer un projet Visual Studio de type SharePoint.

Uncustomized

Customized

- 3 -

Page 187: Developpez en .Net Pour Sharepoint

Ajouter un répertoire mappé pointant vers 14\TEMPLATE\CONTROLTEMPLATES.

Ajouter une fonctionnalité nommée PageMaitre, son scope doit être Site

Ajouter une fonctionnalité nommée ContDelegue, son scope doit être Web.

- 4 -

Openmirrors.com

Page 188: Developpez en .Net Pour Sharepoint

Ajouter deux éléments vides, l un nommé ContDelegue et l autre PageMaitre

Dans l’élément PageMaitre, ajouter un fichier existant et rechercher le fichier v4.master se trouvant dans la racine SharePoint, dans le dossier 14\TEMPLATE\LAYOUTS. Renommer le fichier en ma­v4.master.

Vous devez obtenir une structure de solution similaire à celle ci

Ensuite, liez les fonctionnalités aux éléments correspondants. Par exemple, pour la fonctionnalité PageMaitre qui doit être liée à l’élément PageMaitre : en double cliquant sur la fonctionnalité, vous avez la possibilité d’inclure les éléments :

- 5 -

Page 189: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 190: Developpez en .Net Pour Sharepoint
Page 191: Developpez en .Net Pour Sharepoint

- 8 -

Openmirrors.com

Page 192: Developpez en .Net Pour Sharepoint
Page 193: Developpez en .Net Pour Sharepoint

Openmirrors.comOpenmirrors.com

Page 194: Developpez en .Net Pour Sharepoint
Page 195: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 196: Developpez en .Net Pour Sharepoint
Page 197: Developpez en .Net Pour Sharepoint

En l’occurrence, on veut récupérer tous les événements présents ou à venir dont la localisation se passe à l’endroit saisi par l’utilisateur.

On exécute la requête via jQuery et plus précisément via l’instruction $ajax à laquelle on précise que la méthode de callback est LireReponse. Dans cette méthode, on analyse le flux XML retourné et, pour chaque ligne, on extrait l’attribut ID.

Dans le markup HTML généré par SharePoint pour afficher son calendrier, il attribue des classes CSS spécifiques. C’est grâce à celles­ci que l’on peut, via jQuery, retrouver les éléments du calendrier dont l’ID a été retourné par le service Web.

Dans le code source disponible en téléchargement, vous trouverez une solution complète implémentant le calendrier. Mais si vous exécutiez le code ci­dessus directement dans un WebPart éditeur de contenu standard, cela fonctionnerait ; pour autant bien sûr que vous appeliez la fonction ChercherEvenements avec les bons paramètres.

Ceci démontre qu’il n’est pas nécessaire de déployer du code « serveur » car grâce à JavaScript, et plus particulièrement à jQuery, vous pouvez directement travailler avec les services web. Outre l’amélioration de l’expérience utilisateur, cela permet également d’éviter de passer par un cycle de développement/test/recette/mise en production.

De plus, travailler avec les services .ASMX est 100% standard en SharePoint 2007 et ne nécessite aucune modification relative à l’infrastructure. Pour 2010, préférez néanmoins les services WCF.

En résumé, pour travailler via jQuery avec les services .ASMX de SharePoint, vous devez :

Localiser jquery.min.js ou toute autre forme du framework en fonction de l’intégration de jQuery au sein de la ferme sur laquelle vous travaillez et le référencer si nécessaire.

Dans votre propre script, vous devrez toujours ajouter _vti_bin/xxx.asmx à l’URL du site sur lequel vous souhaitez appliquer un traitement.

Utiliser la fonction $ajax de jQuery.

Définir une fonction de callback qui sera appelée par $ajax lorsque le service aura retourné sa réponse. Celle­ci sera systématiquement retournée au format XML que vous devrez donc analyser.

- 6 -

Openmirrors.com

Page 198: Developpez en .Net Pour Sharepoint

SharePoint et Silverlight

1. Introduction

Silverlight est une technologie qui a gagné en maturité. La version actuelle est d’ailleurs la 4.0.

Étant donné sa popularité grandissante, on va sans doute rapidement voir un bon nombre de composants Silverlight interagir avec SharePoint, que ce soit sous forme de WebPart, d’applicatif clients purs, de contrôles embarqués dans les vues de formulaires, etc.

Microsoft, avec SharePoint 2010, a bien pris en compte cet engouement et a largement facilité l’intégration native de composants Silverlight, contrairement à la version 2007 où le défi était de taille (dans la mesure où il ne suffisait pas de développer les composants, il fallait également s’assurer que l’infrastructure de la ferme disposait des DLL nécessaires).

En outre, aucun outil standard ne permettait de visualiser une animation déjà réalisée. Microsoft a donc principalement intégré Silverlight dans SharePoint 2010 de la manière suivante :

L’infrastructure (web.config, GAC, IIS) est déjà configurée nativement pour pouvoir exécuter des applications Silverlight.

Un nouveau WebPart standard permet de lire des applications Silverlight.

Une API spécifique du Modèle Objet Client pour Silverlight est mise à disposition.

2. Utilisation du WebPart Silverlight

Le WebPart standard mis à disposition par SharePoint 2010 permet d’intégrer une animation Silverlight. Il offre la possibilité de charger le fichier XAP et, optionnellement, de lui transmettre des paramètres.

Pour illustrer son utilisation, nous allons développer une animation très simple qui affiche la valeur reçue en paramètre.

Créez un projet Visual Studio de type Application Silverlight

Nommez le CHAP07 Silverlight

Vous obtenez la structure de projet suivante :

Double cliquez sur MainPage.xaml et activez la vue code. Insérez­y le code suivant :

- 1 -

Page 199: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 200: Developpez en .Net Pour Sharepoint

Vous obtenez ce résultat :

Allez dans les paramètres du WebPart et configurez­le comme suit :

Vous obtenez :

- 3 -

Page 201: Developpez en .Net Pour Sharepoint

Le paramètre a donc bien été transmis à l’animation et celle­ci est correctement chargée par SharePoint.

3. Création d’une animation Silverlight

Dans le chapitre Manipuler les données dans SharePoint, nous avons vu comment faire interagir une application Silverlight externe à SharePoint sans intégrer réellement celle­ci au sein de SharePoint.

4. Dialogue avec le Modèle Objet Client

Le Modèle Objet Client pour Silverlight est largement détaillé dans le chapitre Manipuler les données dans SharePoint. Reportez­vous à celui­ci si vous souhaitez réaliser des applications plus complexes dépassant le cadre de la simple intégration « visuelle » d’une application Silverlight dans SharePoint.

- 4 -

Openmirrors.com

Page 202: Developpez en .Net Pour Sharepoint
Page 203: Developpez en .Net Pour Sharepoint

solution de ferme. Le déploiement dans le répertoire LAYOUTS n’est pas autorisé par les sandboxed solutions.

La structure de votre nouveau projet sera générée dans Visual Studio.

Ajoutez un nouveau composant à votre solution, il s’agit d’une page applicative.

Appelez­la MaNouvellePageApplicative.aspx.

- 2 -

Openmirrors.com

Page 204: Developpez en .Net Pour Sharepoint

Une nouveauté indiscutablement appréciable dans Visual Studio 2010 est la prise en charge parfaite des développements SharePoint. Cela vous fera sans aucun doute économiser énormément de temps !

Rappelez­vous avec SharePoint 2007 et Visual Studio 2008 : la simple création d’une page applicative nécessitait une série d’étapes manuelles et fastidieuses, notamment pour assurer le déploiement de celle­ci via une solution. Visual Studio 2010 automatise toutes ces étapes !

Toutes les références nécessaires sont ajoutées au projet.

Un répertoire Layouts est ajouté au projet. Il sera automatiquement mappé avec le répertoire LAYOUTS du SharePoint root. Dans cet exemple, un sous­répertoire portant le nom de votre projet a également été créé et la page y a été placée.

Le projet contient également une définition de solution pour le déploiement et la page y a été ajoutée.

- 3 -

Page 205: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 206: Developpez en .Net Pour Sharepoint
Page 207: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 208: Developpez en .Net Pour Sharepoint
Page 209: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 210: Developpez en .Net Pour Sharepoint

Cette action sera imbriquée dans une fonctionnalité (feature). Ajoutez donc une nouvelle feature à votre solution dans Visual Studio.

Pour en savoir plus sur les features, reportez­vous au chapitre de ce livre consacré au déploiement.

Le feature sera le conteneur de votre action personnalisée mais pas l’action elle­même. Il faut donc ajouter un élément vide à votre projet.

- 2 -

Page 211: Developpez en .Net Pour Sharepoint

Openmirrors.com

Openmirrors.com

Openmirrors.com

Page 212: Developpez en .Net Pour Sharepoint
Page 213: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 214: Developpez en .Net Pour Sharepoint
Page 215: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 216: Developpez en .Net Pour Sharepoint
Page 217: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 218: Developpez en .Net Pour Sharepoint
Page 219: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 220: Developpez en .Net Pour Sharepoint
Page 221: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 222: Developpez en .Net Pour Sharepoint
Page 223: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 224: Developpez en .Net Pour Sharepoint
Page 225: Developpez en .Net Pour Sharepoint

Lorsque vous choisissez le type souhaité, le bas de votre écran se rafraîchit en vous proposant les caractéristiques de configuration correspondant au type sélectionné.

Pour le type Une seule ligne de texte, vous obtenez l’écran de propriétés suivant :

Ensuite, vous validez l’ajout de la colonne à la liste et vous êtes en mesure de l’utiliser. Cette utilisation passe par les étapes d’encodage d’un nouvel élément dans la liste, d’édition des propriétés de la colonne et d’affichage de la colonne en mode liste et en mode détaillé comme illustré ci­dessous :

- 3 -

Openmirrors.com

Page 226: Developpez en .Net Pour Sharepoint
Page 227: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 228: Developpez en .Net Pour Sharepoint
Page 229: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 230: Developpez en .Net Pour Sharepoint

Saisie de données :

Affichage en mode liste :

Affichage en mode détaillé :

- 8 -

Page 231: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 232: Developpez en .Net Pour Sharepoint
Page 233: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 234: Developpez en .Net Pour Sharepoint
Page 235: Developpez en .Net Pour Sharepoint

Saisie de données :

Affichage en mode liste :

Notez que cette traduction ne fonctionne que sur le premier mot composant le titre. C’est simplement un exemple.

- 13 -

Openmirrors.com

Page 236: Developpez en .Net Pour Sharepoint
Page 237: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 238: Developpez en .Net Pour Sharepoint
Page 239: Developpez en .Net Pour Sharepoint

Procédez comme indiqué dans le premier exemple pour la signature et le déploiement de l’assemblage. Copiez le contrôle utilisateur dans le répertoire :

C:\Program Files\Fichiers Communs\Microsoft Shared\Web server extensions\14\TEMPLATE\CONTROLTEMPLATES

Redémarrez IIS ou le pool d’applications.

Saisie d’une donnée :

Vous constatez qu’il n’est plus possible de saisir des caractères accentués, etc.

b. Gérer les propriétés d’une colonne personnelle

Jusqu’à présent, vous avez vu comment créer des colonnes personnelles sans gérer de contrôles utilisateur .ascx. Pour pouvoir gérer les propriétés d’une colonne personnelle, quel qu’en soit le type, il faut créer un contrôle utilisateur et son code­behind associé. Les propriétés permettent de configurer la colonne afin de définir son comportement. En repartant du tableau de composants illustré en section B 3, il est aisé de constater que les composants à implémenter sont <nomcolonneeditor>.ascx et <nomcolonne>FieldEditor.cs.

Voici quelques captures d’écran illustrant les propriétés d’une colonne standard de type lookup (recherche).

Ajout de la colonne à une liste :

Résultat

- 17 -

Openmirrors.com

Page 240: Developpez en .Net Pour Sharepoint

En choisissant le type Recherche, SharePoint rafraîchit la page et affiche le panneau de propriétés suivant :

Ce panneau correspond précisément au contrôle utilisateur qu’il faut implémenter lorsqu’une colonne personnelle expose des propriétés spécifiques.

Quel que soit le type de colonne dont vous dérivez, seules les propriétés Description et Champ Obligatoire restent utilisables sans implémentation spécifique. Toutes les autres propriétés doivent être implémentées

dans votre contrôle utilisateur si vous souhaitez en disposer.

Afin de mettre en évidence la gestion des propriétés, la manipulation que vous allez réaliser consiste à créer une colonne personnelle de type lookup permettant de pointer vers une liste du site courant ou optionnellement vers une liste d’un autre site.

La sélection de cette liste ou de la colonne cible est gérée dans le contrôle utilisateur <nomcolonneeditor>.ascx et

Créer une colonne de type lookup

- 18 -

Page 241: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 242: Developpez en .Net Pour Sharepoint
Page 243: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 244: Developpez en .Net Pour Sharepoint
Page 245: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 246: Developpez en .Net Pour Sharepoint

using System.Web.UI.WebControls; namespace Chap02.ColonnesPersonnelles class ColonneRechercheFieldEditor : UserControl, IfieldEditor protected CheckBox EtendreCollection; protected DropDownList SiteSource; protected DropDownList ListeSource; protected DropDownList ColonneSource; bool IfieldEditor.DisplayAsNewSection getreturn true; /// <summary> /// Configure les différents contrôles. /// </summary> protected override void CreateChildControls() EtendreCollection.Enabled = false; SiteSource.Enabled = false; ListeSource.Enabled = false; ColonneSource.Enabled = false; if (!Page.IsPostBack) //Si la portée == site courant if (!EtendreCollection.Checked) RemplirWeb(); else //Sinon, afficher tous les sites de la collection RemplirWebs(SPContext.Current.Site.RootWeb); using (SPSite Site = new SPSite(SiteSource.SelectedItem.Value)) using (SPWeb Web = Site.OpenWeb()) RemplirListe(Web.Lists); else //Si la page est postée et si la portée != site courant //rendre liste site utilisable if (EtendreCollection.Checked) SiteSource.Enabled = true; base.CreateChildControls(); void IFieldEditor.InitializeWithField(SPField field) EnsureChildControls(); ColonneRecherche InstanceCourante = field as ColonneRecherche; if (InstanceCourante == null) EtendreCollection.Enabled = true; ListeSource.Enabled = true; ColonneSource.Enabled = true; else EtendreCollection.Checked = InstanceCourante.EtendreCollection;

- 24 -

Page 247: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 248: Developpez en .Net Pour Sharepoint

personnelles, en l’occurrence, la propriété EtendreCollection.

L’attribut Hidden de celle­ci est défini à TRUE sinon SharePoint afficherait automatiquement une case à cocher (valeur booléenne) mais, comme mentionné préalablement, SharePoint ne « retient » pas la valeur de la propriété lors de la modification de la colonne. Il est donc préférable de cacher la propriété afin qu’il n’affiche aucun contrôle. Dans cet exemple, le contrôle est affiché dans le contrôle utilisateur ColonneRechercheFieldEditor.ascx.

Les bonnes pratiques en matière de déploiement sont expliquées dans le chapitre intitulé « Outils/Composants d’administration et bonnes pratiques de déploiement ».

Procédez comme indiqué dans le premier exemple. Copiez le contrôle utilisateur dans le répertoire :

C:\Program Files\fichierscommuns\Microsoft Shared\ Web server extensions\14\TEMPLATE\CONTROLTEMPLATES

Redémarrez IIS ou le pool d’applications associé à votre application.

Ajout de la colonne à une liste :

Propriétés de la colonne :

Déploiement

Résultat

- 26 -

Page 249: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 250: Developpez en .Net Pour Sharepoint
Page 251: Developpez en .Net Pour Sharepoint

Openmirrors.com

Openmirrors.com

Page 252: Developpez en .Net Pour Sharepoint
Page 253: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 254: Developpez en .Net Pour Sharepoint
Page 255: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 256: Developpez en .Net Pour Sharepoint
Page 257: Developpez en .Net Pour Sharepoint

ne fonctionne qu’avec les colonnes standard.

Il n’est pas possible de spécifier une portée limitée, par exemple à un site ou à une collection, comme c’est le cas pour une fonctionnalité (feature). Si la colonne est rendue visible lors de l’ajout d’une colonne, c’est donc automatiquement pour toute la ferme. La seule alternative est de ne pas la rendre visible dans le fichier FLDTYPES…xml, de la déployer comme colonne de site et/ou au sein d’un type de contenu. La colonne de site pouvant être déployée via une fonctionnalité de site, on restreint ainsi un type de colonne à un site particulier.

Il n’est pas possible de créer une colonne standard de type recherche (lookup) sur une colonne personnelle. Il est par contre possible de créer sa propre lookup pour cela.

9. Résumé

Dans ce chapitre, vous avez appris :

À développer des colonnes personnelles simples.

À gérer des propriétés personnelles.

À intégrer du code client dans les colonnes personnelles.

À évaluer les avantages et les désavantages de l’usage des colonnes personnelles.

- 35 -

Openmirrors.com

Page 258: Developpez en .Net Pour Sharepoint
Page 259: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 260: Developpez en .Net Pour Sharepoint
Page 261: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 262: Developpez en .Net Pour Sharepoint
Page 263: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 264: Developpez en .Net Pour Sharepoint
Page 265: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 266: Developpez en .Net Pour Sharepoint
Page 267: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 268: Developpez en .Net Pour Sharepoint
Page 269: Developpez en .Net Pour Sharepoint

Composants d’administration et bonnes pratiques de déploiement.

5. Résumé

La gestion d’événements dans SharePoint permet d’étendre une grande majorité des actions provoquées par l’utilisateur. De plus, elle permet aussi d’annuler certaines actions avant la fin de leur exécution et ceci en avertissant ou non l’utilisateur.

Dans cette section vous avez appris à :

Identifier les différents événements déclenchés par SharePoint.

Développer votre propre gestion d’événements.

Annuler une opération en cours.

Attacher du code à une fonctionnalité.

Déployer vos assemblages sur votre serveur.

- 12 -

Openmirrors.com

Page 270: Developpez en .Net Pour Sharepoint

Les WebPart

1. Introduction

L’avancée majeure en matière de construction de WebPart dans SharePoint 2010 est la possibilité de les définir graphiquement à l’aide de Visual Studio. Fini le temps où l’on créait tous ses WebPart en tapant des centaines de lignes de code.

Fini… ou presque, malheureusement les WebPart visuels ne sont pas compatibles avec un déploiement de type sandboxed solution. Il reste donc parfois nécessaire de construire les WebPart à l’aide de code exclusivement.

a. Qu’est ce qu’un WebPart ?

Concrètement un WebPart est un contrôle serveur ASP.NET. Son code se trouve dans une classe héritant de System.Web.UI.WebControls.WebParts.WebPart.

Les WebPart sont destinés à se trouver dans une WebPartZone. Ils interagissent avec le WebPartManager se trouvant dans la page maître de SharePoint.

En réalité, la notion de WebPart n est pas propre à SharePoint, cette technologie existe depuis le Framework NET 2.0. SharePoint ne fait donc que l’intégrer afin de rendre ses pages personnalisables et modulables.

Cependant, SharePoint ajoute quelques fonctionnalités importantes aux WebPart, entre autres au niveau de la sécurité et de la personnalisation.

b. Le cycle de vie d’un WebPart

Avant de commencer réellement le développement d’un WebPart, il est important de comprendre son cycle de vie : les étapes nécessaires à la page pour l’afficher.

Voici les principales étapes nécessaires au chargement d’un WebPart :

OnInit

Initialisation du contrôle.

OnLoad

Chargement du contrôle dans la page.

OnPreRender

Gère toutes les tâches qui doivent absolument être accomplies avant l’affichage du contrôle telles que le chargement de données.

CreateChildControls

À surcharger si vous souhaitez ajouter des contrôles serveur ASP.NET tels qu’un bouton par exemple.

Render

Cette méthode gère l’affichage du contrôle.

RenderControl

Gère l’affichage des contrôles serveur ASP.NET. Si vous avez surchargé la méthode Render, vous devez impérativement faire appel à cette méthode pour créer les contrôles.

RenderContents

Vous permet d’injecter du code HTML directement dans votre contrôle au chargement.

2. Les WebPart visuels avec Visual Studio 2010

Créez un nouveau projet dans Visual Studio. Choisissez le template Visual Webpart :

- 1 -

Page 271: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 272: Developpez en .Net Pour Sharepoint
Page 273: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 274: Developpez en .Net Pour Sharepoint
Page 275: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 276: Developpez en .Net Pour Sharepoint
Page 277: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 278: Developpez en .Net Pour Sharepoint
Page 279: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 280: Developpez en .Net Pour Sharepoint
Page 281: Developpez en .Net Pour Sharepoint

Openmirrors.com

Page 282: Developpez en .Net Pour Sharepoint
Page 283: Developpez en .Net Pour Sharepoint

Le SPGridView n’accepte pas la valeur True pour sa propriété AutoGenerateColumns, il est donc obligatoire d’ajouter les colonnes manuellement dans le code.

Compilez et déployez votre solution. Ajoutez le WebPart sur une page de votre site.

Le SPGridView offre une manière simple et rapide de présenter dans un tableau des données provenant de SharePoint ou de l’extérieur. Il permet aussi de conserver l’apparence de son site.

- 14 -

Openmirrors.com

Page 284: Developpez en .Net Pour Sharepoint

Manipuler les données dans SharePoint 2010

À la fin de ce chapitre, vous serez capable d’exploiter les différentes techniques permettant d’accéder aux données stockées dans SharePoint.

1. Introduction

Une des évolutions majeures du modèle de données de SharePoint 2010 par rapport à SharePoint 2007 réside dans sa capacité à gérer nativement des relations entre données provenant de différentes listes et à garantir l’intégrité de celles­ci, ce qui facilite grandement la modélisation des données.

Dans SharePoint 2007, pour simuler l’intégrité référentielle, il fallait impérativement implémenter une solution personnelle ou utiliser des outils tiers. Il était souvent laborieux de mettre en place ce type de solution.

SharePoint 2010 stocke ses données au sein d’un gestionnaire de bases de données, en l’occurrence SQL Server 2008 64 bits. Tous les objets SharePoint tels que des sites, des listes, des bibliothèques ainsi que les documents qu’elles contiennent sont stockés dans une ou plusieurs bases de données appelées Bases de contenu ou Content Databases.

Presque tous les éléments d’une ferme SharePoint sont stockés dans le(s) serveur(s) de données. Seules quelques ressources sont physiquement présentes sur les disques durs des différents serveurs composant la ferme.

Le serveur SQL représente le cœur de l’architecture d’une ferme SharePoint. Avant toute implémentation Intranet/Extranet/Internet/applicatif, qu’elle soit standard ou qu’elle recourt à du code personnel, une analyse est requise afin d’assurer un bon niveau de service et d’éviter bien des écueils. Cette analyse peut porter sur la planification de capacité, la gestion des copies de backup/restore et toute une série d’opérations d’infrastructure.

Toutes ces précautions ciblent principalement SQL Serveur. Pour manipuler les données dans SharePoint, Microsoft recommande de ne jamais requêter directement le serveur SQL mais plutôt d’utiliser les différentes API (Application Programming Interface) mises à disposition par le framework SharePoint 2010. Ces API sont :

Le langage CAML (Collaborative Application Makup Language) qui permet notamment la création de requêtes (CAML Query) qui sont ensuite transformées en T­SQL (Transact SQL) par l’API ou les services web du système.

La toute nouvelle API (Application Programming Interface) LINQ (Language Integrated Query) est une couche d’abstraction permettant de travailler avec des objets .NET. Ceux­ci génèrent du code CAML qui est lui­même ensuite transformé en T­SQL.

Les différents services web ASP.NET et WCF (Windows Communication Foundation) permettant d’accéder aux données.

Enfin, même s’il est techniquement possible de se connecter aux bases de données SharePoint directement via SQL Serveur, voici quelques raisons qui permettent de comprendre pourquoi il vaut mieux proscrire cette pratique :

Le schéma d’une base de données de contenu étant susceptible d’être altéré lors de mises à jour du système (hotfix, service pack etc.), la pérennité de tout composant attaquant directement une base de données de contenu ou de configuration se voit automatiquement remise en cause.

Tout ordre DML pourrait modifier de manière inattendue les données stockées, voire entrer en conflit avec des mises à jour faites par SharePoint lui­même. Ceci peut entraîner des problèmes graves mettant en péril l’utilisation d’une ferme entière.

Toute requête, même en lecture seule, pourrait avoir des effets de bord en termes de verrouillage de tables/lignes entraînant des problèmes d’accès aux données pour SharePoint lui­même.

À l’issue de ce chapitre, vous connaîtrez les principales caractéristiques du langage CAML, de la nouvelle API LINQ et des autres techniques de manipulation de données dans SharePoint 2010.

2. Le nouveau modèle relationnel

Avant de s’intéresser de plus près au code, voyons comment est organisé le modèle relationnel de SharePoint 2010.

Pour ce faire, nous allons tout simplement créer pas à pas l’environnement de données que nous allons utiliser durant tout le chapitre. Ceci facilitera la compréhension des exemples et permettra d’appréhender rapidement la manière de

- 1 -

Page 285: Developpez en .Net Pour Sharepoint

modéliser ses données dans SharePoint 2010.

Après avoir créé une collection de sites spécifique basée sur le modèle « Site Vide », vous vous retrouvez devant un écran similaire à celui­ci :

C’est­à­dire un site dont la structure est encore vierge.

Votre site Clients doit contenir trois listes liées entre elles :

Une liste de pays.

Une liste de villes liée à la liste des pays.

Une liste de clients liée à la liste des villes.

Vous disposerez également d’une bibliothèque de documents. Commencez par créer la liste des pays :

Ajoutez une colonne Description et une colonne Superficie, de manière à obtenir ceci :

Créez à présent la liste des villes, celle­ci doit être liée à la liste des pays pour indiquer à quel pays appartient chaque ville.

Procédez comme pour la liste des pays puis ajoutez une colonne de type Recherche nommée Pays :

- 2 -

Openmirrors.com

Page 286: Developpez en .Net Pour Sharepoint

pointant vers la liste des pays :

Lorsque l’on applique le comportement des relations, en fonction du mode choisi SharePoint veillera à, soit empêcher un élément référencé d’être supprimé, soit à supprimer l’élément référencé et toutes ses relations.

Lorsque l’on valide, SharePoint demande la confirmation suivante :

Il faut bien sûr confirmer. Afin de garantir une rapidité d’exécution convenable et éviter une surcharge inutile au niveau du moteur SQL, SharePoint crée en effet un index au niveau de la base de données.

Lorsqu’une relation de type Supression limitée est mise en œuvre et que l’on essaye de supprimer une entrée liée à un autre élément (en l’occurrence, un pays associé à une ville), SharePoint affiche ce message d’erreur :

- 3 -

Openmirrors.com

Openmirrors.com

Page 287: Developpez en .Net Pour Sharepoint

Programmatiquement, une exception de type SPException est levée si l’on tente de supprimer un élément lié à un autre et que l’intégrité référentielle est appliquée.

La liste des villes doit au final ressembler à ceci :

Terminez avec la liste des clients. Elle doit contenir une colonne liée à la liste des villes avec le même type de relation que précédemment et doit, au final, ressembler à ceci :

La colonne Age est simplement là pour effectuer des mises à jour décrites plus loin dans l’ouvrage.

Voilà ! Votre environnement de données est créé. Vous pouvez à présent examiner comment l’exploiter au travers des différentes API.

- 4 -

Openmirrors.com