Accueil

Requètes Sharepoint en CAML

by Jean-Camille Mercier 23. octobre 2013 10:28

Vous savez qu'il est strictement interdit d'attaquer la base de donnée de Sharepoint en direct ...

Donc pour requèter des listes sharepoints vous avez deux moyens :

  1. Utiliser LinqToSharepoint
  2. Utiliser les webServices en utilisant le language CAML

Pour l'instant, je n'ai pas encore eu l'occasion d'utiliser la solution n°1 qui pourtant m'a l'air bien intéressante ! Parce que le CAML c'est vraiment par terrible ...

Pour commencer il faut comprendre la structure du CAML sur ce lien MSDN. Ensuite, il faut s'identifier sur SP, spécifier les champs que la requète va retourner, créer cette fameuse requète CAML et enfin analyser le résultat.

Voici un exemple  :

// Identification
var olist = new WSSharepoint.Lists
{
    Url = "http://sharepoint-test/_vti_bin/lists.asmx",
    Credentials = System.Net.CredentialCache.DefaultCredentials
};

var xmlDoc = new XmlDocument();
            
// Champs à récupérer : 
XmlElement viewFields = xmlDoc.CreateElement("ViewFields");
viewFields.InnerXml += string.Format("<FieldRef Name=\"{0}\" />", Const.ColonneStatut);
viewFields.InnerXml += string.Format("<FieldRef Name=\"{0}\" />", Const.ColonneID);
viewFields.InnerXml += string.Format("<FieldRef Name=\"{0}\" />", Const.ColonneDate);

// Création de la requète : toutes les pièces en attente
XmlElement query = xmlDoc.CreateElement("Query");
var whereString = new StringBuilder();
whereString.Append("<Where><Eq>");
whereString.Append(string.Format("<FieldRef Name=\"{0}\"/><Value Type=\"Text\">{1}</Value>", 
                   Const.ColonneStatut, "En attente"));
whereString.Append("</Eq></Where>");
query.InnerXml = whereString.ToString();

// Lancement de la requète
XmlNode nodes = olist.GetListItems("ListeDesPiecesJointes", 
                      null, query, viewFields, "0", null, null);
List<XmlElement> pieces = nodes["rs:data"].ChildNodes.OfType<XmlElement>().ToList();

// Parcours pour récupérer les résultats
foreach (XmlElement piece in pieces)
{
     ... 
     // TODO
}

Pour vous aider si vous avez de requètes complexes à créer, vous pouvez regarder ces projets d'Helper :

http://spcamlqueryhelper.codeplex.com/

http://sharepointcamlhelper.codeplex.com/

 

 .