SharePoint 2010: développez en .NET pour personnaliser SharePoint 9782746059184, 2746059185

736 83 44MB

French Pages 456 [287] Year 2010

Report DMCA / Copyright

DOWNLOAD FILE

Polecaj historie

SharePoint 2010: développez en .NET pour personnaliser SharePoint
 9782746059184, 2746059185

Citation preview

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  elle­même  du  CAML,  ceci  induit  forcément une légère dégradation des performances. Le temps d’exécution des composants sera toujours plus rapide  si ceux­ci génèrent directement le CAML.  Le  gain  en  termes  de  développement  est  par  contre  énorme   Il  est  en  effet  à  la  fois  plus  facile  et  plus  rapide  de  travailler avec SPLINQ que de travailler en CAML. 

- 16 -

Le modèle objet client  Les objectifs de cette section sont les suivants :  ●



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

1. Introduction  Le modèle objet client est un nouvel ensemble d’API destinées à faciliter la communication entre SharePoint 2010 et  les applicatifs clients.  Avec SharePoint 2007, les applicatifs clients purs devaient gérer eux mêmes la communication avec les services web  exposés par SharePoint, notamment lists.asmx.  Ce nouveau modèle objet communique automatiquement et de manière transparente avec ceux­ci.  En  outre,  tout  est  conçu  pour  minimiser  la  quantité  de  données  transportées  sur  le  réseau,  le  nombre  d’appels  (allers/retours)  entre  le  client  et  le  serveur.  Avec  cette  nouveauté,  Microsoft  facilite  grandement  l’arrivée  de  clients  riches   Des API spécifiques existent pour Silverlight, .NET et l’ECMAScript qui est en fait constitué d’un framework JavaScript.  Afin  de  garantir  une  certaine  cohérence  entre  ces  API,  Microsoft  a  fait  en  sorte  de  minimiser  les  différences  entre  celles­ci, notamment en utilisant une nomenclature similaire et une mécanique commune pour charger, initialiser les  objets et envoyer les requêtes à SharePoint. 

2. Le client ECMAScript  a. Particularités du client ECMAScript  Le client ECMAScript est constitué d’un framework JavaScript délivré par SharePoint 2010 et permettant aux divers  composants web hébergés sur les WFE de bénéficier d’une API riche et parfaitement intégrée à SharePoint.  L’interaction entre l’API cliente et le back­end SharePoint se fait via une communication asynchrone, c’est­à­dire un  appel côté client en spécifiant au serveur une méthode de callback qui doit être appelée lorsque le serveur a traité  la requête.  Le modèle objet client ECMAScript ne peut être utilisé que par des composants hébergés dans la ferme SharePoint.  En  effet,  pour  éviter  les  problèmes  de  «  cross  site  scripting  »,  Microsoft  a  fait  en  sorte  d’interdire  l’utilisation  de  l’ECMAScript via des applicatifs extérieurs à la ferme.  Le schéma suivant symbolise la communication entre SharePoint et le client ECMAScript : 

 

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

- 1-

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.  Celui­ci est en réalité très simple et est stateless par défaut, ce qui signifie qu’aucune persistance de donnée n’est  prévue entre requêtes. Cette non­gestion de l’état des données entre les différentes requêtes HTTP avait justement  pour but de minimiser la charge supportée par les serveurs web.  Les applications web, devenant de plus en plus nombreuses et de plus en plus exigeantes, ont provoqué l’apparition  de nouveaux protocoles tels que SOAP (Simple Object Access Protocol) et des mécanismes de gestion d’état tels que  les sessions, le cache serveur, etc.  REST revient aux fondamentaux, à savoir l’exploitation du protocole HTTP « nu ». En effet, seuls les verbes de base  tels que POST, GET, PUT, DELETE, MERGE… sont utilisés. À l’inverse de SOAP, aucune enveloppe supplémentaire n’est  utilisée pour transporter les données.  Par  ailleurs,  REST  permet  également  de  rendre  l’URL  plus  «  significative  »  dans  la  mesure  où  celle­ci  ne  doit  pas  forcément  pointer  vers  une  ressource  physique  existante.  Au  contraire,  chaque  partie  d’URL  peut­être  considérée  comme une variable, ce qui permet de raccourcir la longueur des URL et de les rendre plus intuitives.  La méthodologie REST devenant de plus en plus à la mode, il était important de l’intégrer correctement à SharePoint.  Il s’agissait surtout d’utiliser les capacités du framework 3.5 car WCF exposait déjà des API REST spécifiques. 

