mai
2010
Hier, j’ai présenté une session sur l’intégration de WCF et de SharePoint 2010 beta2 (je n’ai pas encore testé les exemples sur la RTM) et plus particulièrement sur l’utilisation de REST dans SharePoint 2010.
Après avoir expliqué les bases sur la construction des URLS REST, j’ai fait 3 démos (dispos en téléchargement) et une démo démontrant la manipulation des URLS REST avec ListData.svc.
Pour plus d’infos sur la manipulation des URLS RESTS, je vous invite à consulter un post que j’avais fait en février 2010 : http://www.silver-it.com/node/56
La deuxième démo était: Utiliser jQuery pour consommer ListData.svc et pour gérer des les opérations CRUD (Create,Read,Update,Delete). Pour présenter ce sujet, j’ai réalisé un mini datagrid entièrement basé sur jQuery (une simple page .htm…) et ListData.svc.
Voici quelques captures d’écran de la démo (dispo en tél), pardonnez-moi pour la laideur du datagrid :)):
En cliquant sur l’icône d’info, le système affiche l’objet JSON correspondant et retourné par ListData.svc. En cliquant sur le bouton de mise à jour, vous pouvez modifier le titre:
Il est également possible de supprimer et d’insérer des éléments. Le tout est réalisé uniquement via des appels REST. Vous pouvez télécharger le code ci-dessous mais de manière synthétique, voici ce qu’il faut retenir:
– Pour toute acquisition d’éléments en lecture, vous devez exécuter une requête HTTP GET comme suit (ou autre si pas jQuery):
Ici, je spécifie que je veux récupérer les éléments de la liste Cities. J’ajoute chaque élément récupéré à une liste HTML.
Je spécifie également via getJSON que je souhaite récupérer des objets JSON.
Fondamentalement, la manière dont on récupère les éléments ressemblera toujours à cela. La seule variante sera l’URL. Je le répète, n’hésitez pas à consulter mon ancien post pour plus d’info sur les URLS.
– Pour supprimer des éléments, vous pouvez procéder comme suit:
C’est encore plus simple que de lire des éléments.
Les deux autres opérations sont un peu plus complexes, du moins, selon mes investigations…
– Pour insérer des éléments, vous pouvez procéder comme suit:
La partie en surbrillance sert à créer un nouvel objet de type Customer. Ensuite, on fait une requête HTTP POST, on envoie l’objet JSON et on traite l’erreur car étonnament, en dépit du fait que le code 201 est retourné par ListData.svc, jQuery branches vers le handler d’erreurs (c’est d’ailleurs pour cela que je n’ai pas utilisé le handler success …et c’est également la raison pour laquelle je teste si le code retourné est 201 ou non car si c’est 201, ce n’est en fait pas une erreur…
La deuxième partie de l’opération consiste à récupérer l’ID de l’élément créé par ListData.svc. Si vous analyze la requête avec Fiddler, vous constaterez que la réponse à une telle requête en cas de succès ressemble à ceci:
201 est en effet le status retourné, l’ETag qui est nécessaire à la mise à jour et l’ID de l’élément créé (en l’occurrence 120) sont également retournés. Un noeud dédié qui n’apparaît pas dans cette image contient également l’ID.
Donc, lorsque vous insérez un nouvel élément de liste, le service vous le renvoie…Cependant, je n’ai pas trouvé le moyen de le récupérer au format JSON. C’est pourquoi, dans mon code, j’exécute une requête supplémentaire pour le récupérer.
Pour une application réelle, il faudrait éviter cette requête supplémentaire…
– Pour mettre à jour un élément, ça se complique encore un peu:
Entouré, vous constatez que la valeur de l’ETag est transmise à ListData.svc. En Beta2, vous êtes obligé de le transmettre sous peine de recevoir une error vous notifiant que l’ETag est invalide. L’opération est MERGE, la donnée est l’objet JSON et enfin, vous devez faire en sorte d’exclure les colonnes système « Created » et « Modified » de l’objet JSON avant de le renvoyer vers ListData.svc.
Si vous ne le faites pas, vous recevrez une erreur 400 (Bad Request). En Beta2, je n’ai trouvé aucune alternative.
A nouveau, en analysant la réponse avec Fiddler, vous constaterez que le code retourné est 204 et qu’un nouvel ETag est retourné:
Comme pour l’opération Insert, j’ai exécuté une requête supplémentaire pour récupérer l’élément mis à jour. Il serait plus judicieux de récupérer l’ETag retourné en réponse pour pouvoir effectuer d’autres mises à jour sur le même élément car celui-ci est requis entre chaque mise à jour…
C’est ici que la démo CRUD s’est terminée…J’avais essayé d’utiliser un proxy Javascript mais je n’ai pas réussi en beta2.
La dernière démo était:Créez votre propre service WCF, intégrez-le dans SharePoint & et consommez-le via jQuery.
L’applicaiton est très basique:
Vous récupérez une liste d’IDs d’une bibliothèque de document, et vous pouvez récupérer les métadonnées d’un document en choisissant un élément de la liste. Le contrat expose deux opérations:
Pour le reste, je vous suggère de télécharger le code car l’implémentation ressemble à une implémentation WCF classique. Les seules étapes spécifiques à SharePoint sont:
– Vous devez déployer un fichier .SVC quelque part dans ISAPI (dossier spécifique par ex.)
– Dans le fichier .SVC, vous pouvez (pas obligatoire) utiliser une des factories built-in de SharePoint qui vous aideront à gérer vos services (endpoints etc…). Trois factories sont disponibles:
– MultipleBaseAddressWebServiceHostFactory pour SOAP services
– MultipleBaseAddressDataServiceHostFactory pour DATA services
– MultipleBaseAddressBasicHttpBindingServiceHostFactory pour REST services
Elles sont listées ici: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebservice_members(office.14).aspx.
– Enfin, si vous souhaitez travailler avec des objets tels que SPContext, vous devez définir l’attribut de classe AspNetCompatibilityRequirements (comme pour 2007) de votre service WCF à obligatoire.
C’est tout!
La présentation PowerPoint que j’ai utilisée est dispo ici. La solution Visual Studio ici.
Le site que j’ai utilisé avait la structure suivante:
Avec une relation entre Customers et Cities basée sur une colonne lookup City et une autre relation entre Citiesi>Countries basée sur une colonne lookup Country.
Voici les modèles de liste…mais vous allez peut-être devoir les refaire en fonction de votre version de SharePoint :).
Bon amusement!
Articles récents
- Vidéo formative: Excel 2010 – Comparer des listes grâce à la mise en forme conditionnelle
- Office 2010 Tool: Compatibility Inspector
- [ACCESS] Gérez une liste de saisie dont les enregistrements sont filtrés dynamiquement lors d’une saisie de texte
- [Article] L’opérateur SQL IN : Comment utiliser une liste d’éléments dans une requête
- La Propriété Count de l’objet Range dangereuse à partir d’office 2007