Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

The Mit's Blog

En plus d'intégrer et skier, il sait même écrire !
(Blog de Renaud Comte)

Actualités


  • Ancien MVP SharePoint 8 ans ...
    Des projets .Net, SharePoint 2013 ou Office 365 ??

    Contactez-nous :

Archives

SharePoint 2007 et les WebServices

Je viens de passer quelques temps avec les WebServices de SharePoint 2007.

Je voulais découvrir un peu les nouveautés ou du moins les changements face à la version 2003

Pour info, je redeveloppe mon CamlViewer de 2003 en full WS sous .Net 2 et WS.
>>> Objectif : sélectionner un site, une liste, une vue puis récupérer en live son code CAML pour ensuite l'adapter à mes besoins puis le tester comme un petit SQL analyser

Ce qui donne un peu prés ceci

Mais voici mon feedback

Bonne nouvelle : il y en a vraiment beaucoup, je dirais que quasiment l'ensemble du modéle object de SharePoint est disponible via les Web Services. Bon, il faut bien connaitre l'architecture logique pour comprendre le role de chacun des WS mais des passerelles existent pour les opérations mixte comme Lists.GetListAndView .

Programming Web Services for Windows SharePoint Services

Mauvaise nouvelle (enfin) : leurs utilisations est presque identiques à leurs versions 2003. Sous entendu, beaucoup de paramétre XmlNode, GUID et au format CAML, s'il vous plait.

Pour souvenir :

Mais ce n'est pas si alarmant, bien au contraire :

  • les habitudes et méthodos acquises restent les mêmes
  • VS 2005 est un petit bijou pour l'edition XML
  • SharePoint 2007 posséde une dizaine de schémas XSD pour faciliter la complétion
  • Ca ne reste que de l'XML

Perso, j'ai commencé a me monter un début de DAL/DTO basé sur les WS pour mes opérations les plus courantes, comme ca, je peux réutiliser sans complexe et sans trop me poser de question : si si un bon développeur est un fainéant en puissance

Dernier point : Je suis tombé dans un vieux piége lors de mon dev
>>> les XmlNodes retournés par les divers Web Services sont tous dépendants de namespace URI SharePoint.
Ce qui trés logique mais qui peut vous coincer complétement quand vous voulez faire un simple SelectSingleNode avec un peu de Xpath

Et oui, le retour sera nul car il ne trouve point les bon noeuds, il faux prefixer selon les URL utilisés.
Pour ca pas de soucis, voici une fonction qui vous transforme le XmlNode  en XmlDocument avec les namespaces intégrés et les bon préfixes :

Talk to SharePoint through its web services

private XmlNodeList RunXPathQuery(XmlNode XmlNodeToQuery, string XPathQuery)
{
// load the complete XML node and all its child nodes into a XML document
XmlDocument Document = new XmlDocument();
Document.LoadXml(XmlNodeToQuery.OuterXml);
// all the possible namespaces used by SharePoint and a randomly choosen prefix
const string SharePointNamespacePrefix = "sp";
const string SharePointNamespaceURI = "
http://schemas.microsoft.com/sharepoint/soap/";
const string ListItemsNamespacePrefix = "z";
const string ListItemsNamespaceURI = "#RowsetSchema";
const string PictureLibrariesNamespacePrefix = "y";
const string PictureLibrariesNamespaceURI = "
http://schemas.microsoft.com/sharepoint/soap/ois/";
const string WebPartsNamespacePrefix = "w";
const string WebPartsNamespaceURI = "
http://schemas.microsoft.com/WebPart/v2";
const string DirectoryNamespacePrefix = "d";
const string DirectoryNamespaceURI = "
http://schemas.microsoft.com/sharepoint/soap/directory/";
// now associate with the xmlns namespaces (part of all XML nodes returned
// from SharePoint) a namespace prefix which we can then use in the queries
XmlNamespaceManager NamespaceMngr = new XmlNamespaceManager(Document.NameTable); NamespaceMngr.AddNamespace(SharePointNamespacePrefix, SharePointNamespaceURI); NamespaceMngr.AddNamespace(ListItemsNamespacePrefix, ListItemsNamespaceURI); NamespaceMngr.AddNamespace(PictureLibrariesNamespacePrefix, PictureLibrariesNamespaceURI); NamespaceMngr.AddNamespace(WebPartsNamespacePrefix, WebPartsNamespaceURI); NamespaceMngr.AddNamespace(DirectoryNamespacePrefix, DirectoryNamespaceURI);
// run the XPath query and return the result nodes
return Document.SelectNodes(XPathQuery, NamespaceMngr);
}

Rajoutez vous une classe Utility, rajoutez quelques surcharges et c'est tout

Sinon en ce qui concerne les requêtes Xpath, Cyril à trouvé un superbe outil bien pratique:

XPathBuilder : construiser facilement vos requet XPath

Maintenant, c'est à vous

Reanud Comte aka TheMit (WSDL mon ami)

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: jeudi 24 août 2006 12:29 par themit
Classé sous : , ,

Attachment(s): camlViewer.jpg

Commentaires

Thomas LEBRUN a dit :

J'ai pas mal joué avec les WS de MOSS 2007 et WSS v3 et je dois dire que, pour quelqu'un qui n'a jamais utilisé ceux de la version 2003 (comme moi), c'est assez simple à prendre en main finalement.

Certes, au début, cela peut paraitre déroutant et on peut avoir un peu de mal à comprendre pourquoi  on a des exceptions par moment mais ce n'est pas trop compliqué quand même.

Par contre, je suis d'accord avec toi: c'est bien dommage que l'on récupère souvent des XmlNodes ou des éléments Xml au lieu d'avoir des objets plus simple comme des tableaux ou pourquoi pas des List génériques... Mais bon, qui sait, peut-être dans une prochaine version ;)
# août 24, 2006 13:44

themit a dit :

Oui et non

C'est vrai que les flux XML sont un peu lour quand on est habitué à des classes bien typés ou des tableuy plus simples

Cependant, l'objectif des WS de MOSS comme SPS 2003 reste vraiment la connectivité
>>> relié un MOSS a un PHPnuke peut poser des gros soucis si les types ne sont pas reconnus

La , le XML avec son format assez simple prend toute sa puissance.

Bon, en même temps, la plupart de datas se reserialise assez facilement en DataSet donc :)

PAr contre, certains Flux non, comme ceux de config CAML mais la c'est logique

En résumé : XML XML mais pensez à vos cher DataSet et pourquoi pas à une classe DTO
# août 24, 2006 13:51

benou24 a dit :

Salut,

Déja, je voulais te remercier pour toutes les infos très utiles qui sont sur ton blog.

Ensuite, je voulais exposer mon problème. Je dois faire un script d'insertion de données dans des listes type News de MOSS2007. Quand j'utilise la methode GetListCollection du web service List.asmx, je ne vois pas du tout les bonnes listes.

J'ai tester avec ton outil CamlViewer2007 et la je vois très bien.

Je voulais savoir si il était possible que tu mette a disposition le code source de l'appli.

En attendant, voici mon code (tout bete...) :

WSMoss.Lists ws = new WSMoss.Lists();

           ws.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;

           try

           {

               XmlNode xn = ws.GetListCollection();

               Console.Write(xn.OuterXml);

           }

           catch (Exception soape) { ;}

# juillet 10, 2008 13:03
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01