2. Intégration de WCF et de REST dans SharePoint 2010  Nativement,  WCF  était  totalement  exclu  de  SharePoint  2007.  Il  était  bien  sûr  possible  de  l’intégrer mais au prix de  nombreux  efforts   Désormais,  WCF  est  automatiquement  intégré  dans  SharePoint  2010  sans  qu aucune  étape  de  configuration préalable ne soit requise.  Les  services  web  de  SharePoint  sont  développés  en  WCF.  Les  services  .asmx  sont  toujours  présents  mais  principalement pour assurer une compatibilité arrière.  L’intégration de WCF se matérialise de la manière suivante : 

- 1-

  À savoir, le déploiement des fichiers .svc au niveau du dossier 14\ISAPI, des DLL dans la GAC et la configuration déjà  réalisée du serveur IIS et des web.config liés aux applications SharePoint.  En SharePoint 2007, il fallait prendre en charge la modification des web config et la configuration IIS avant de pouvoir  intégrer des composants WCF au sein de SharePoint.  SharePoint expose les services WCF suivants : 

  Certains  sont  plutôt  prévus  pour  être  utilisés  par  SharePoint  lui­même  et  d’autres,  tels  que  ListData.svc,  sont  clairement destinés à être utilisés par diverses applications   Dans  cette  section,  nous  nous  préoccuperons  de  ListData.svc,  le  successeur  de  Lists.asmx  qui  nous  permet  d’effectuer des requêtes REST. 

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

- 2-

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 ci­dessus, on peut tout simplement saisir l’URL :  http://intranet/sites/clients/_vti_bin/ListData.svc/Pays(4) La syntaxe de base se résume donc comme ceci :  http:///_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. Ceux­ci sont :  ●



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



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



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



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



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

En saisissant l’URL suivante :  http://intranet/sites/clients/_vti_bin/ListData.svc/Pays?$filter= Title eq ‘Client 1’ On récupère la liste des clients dont la colonne Titre est égale à la valeur Client 1. On peut également combiner les  critères :  http://intranet/sites/clients/_vti_bin/ListData.svc/Pays?$filter =((Title eq ‘Client 1’) and (Age eq 34)) or (Titre eq ‘Client 2’) On  peut  donc  combiner  des  conditions  avec  des  opérateurs  logiques  et  utiliser  des  parenthèses  pour  établir  des  priorités.  Les possibilités sont quasiment infinies. En plus du paramètre $filter, il est possible d’utiliser les autres paramètres  comme, par exemple, $expand.  $expand permet de spécifier que l’on souhaite inclure des données liées aux données ciblées par la requête. Par  exemple, si l’on souhaite récupérer le client 1 et afficher son nom plus le nom de la ville et sa description :  .../_vti_bin/ListData.svc/Pays?$filter=Title eq ‘Client 1’&$expand=Ville&$select=Ville/Titre,Ville/Description Il faut fournir à $expand le nom de la colonne de recherche qui pointe vers la liste des villes, en l’occurrence, Ville.  Le paramètre $select permet de spécifier les colonnes à inclure. On peut même enchaîner les projections :  / vti bin/ListData svc/Pays?$filter Title eq ‘Client 1’&$expand=Ville,Ville/Pays&$select=Ville/Titre,Ville/Description ,Ville/Pays/Titre Où Ville/Pays représente la chaîne suivante :  - 4-

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  lui­même  est  basé  dessus et les interfaces sont à présent très réactives et très confortables à utiliser.  Nul  doute  que  des  applicatifs  clients  de  tous  types  (SilverLight  notamment)  viendront  se  greffer  sur  le  colosse  SharePoint dans les mois et années à venir. 

- 1-

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 celui­ci accéder à tous les champs de la liste. Ce type de flux de travail est pratique de  par sa simplicité de création mais atteint relativement vite ses limites par manque de flexibilité. 

