299 88 44MB
French Pages 456 [287] Year 2010
SharePoint 2010 Développez en .NET pour personnaliser SharePoint
Stéphane EYSKENS Ludovic LEFORT
Résumé 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 plateforme 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
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.
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.
- 1-
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com É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
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com quasiment incontournable avec SharePoint 2007. Par contre, SPLINQ étant une couche d’abstraction supplémentaire générant ellemê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 ceuxci 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 -
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 ceuxci. 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 cellesci, 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 backend 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-
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com List ListeClients = new List(); 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
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. Celuici 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 nongestion 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ù celleci 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-
À 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 luimê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-
Openmirrors.com 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-
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 cidessus, 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:///_vti_bin/ListData.svc/(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. Ceuxci 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-
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com 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
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 luimê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-
Openmirrors.com
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 celuici 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 celuici. 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-
Les flux de travail en mode déclaratif 1. Présentation de SharePoint Designer 2010 Dans cette section vous allez découvrir quelquesunes 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-
Openmirrors.com
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-
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-
Openmirrors.com
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-
Soit en utilisant le ruban Office
Ajoutez et configurez l’action Envoyer un courrier électronique :
- 5-
Openmirrors.com
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 vousmê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-
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-
Openmirrors.com
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-
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-
Openmirrors.com
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
Choisissez le flux de travail que vous venez de créer et associezle à 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 luimê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
Publiez à nouveau votre flux de travail et démarrezle 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
Openmirrors.com
Effectuez quelques modifications de style et renvoyezle 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, reportezvous à 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 ●
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 -
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.
© ENI Editions - All rigths reserved - Openmirrors.com
- 1-
Openmirrors.com
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
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
© ENI Editions - All rigths reserved - Openmirrors.com
- 3-
Openmirrors.com 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
Openmirrors.com
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 jusquelà é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-
Openmirrors.com
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 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 = ""; Requete.Query += SPUtility.CreateISO8601DateTimeFromSystemDateTime( DateTime.Now.AddDays(-1)).ToString(); Requete.Query+= ""; 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
Openmirrors.com 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é cidessous :
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
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
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 plateforme à 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 plateforme 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 plateforme SharePoint 2010.
- 1-
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
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-
●
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 sousré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 plateforme 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-
Openmirrors.com
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 cidessous :
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
Openmirrors.com 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-
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 ceuxci.
●
À 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-
Openmirrors.com
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èreplan et disponibles par tous les composants de votre ferme.
Dans ce chapitre, nous allons aborder quelquesuns de ces services, plus précisément les services permettant d’interagir avec les produits de la gamme Office 2010.
- 1-
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émarrezle :
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, rendezvous dans la centrale d’administration de SharePoint dans la partie Gérer les applications de service et ensuite dans la partie Excel Services.
- 1-
Openmirrors.com
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-
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-
Openmirrors.com
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-
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 cellesci. 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-
Openmirrors.com
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
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 : ●
●
- 8-
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.
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-
Openmirrors.com
- 10 -
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 luimê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-
Openmirrors.com 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-
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 stringlength retourne la longueur d’un texte, le point (.) quant à lui signifie que la fonction sera appliquée sur le champ luimême, autrement dit celui sur lequel la règle est appliquée. Voici donc à quoi doit ressembler votre nouvelle règle :
- 3-
Openmirrors.com
Voyons ensuite comment publier notre formulaire modifié. Comme pour l’édition de celuici, 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
L’assistant vous demande alors de définir le site cible, c’estàdire le site sur lequel le formulaire sera déployé.
Openmirrors.com
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 appelezla Mon Application.
- 5-
Openmirrors.com
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-
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-
Openmirrors.com
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 luimê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-
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-
Openmirrors.com
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 -
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 testezle. 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 luimê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 -
Openmirrors.com
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. Rendezvous 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 -
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 ceuxci 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 -
Openmirrors.com 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 connectezla à votre liste de salutation.
- 14 -
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 -
Openmirrors.com
Openmirrors.com
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.
Ajoutezy un conteneur afin de garder vos serveurs groupés :
- 1-
Openmirrors.com
Openmirrors.com
Vous pouvez maintenant ajouter vos quatre serveurs sur le diagramme comme ceci :
Openmirrors.com
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-
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-
Openmirrors.com
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 enregistrezle localement.
- 4-
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 celuici 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 : Estce que le serveur est opérationnel ?
●
Patch : Le serveur atil é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-
Openmirrors.com 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 : ●
- 6-
Afficher le nom du serveur dans le graphique.
●
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 glisserdé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-
Openmirrors.com
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-
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-
Openmirrors.com
Openmirrors.com
{ private object asyncState; fournisseur private bool completed;
//reference vers ce
#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 -
Openmirrors.com
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 plateforme, 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 rendezvous 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émarrezle.
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-
Openmirrors.com
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-
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-
Openmirrors.com
Openmirrors.com
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
Openmirrors.com
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-
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 rendezvous 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-
Openmirrors.com
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-
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. Rappelezvous, 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-
Openmirrors.com
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-
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-
Openmirrors.com
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
Openmirrors.com
Openmirrors.com
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 ceuxci 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 : Uncustomized La page maître affichée dans le navigateur tire sa source du fichier physique déployé dans la racine SharePoint. Customized 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 celleci 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.
- 3-
Openmirrors.com
■
Ajouter un répertoire mappé pointant vers 14\TEMPLATE\CONTROLTEMPLATES.
■
Ajouter une fonctionnalité nommée PageMaitre, son scope doit être Site
■
- 4-
Ajouter une fonctionnalité nommée ContDelegue, son scope doit être Web.
■
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 mav4.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-
Openmirrors.com
Openmirrors.com
- 8-
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com 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 à cellesci 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 cidessus 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 : ●
●
●
●
- 6-
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.
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érezy le code suivant :
- 1-
Openmirrors.com
Vous obtenez ce résultat :
Allez dans les paramètres du WebPart et configurezle comme suit :
Vous obtenez :
- 3-
Openmirrors.com
Le paramètre a donc bien été transmis à l’animation et celleci 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 celleci 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. Reportezvous à celuici 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 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.
Appelezla MaNouvellePageApplicative.aspx.
- 2-
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 ! Rappelezvous 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 celleci 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 sousré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-
Openmirrors.com
Openmirrors.com
Openmirrors.com
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, reportezvous au chapitre de ce livre consacré au déploiement. Le feature sera le conteneur de votre action personnalisée mais pas l’action ellemême. Il faut donc ajouter un élément vide à votre projet.
- 2-
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
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é cidessous :
- 3-
Openmirrors.com
Openmirrors.com
Saisie de données :
Affichage en mode liste :
Affichage en mode détaillé :
- 8-
Openmirrors.com
Openmirrors.com
Openmirrors.com
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
Openmirrors.com ■
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.
Résultat 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 codebehind 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 .ascx et 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 :
- 17 -
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.
Créer une colonne de type lookup 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 .ascx et - 18 -
Openmirrors.com
Openmirrors.com
Openmirrors.com
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 { get{return true;} } /// /// Configure les différents contrôles. /// 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 -
Openmirrors.com
personnelles, en l’occurrence, la propriété EtendreCollection. ●
L’attribut Hidden de celleci 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.
Déploiement 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.
Résultat Ajout de la colonne à une liste :
Propriétés de la colonne :
- 26 -
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com 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
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com 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 à :
- 12 -
●
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.
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-
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com
Openmirrors.com 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 -
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 cellesci, 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 TSQL (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. Ceuxci génèrent du code CAML qui est luimême ensuite transformé en TSQL. 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 luimê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 luimê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-
Openmirrors.com 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 à celuici :
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, celleci 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
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 :
Openmirrors.com 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
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-