Articles / Nouvelle technologies


Maintenant que vous connaissez un peu le Collaboration Application Markup Language (CAML), nous pouvons exécuter notre première requête sur SharePoint. Nos requêtes vont s'attaquer à des "Listes".

Sur mon site Sharepoint, j'ai une liste de contacts, si je clique dessu, on voit ma liste de contacts :

Nous allons maintenant programmer une petite application console qui permet d'aller rechercher ces informations. Pour cela, nous avons besoin du nom des "colonnes" car sur cette image il ne s'agit que de "traduction". Nous allons avoir besoin de l'API Sharepoint pour aller rechercher les informations de cette liste.

Obtenir les informations d'une liste

Nous allons avoir besoin de deux classes se trouvant de le namespace "Microsoft.SharePoint" :

  • SPSite : Cette classe représente une collection de site sur un serveur virtuel Sharepoint.
  • SPWeb : Cette classe permet de représenter un seul site SharePoint.
Nous allons créer tout d'abord une instance de SPSite :

SPSite site = new SPSite(siteUrl);

"siteUrl" est en fait un paramètre qu'on passera à notre application console, il représente le site SharePoint que nous voulons attaquer. Nous allons maintenant créer notre SPWeb :

SPWeb web = site.OpenWeb();

En faite, la méthode "OpenWeb()" permet d'ouvrir le site passé comme paramètre au constructeur de notre SPSite. Maintenant que notre site Sharepoint est connu dans notre application, nous avons accès à ses propriétés.

Dans la suite logique, nous allons ouvrir la liste, qui elle aussi sera passée en argument à notre application :

SPList listContact = web.Lists[listName];

Une liste est donc une instance de SPListe. Pour effectuer une requête il nous faut :

  • Un site (SPWeb)
  • Une liste (SPList)
  • Une vue

Pour créer notre requête, instance de SPQuery, nous avons besoin d'une vue (instance de SPView). Une vue dans SharePoint est symbolisée par un filtre en haut à droite de notre liste :

Le nom de notre vue est donc ici : "Tous les contacts". SPQuery à besoin comme paramètre du constructeur de la vue dans laquelle va s'exécuter la requête :

SPQuery query = new SPQuery(listContact.Views[viewName]);

Ici, la méthode "Views" renvoit bien un objet SPView. La requête a maintenant bien toutes les informations sur l'objet qu'elle doit requêter. Pour visualiser ces informations, nous pouvons utiliser la propriété "ViewXml" de l'objet SPQuery. Voici donc notre premier petit programme terminé :

namespace SharePointList
{
   class Program
   {
      static void Main(string[] args)
      {
         string siteUrl = args[0];
         string listName = args[1];
         string viewName = "Tous les contacts";

         SPSite
site = new SPSite(siteUrl);
         SPWeb web = site.OpenWeb();
         SPList listContact = web.Lists[listName];
         SPQuery query = new SPQuery(listContact.Views[viewName]);

         Console
.WriteLine(query.ViewXml);
         Console.ReadLine();
      }  
   }
}

Si nous regardons l'exécution de cette application :

Nous avons enfin le "vrai" nom des colonnes. Nous pouvons maintenant utiliser CAML pour faire nos requêtes dessus.

Notre première requête CAML

Pour faire notre première requête CAML dans notre application, nous avons besoin de la même chose que dans l'application déjà créée ci-dessus :

  • SPSite
  • SPWeb
  • SPList
  • SPQuery

Donc nous pouvons reprendre tout le début du code en enlevant WriteLine et ReadLine. Nous devons maintenant définir la requête CAML :

<Where>
   <Eq>
      <FieldRef Name='LinkTitle'/>
     <Value Type='Text'>Bar</Value>
   </Eq>
</Where>

Normalement, il devra en ressortir un seul résultat vu que dans ma liste de contacts, je n'ai qu'une seule personne donc le "LinkTitle" est égal à "Bar".

Nous allons mettre cette requête dans une "string" c# et dire que la propriété "Query" de notre SPQuery est cette chaine : 

string caml = "<Query><Where><Eq><FieldRef Name='LinkTitle'/><Value Type='Text'>Bar</Value>"
+ "</Eq></Where></Query>";
query.Query = caml;

Maintenant nous avons besoin d'un nouvel objet : SPListItemCollection pour obtenir l'ensemble des éléments de la liste :

SPListItemCollection listItemContact = listContact.GetItems(query);

Il ne nous reste plus qu'à parcourir l'ensemble des éléments de la liste. Voici notre programme final :

static void Main(string[] args)
{
   string siteUrl = args[0];
   string listName = args[1];
   string viewName = "Tous les contacts";

   SPSite
site = new SPSite(siteUrl);
   SPWeb web = site.OpenWeb();
   SPList listContact = web.Lists[listName];
   SPQuery query = new SPQuery(listContact.DefaultView);
   string caml = "<Query><Where><Eq><FieldRef Name='LinkTitle'/><Value Type='Text'>Bar</Value>"
                         + "</Eq></Where></Query>";
   query.Query = caml;
   SPListItemCollection listItemContact = listContact.GetItems(query);

   foreach
(SPListItem i in listItemContact)
   {
      Console.WriteLine(i["LinkTitle"].ToString() + " " + i["Company"].ToString());
   }
}

Voilà, prochain article demain probablement :).



Lire la suite...
Tags: ,
Catégorie : API SharePoint

Une question sur cet article? n'hésitez pas a me contacter par Live Messegner. Suis-je connecté?

Actuellement noté 5.0 par 1 personne(s)

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Par Loïc Bar le 07/08/2007 15:36:00

Permalink | Commentaires (7) | Post RSS |


Commentaires

16/08/2007 15:00:41

Fred

Merci loic, pour cette intro tres claire sur l'utilisation des Querys.
Voici un liens sur une liste d'outils sharepoint dont un pour faire des querys.
fberton.blogspot.com/.../...r-developper-sous.html

Fred fr

01/09/2007 17:31:30

Loïc Bar

De rien Smile. Je continue les articles sharepoint bientôt.

Loïc Bar be

16/11/2007 02:44:32

Jamel

J'attends, avec impatience, la suite...Malgré que la date du dernier billet est un peu ancienne Frown

Jamel

16/11/2007 07:53:29

Loic bar

Bonjour Jamel Smile. J'en fais un ce weekend sur l'api SharePoint!

Loic bar be

15/05/2008 10:58:43

Yael

cool - tres clair encore - je comprends enfin le livre de 1000 pages qui se veut introductif...

Yael pl

26/06/2008 11:24:54

toma

Bravo c'est vraiment très bien expliqué mais j'ai en faite un question.
Est ce que c'est possible de rendre ces requêtes paramétrable, genre remplacé les mots "Bar" et "LinkTitle" par des variables
string caml = "<Query><Where><Eq><FieldRef Name='LinkTitle'/><Value Type='Text'>Bar</Value>"
+ "</Eq></Where></Query>";

toma tn

03/07/2008 14:42:20

Fays

Un clin d'oeil à Microsoft SharePoint 2007 Development Unleashed de Robert Foster? Smile (Chapter 1)

Fays us

Ajouter un commentaire



(Affichera votre icône Gravatar)  

  Country flag










Propulsé par BlogEngine.NET, modifé par Loïc Bar.