b. Les flux de travail réutilisables  Contrairement aux flux de travail de liste, les flux de travail réutilisables sont associés avec un type de contenu (ou  content type en anglais) et non plus avec une liste précise. Cela leur procure une flexibilité beaucoup plus grande.  En effet, un content type peut être associé avec une ou plusieurs listes et ce de manière complètement dynamique.  Il n’est plus nécessaire de connaître la cible du flux de travail dès sa création.  Lors de la création de ce type de flux de travail, il vous est demandé de choisir un type de contenu cible et, comme  pour  la  liste,  cela  signifie  que  tous  les  champs  de  ce  type  de  contenu  seront  disponibles  à  l’intérieur  du  flux  de  travail.  La flexibilité de ce type de flux de travail va encore plus loin. En effet vous pourriez penser qu’il est donc nécessaire  de créer un type de contenu particulier avec toutes les colonnes nécessaires à votre flux de travail. Cela aurait pour  effet de rendre votre flux de travail utilisable uniquement pour ce type de contenu et pour ses enfants  En réalité ce  n’est pas le cas. Vous pouvez développer un flux de travail sur le type de contenu « élément » car il est le parent de  tout autre type de contenu de SharePoint. Parfait dans l’idée, mais vous voilà limité aux champs du content type «  élément », autrement dit la colonne titre et quelques autres colonnes système.  C’est là qu’intervient la notion de colonnes d’association. Il s’agit de colonnes que vous allez définir à l’intérieur de  votre flux de travail  Ces colonnes seront automatiquement ajoutées à l intérieur de la liste avec laquelle votre flux  de travail sera associé. De cette manière, vous garantissez à votre flux de travail l’existence des colonnes dont il a  besoin, quel que soit l’endroit où il sera utilisé. Sympathique, non ? 

c. Les flux de travail de site  Grande nouveauté de SharePoint 2010. Jusqu’à présent un flux de travail ne pouvait être démarré qu’à partir d’un  élément de liste. Cela n’est plus vrai grâce au flux de travail de site.  Comme  leur  nom  l’indique,  les  flux  de  travail  de  site  sont  associés  avec  un  site  dans  SharePoint.  Un  exemple  fréquemment  rencontré  est  la  demande  d’appréciation  d’un  site.  Vous  souhaitez  donc  permettre  au  visiteur  d’un  site de vous donner ses commentaires sur celui­ci. Dans ce cas, vous n’avez aucunement besoin d’une liste ou d’un  élément  dans  cette  liste.  Le  flux  de  travail  devra  simplement  poser  quelques  questions  via  un  formulaire  et  vous  l’envoyer par mail. Voici un exemple concret où l’utilisation des flux de travail de site est bien pratique. 

- 1-

Les flux de travail en mode déclaratif  1. Présentation de SharePoint Designer 2010  Dans cette section vous allez découvrir quelques­unes des nouveautés apportées par SharePoint Designer 2010 en  termes de création de flux de travail.  La  première  chose  que  vous  allez  remarquer  est  son  changement  de  look.  En  effet  l’interface  utilisateur  a  été  complètement revue et améliorée. Comme tous les autres produits, SharePoint Designer intègre désormais le ruban  Office afin de rendre son utilisation la plus intuitive possible. 

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

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

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

- 1-

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  vous­même  au  fur  et  à  mesure que vous utiliserez SharePoint Designer.  Dans les paramètres du flux de travail, modifiez ses options de démarrage pour qu’il démarre automatiquement lors  de la création d’un nouvel élément dans la liste : 

  Publiez ensuite le flux de travail. 

- 6-

  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 associez­le à votre liste : 

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

 

5. Les paramètres de formulaire d’initiation  Il est possible au flux de travail de récupérer des données entrées par l’utilisateur et de les stocker. Ces données ne  sont pas stockées dans la liste comme pour les colonnes d’association mais dans le flux de travail lui­même.  Prenons  l exemple  suivant    nous  souhaitons  modifier  le  flux  de  travail  créé  précédemment  afin  qu il  récupère  un  commentaire  de  la  part  de  l’utilisateur  lors  du  démarrage  du  flux  de  travail.  Autrement  dit,  lorsque  l’utilisateur  décidera de démarrer le flux de travail il sera envoyé devant un formulaire lui demandant de laisser un commentaire.  Modifiez votre flux de travail dans SharePoint Designer afin de lui ajouter un paramètre de formulaire d’initiation 

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

- 11 -

Openmirrors.com

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

 

6. Modifier les formulaires de flux de travail avec InfoPath 2010  Tous  les  formulaires  de  flux  de  travail  dans  SharePoint  2010  sont  des  formulaires  InfoPath.  Que  l’on  parte  d’un  formulaire  d’initiation  ou  d’un  formulaire  de  tâches,  il  s’agit  toujours  d’un  formulaire  pouvant  être  modifié  avec  InfoPath 2010.  La page des propriétés des flux de travail contient une section formulaires listant tous les formulaires utilisés par le  flux de travail. Dans notre cas, nous retrouvons le formulaire permettant d’entrer un commentaire lors du démarrage. 

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

- 12 -

Openmirrors.com

Openmirrors.com

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

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

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

7. Import/Export de flux de travail depuis SharePoint Designer 2010  Trois outils permettent la création de flux de travail dans SharePoint 2010 :  ●

SharePoint 2010 

- 13 -

Openmirrors.com ●

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  jusque­là  étaient  systématiquement utilisées.  Cette possibilité reste toujours intéressante pour des tâches hybrides nécessitant à la fois d’accéder à SharePoint et  à des ressources physiques sur le serveur car bien qu il soit possible d accéder à celui ci depuis une tâche SharePoint,  il est préférable de l’éviter. 

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

- 1-

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é ci­dessous : 

 

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

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

Openmirrors.com

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 plate­forme à part entière nécessitant parfois  d’élaborer des architectures physiques et logiques très complexes.  SharePoint 2010 comble largement les lacunes de son prédécesseur et offre davantage de possibilités en termes de  gestion  documentaire,  de  gestion  de  contenu,  de  portail  de  publication  etc.  L’une  des  évolutions  majeures  réside  également  dans  sa  capacité  à  implémenter  des  espaces  accessibles  depuis  Internet  de  manière  plus  aisée  que  précédemment  et  également  de  proposer  des  solutions  d’hébergement  flexibles  notamment  grâce  au  tout  nouveau  concept de « Sandboxed Solutions ».  De  nouvelles  API  destinées  à  faciliter  l’interfaction  entre  SharePoint  et  d’autres  systèmes  font  leur  apparition,  SharePoint devient de plus en plus une plate­forme applicative.  Enfin,  cette  version  de  SharePoint  fait  également  la  part  belle  aux  outils  de  personnalisation  tels  que  SharePoint  Designer,  InfoPath  et  encapsule  toute  une  série  de  services  puissants  destinés  à  faciliter  l’adapdation  de  la  plate­ forme aux besoins spécifiques des entreprises. Il est désormais évident que la personnalisation de SharePoint ne se  fera  pas  seulement  au  travers  de  développements  « purs et  durs »  mais  aussi  en  utilisant  les  outils  et  services  gravitant alentours.  C’est précisément le défi que tente de relever ce livre, vous permettre d’appréhender le produit dans toute sa diversité  afin de faire les meilleurs choix lorsque vous serez en charge d’implémenter SharePoint au sein de votre entreprise.  Riches de leur expérience, les auteurs ont agrémenté ce livre de nombreux exemples de code, d’astuces et de mises  en garde afin de vous permettre d’identifier rapidement les avantages et inconvénients de chaque situation. L’ouvrage  s’articule entièrement autour d’exemples pratiques précédés d’une brève introduction théorique.  Après  lecture  de  ce  livre,  vous  serez  à  même  d’appréhender  la  majorité  des  problématiques  inhérentes  à  la  personnalisation de la plate­forme SharePoint 2010. 

- 1-

Openmirrors.com

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 sous­répertoire par application dont le nom est le port sur lequel l’application SharePoint écoute.  Dans  chacun  de  ces  répertoires,  vous  retrouvez  les  standards  d’ASP.NET,  à  savoir,  le  répertoire  bin,  App_GlobalResources etc. 

3. La GAC (global assembly cache)  La GAC n’est pas du tout spécifique à SharePoint mais plutôt à la plate­forme DotNet. C’est une sorte d’emplacement  système  où  est  localisée  toute  une  série  d’assemblages  qui  peuvent  être  versionnés.  En  outre,  tout  assemblage  placé dans la GAC bénéficie du mode de sécurité  Full Trust signifiant que le code exécuté par un assemblage de la  GAC  peut  plus  ou  moins  tout  faire.  Certains  composants  SharePoint  doivent  impérativement  être  déployés  dans  la  GAC mais ce n’est pas le cas de tous.  Les WebPart par exemple peuvent tout à fait être déployés dans le répertoire bin de l’application web dans laquelle  on souhaite les utiliser.  Une bonne pratique consiste à éviter la GAC autant que possible afin de ne pas octroyer à un assemblage plus de  droits que ceux dont il a réellement besoin. 

- 2-

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 ci­dessous : 

  Si l’on déploie un composant WebPart, il faut qu’au minimum la DDL et le fichier .webpart soient déployés sur les deux  serveurs  WFE  (Web  Front  End).  Si  vous  omettez  de  les  déployer  sur  un  des  deux  WFE,  lorsqu’un  visiteur  se  connectera,  cela  fonctionnera  ou  non  en  fonction  du  WFE  sur  lequel  le  load  balancer  (répartisseur  de  charge)  aura  redirigé la requête HTTP.  Dans  les  environnements  réels,  SharePoint  est  systématiquement  installé  en  mode  ferme  et  donc  sur  plusieurs  serveurs.  Les solutions SharePoint permettent de déployer automatiquement les composants sur tous les serveurs de la ferme.  - 1-

Openmirrors.com

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 ceux­ci. 



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



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



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



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



À créer vos propres commandes PowerShell. 



À utiliser les tâches planifiées. 

- 1-

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ère­plan  et  disponibles  par  tous  les  composants de votre ferme. 

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

- 1-

Excel Services  1. Introduction  Le  service  de  calcul  Excel  (Excel  Services)  est  un  élément  des  applications  de  services  offert  par  SharePoint.  Dans  beaucoup de sociétés, les classeurs Excel représentent une partie importante des applications utilisées, et ce dans  presque tous les départements. Ces fichiers sont quelquefois relativement complexes et une réécriture complète de  toutes les opérations représente un travail long et coûteux.  C’est pour toutes ces raisons que SharePoint offre la possibilité d’intégrer ces classeurs directement à partir de son  interface  afin  de  permettre  leur  partage  entre  tous  les  utilisateurs.  Une  autre  fonctionnalité  intéressante  est  d’autoriser leur utilisation au travers d’une interface Web, sans nécessiter l’installation du client Excel.  Les  services  de  calcul  Excel  apportent  également  encore  plus  de  puissance  à  votre  classeur  en  vous  donnant  la  possibilité d’écrire vos propres fonctions Excel dans le langage .NET de votre choix.  L’inverse est également vrai, vos classeurs Excel peuvent à leur tour fournir une base de calcul puissante pour vos  applications au travers du service Web Excel Services. 

2. Configurer SharePoint pour utiliser le service de calcul Excel  La  configuration  de  ce  service  se  fait  par  la  page  des  applications  de  services  accessible  par  la  console  d’administration SharePoint 

a. Activer le service  Pour  commencer,  il  faut  vérifier  que  le  service  est  bien  actif  dans  la  ferme.  Pour  cela  ouvrez  la  console  d’administration  SharePoint  et  allez  dans  la  partie  Gestion  des  applications,  puis  Gérer  les  applications  de  service.  Cette page affiche la liste des services disponibles dans la ferme, ainsi que leur statut. Si le service de calcul Excel  n’est pas actif, démarrez­le : 

 

b. Définir un emplacement comme fiable  Pour pouvoir être utilisé par les services de calcul Excel, un classeur doit se trouver dans un emplacement approuvé.  Cela  signifie  qu’un  administrateur  doit  désigner  un  emplacement  conteneur  comme  étant  fiable  et  pouvant  être  utilisé  par  les  services  de  calcul  Excel.  Ceci  peut  être  une  bibliothèque  de  documents,  un  répertoire  Windows  partagé ou un dossier Web.  Pour commencer, rendez­vous dans la centrale d’administration de SharePoint dans la partie Gérer les applications  de service et ensuite dans la partie Excel Services. 

- 1-

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 celles­ci.  Pour autoriser la modification de certaines valeurs, vous devez tout d’abord leur assigner un nom. Assignez le nom  HTVA à la cellule B1. 

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

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

- 5-

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  lui­même  (la  valeur  de  ses  champs).  D’autres  sources  de  données  peuvent  être  ajoutées  afin  d’intégrer des données venant de sources externes. 

Revenons  dans  le  contexte  de  SharePoint  2010.  Premièrement,  InfoPath  va  vous  permettre  de  personnaliser  les  formulaires standard. Ce sont les formulaires vous permettant de voir, d’ajouter ou de modifier des éléments d’une  liste ou d une librairie  Nous ajouterons à ces formulaires ceux permettant d interagir avec un flux de travail   La  modification  de  ces  formulaires  est  extrêmement  simple  et  ne  nécessite  pas  l’utilisation  de  code.  Un  clic  dans  le  ruban  de  SharePoint  ouvre  le  formulaire  courant  en  mode  édition  dans  InfoPath,  un  deuxième  clic  dans  InfoPath  publie le nouveau formulaire dans SharePoint. 

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

2. Différence entre Forms Services et InfoPath 

- 1-

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 string­length retourne la longueur d’un texte, le point (.) quant à lui signifie que la fonction sera appliquée  sur le champ lui­même, autrement dit celui sur lequel la règle est appliquée.  Voici donc à quoi doit ressembler votre nouvelle règle : 

- 3-

Openmirrors.com

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

  Pour terminer, testez votre nouveau formulaire dans SharePoint. 

 

4. Création de liste SharePoint depuis InfoPath  Dans l’exemple précédent nous avons vu comment personnaliser les formulaires de liste dans SharePoint. Dans celui­ ci nous allons découvrir comment utiliser InfoPath et Forms services pour créer des listes sous SharePoint.  Démarrez InfoPath Designer 2010 et créez un nouveau formulaire de type Liste SharePoint  

- 4-

Openmirrors.com

  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 appelez­la 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 lui­même.  Les sources de données externes dans InfoPath permettent d’incorporer des données étrangères au formulaire. Ces  données peuvent provenir de différentes sources. 

 



Service Web SOAP 



Service Web REST 



Bibliothèque ou liste SharePoint 



Base de données (Microsoft SQL Server uniquement) 



Document XML 

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

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

- 8-

  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 testez­le. Vous constatez que la liste a bien été remplie depuis SharePoint. 

 

6. Utilisation du WebPart de formulaire InfoPath  Parmi les nouveaux WebPart livrés avec SharePoint 2010 figure le WebPart de formulaire InfoPath (Forms services  WebPart). Ce composant permet de présenter n’importe quel formulaire InfoPath dans une page de site.  En  regardant  un  peu  plus  loin,  nous  pouvons  voir  dans  InfoPath  une  manière  de  créer  des  WebPart  de  manière  graphique sans aucune connaissance de programmation et sans nécessité de déploiement sur le serveur.  Nous allons repartir du formulaire créé précédemment. Notre but sera de l’ajouter dans une base qui contiendra à la  fois le formulaire lui­même et la liste des éléments déjà créés. Le formulaire sera affiché en mode ajout et permettra  donc la création de nouveaux éléments.  Voici le résultat final que nous souhaitons obtenir : 

- 11 -

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.  Rendez­vous maintenant sur la page d’accueil de votre site et ajoutez deux WebPart. Tout d’abord une vue sur notre  liste principale : 

  Et ensuite le WebPart de formulaire InfoPath : 

- 12 -

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

  Dans  cet  exemple,  vous  devez  modifier  la  liste  cible  et  le  comportement  après  l’envoi  du  formulaire  pour  qu’un  nouveau formulaire vierge soit présenté après l’envoi.  Vous constatez alors que le WebPart de formulaire InfoPath vous permet réellement d’intégrer vos développements  InfoPath dans vos pages SharePoint de manière tout à fait transparente.    Il est également possible de connecter le WebPart de formulaire InfoPath à un autre WebPart.

7. Utilisation de code dans les formulaires InfoPath  Jusqu’à la version précédente d’InfoPath, l’utilisation de code dans les formulaires InfoPath nécessitait le déploiement  de  ceux­ci  par  un  administrateur  de  la  ferme.  En  effet  le  déploiement  du  formulaire  ne  pouvait  se  faire  que  via  l’administration centrale de SharePoint.  Grâce  aux  sandboxed  solutions  de  SharePoint  2010,  il  est  à  présent  possible  à  un  administrateur  de  collection  de  sites de déployer du code. La solution est placée dans la galerie de solutions de la collection de sites.  La  création  de  code  pour  InfoPath  ne  peut  se  faire  que  dans  VSTA  (Visual  Studio  Tools  for  Application).  Malheureusement, Visual Studio 2010 ne prend pas en charge les projets InfoPath.  Nous allons illustrer l’utilisation de code par un exemple simple. Nous allons développer un formulaire contenant une  zone  de  liste  modifiable  (combox  box)  connectée  sur  une  liste  SharePoint  contenant  des  salutations  (Mr,  Mme…). 

- 13 -

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 connectez­la à 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. 

  Ajoutez­y 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 enregistrez­le 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  celui­ci  que  vous  pourrez  créer  des sources de données externes. 

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

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

Titre   nom du serveur  



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



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

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

- 5-

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  glisser­déposer  le  premier  élément  du  volet  données  externes  sur  le  premier  serveur  du  diagramme. 

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

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

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

- 7-

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 plate­forme, SharePoint permet de réellement héberger une application Access. Les tables  seront transformées en listes, les formulaires en pages et les macros en workflows.  SharePoint joue en quelque sorte le rôle de serveur Web hébergeant une application Access complète. 

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

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

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

- 1-

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  rendez­vous  dans  la  partie  Types  de  contenu  externe. 

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

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

- 1-

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.  Rappelez­vous,  nous  avons  défini  que  notre  liste  pouvait  être  utilisée  comme  liste  de  contacts  Office,  il  faut  donc établir le lien entre SQL et Office pour chaque champ. 

 

 

- 3-

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  ceux­ci  via  SharePoint  Designer  entraîne un changement d’état vers l’état « Customized ».  En prenant une page maître comme objet de référence, voici quelques explications concernant ces deux états :  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  celle­ci  via  une  fonctionnalité SharePoint.  Une autre fonctionnalité, si elle est active, indiquera à SharePoint si le contrôle délégué est fourni à la page maître  par  le  site  courant.  Le  contrôle  se  chargera  d’afficher  certaines  informations  relatives  à  l’utilisateur  courant  tel  qu illustré ci dessous   

  Commencez par :  ■

Créer un projet Visual Studio de type SharePoint. 

- 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 ma­v4.master. 

Vous devez obtenir une structure de solution similaire à celle ci   

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

- 5-

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 à celles­ci que l’on peut, via jQuery, retrouver les éléments du calendrier dont l’ID a été retourné par le  service Web.  Dans le code source disponible en téléchargement, vous trouverez une solution complète implémentant le calendrier.  Mais  si  vous  exécutiez  le  code  ci­dessus  directement  dans  un  WebPart  éditeur  de  contenu  standard,  cela  fonctionnerait ; pour autant bien sûr que vous appeliez la fonction ChercherEvenements avec les bons paramètres.  Ceci  démontre  qu’il  n’est  pas  nécessaire  de  déployer  du  code  «  serveur  »  car  grâce  à  JavaScript,  et  plus  particulièrement  à  jQuery,  vous  pouvez  directement  travailler  avec  les  services  web.  Outre  l’amélioration  de  l’expérience utilisateur, cela permet également d’éviter  de  passer  par  un  cycle  de  développement/test/recette/mise  en production.  De  plus,  travailler  avec  les  services  .ASMX  est  100%  standard  en  SharePoint  2007  et  ne  nécessite  aucune  modification relative à l’infrastructure. Pour 2010, préférez néanmoins les services WCF.  En résumé, pour travailler via jQuery avec les services .ASMX de SharePoint, vous devez :  ●







- 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érez­y le code suivant : 

- 1-

Openmirrors.com

  Vous obtenez ce résultat : 

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

  Vous obtenez : 

- 3-

Openmirrors.com

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

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

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

- 4-

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

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

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

  Appelez­la MaNouvellePageApplicative.aspx. 

- 2-

  Une  nouveauté  indiscutablement  appréciable  dans  Visual  Studio  2010  est  la  prise  en  charge  parfaite  des  développements SharePoint. Cela vous fera sans aucun doute économiser énormément de temps !  Rappelez­vous avec SharePoint 2007 et Visual Studio 2008 : la simple création d’une page applicative nécessitait une  série d’étapes manuelles et fastidieuses, notamment pour assurer le déploiement de celle­ci via une solution. Visual  Studio 2010 automatise toutes ces étapes !  Toutes les références nécessaires sont ajoutées au projet. 

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

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

- 3-

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, reportez­vous au chapitre de ce livre consacré au déploiement. Le  feature  sera  le  conteneur  de  votre  action  personnalisée  mais  pas  l’action  elle­même.  Il  faut  donc  ajouter  un  élément vide à votre projet. 

- 2-

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é ci­dessous : 

- 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  code­behind  associé.  Les  propriétés  permettent  de  configurer  la  colonne  afin  de  définir  son  comportement.  En  repartant  du  tableau  de  composants  illustré  en  section  B  3,  il  est  aisé  de  constater  que  les  composants à implémenter sont .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  celle­ci  est  défini  à  TRUE  sinon  SharePoint  afficherait  automatiquement  une  case  à  cocher (valeur booléenne) mais, comme mentionné préalablement, SharePoint ne « retient » pas la valeur de  la  propriété  lors  de  la  modification  de  la  colonne.  Il  est  donc  préférable  de  cacher  la  propriété  afin  qu’il  n’affiche  aucun  contrôle.  Dans  cet  exemple,  le  contrôle  est  affiché  dans  le  contrôle  utilisateur  ColonneRechercheFieldEditor.ascx. 

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  celles­ci, ce qui facilite grandement la modélisation des données.  Dans  SharePoint  2007,  pour  simuler  l’intégrité  référentielle,  il  fallait  impérativement  implémenter  une  solution  personnelle ou utiliser des outils tiers. Il était souvent laborieux de mettre en place ce type de solution.  SharePoint  2010  stocke  ses  données  au  sein  d’un  gestionnaire  de  bases  de  données,  en  l’occurrence  SQL  Server  2008  64  bits.  Tous  les  objets  SharePoint  tels  que  des  sites,  des  listes,  des  bibliothèques  ainsi  que  les  documents  qu’elles contiennent sont stockés dans une ou plusieurs bases de données appelées Bases  de  contenu ou Content  Databases.  Presque tous les éléments d’une ferme SharePoint sont stockés dans le(s) serveur(s) de données. Seules quelques  ressources sont physiquement présentes sur les disques durs des différents serveurs composant la ferme.  Le  serveur  SQL  représente  le  cœ ur  de  l’architecture  d’une  ferme  SharePoint.  Avant  toute  implémentation  Intranet/Extranet/Internet/applicatif,  qu’elle  soit  standard  ou  qu’elle  recourt  à  du  code  personnel,  une  analyse  est  requise  afin  d’assurer  un  bon  niveau  de  service  et  d’éviter  bien  des  écueils.  Cette  analyse  peut  porter  sur  la  planification de capacité, la gestion des copies de backup/restore et toute une série d’opérations d’infrastructure.  Toutes  ces  précautions  ciblent  principalement  SQL  Serveur.  Pour  manipuler  les  données  dans  SharePoint,  Microsoft  recommande  de  ne  jamais  requêter  directement  le  serveur  SQL  mais  plutôt  d’utiliser  les  différentes  API  (Application  Programming Interface) mises à disposition par le framework SharePoint 2010. Ces API sont :  ●





Le  langage  CAML  (Collaborative  Application  Makup  Language)  qui  permet  notamment  la  création  de  requêtes  (CAML Query) qui sont ensuite transformées en T­SQL (Transact SQL) par l’API ou les services web du système.  La  toute  nouvelle  API  (Application  Programming  Interface)  LINQ  (Language  Integrated  Query)  est  une  couche  d’abstraction permettant de travailler avec des objets .NET. Ceux­ci génèrent du code CAML qui est lui­même  ensuite transformé en T­SQL.  Les  différents  services  web  ASP.NET  et  WCF  (Windows  Communication  Foundation)  permettant  d’accéder  aux  données. 

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





Le schéma d’une base de données de contenu étant susceptible d’être altéré lors de mises à jour du système  (hotfix,  service  pack  etc.),  la  pérennité  de  tout  composant  attaquant  directement  une  base  de  données  de  contenu ou de configuration se voit automatiquement remise en cause.  Tout ordre DML pourrait modifier de manière inattendue les données stockées, voire entrer en conflit avec des  mises  à  jour  faites  par  SharePoint  lui­même.  Ceci  peut  entraîner  des  problèmes  graves  mettant  en  péril  l’utilisation d’une ferme entière.  Toute  requête,  même  en  lecture  seule,  pourrait  avoir  des  effets  de  bord  en  termes  de  verrouillage  de  tables/lignes entraînant des problèmes d’accès aux données pour SharePoint lui­même. 

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

2. Le nouveau modèle relationnel  Avant de s’intéresser de plus près au code, voyons comment est organisé le modèle relationnel de SharePoint 2010.  Pour ce faire, nous allons tout simplement créer pas à pas l’environnement de données que nous allons utiliser durant  tout le chapitre. Ceci facilitera la compréhension des exemples et permettra d’appréhender rapidement la manière de 

- 1-

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 à celui­ci : 

  C’est­à­dire un site dont la structure est encore vierge.  Votre site Clients doit contenir trois listes liées entre elles :  ●

Une liste de pays. 



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



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

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

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

  Créez à présent la liste des villes, celle­ci doit être liée à la liste des pays pour indiquer à quel pays appartient chaque  ville.  Procédez comme pour la liste des pays puis ajoutez une colonne de type Recherche nommée Pays : 

- 2-

Openmirrors.com

  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-