Recherche sur le blog

mercredi 3 décembre 2014

[WD19] Utiliser l'API Exchange Web Services (III)

Avec EWS Managed API 2.0, il est possible de réaliser des choses vraiment intéressantes. Il serait clairement plus simple de travailler directement en .NET mais nous allons voir ensemble ce qu'il est possible de faire dans Windev. Dans ce nouvel exemple nous allons récupérer la liste de dossiers à partir d'un dossier source.

Récupérer une liste de dossiers

N'oubliez pas qu'avant de récupérer une liste de dossiers vous devez au préalable récupérer l'URL du service Web. Nous avons vu ensemble comment réaliser cette opération dans les précédents articles. Si vous ne savez plus comment faire, suivez le lien : voir partie 1.


La première étape consiste à initialiser la vue et un filtre de recherche. Il faut tout d'abord déclarer les différentes variables, des types suivants : FindItemResults, FolderView, et SearchFilter. Ces deux dernières doivent être initialisées à la valeur Null. On peut aussi déclarer des entiers qui serviront de compteurs.

Ensuite, voici ce que nous avons réalisé : 
  • Création d'un filtre avec l'initialisation de la variable "scFilt" (qui est notre filtre de recherche). On l'instancie avec new SearchFilter.IsGreaterThan(). Les paramètres sont, dans l'ordre, la constante FolderSchema.TotalCount et 0. Cela permettra d'obtenir les dossiers qui contiennent un ou plusieurs objets.
  • Initialisation de la vue : new FolderView(TAILLE, OFFSET). Comme pour récupérer des e-mails, nous spécifions une taille (dite "de page") et éventuellement un offset si la recherche retourne de multiples éléments.
  • Dans la vue, on doit définir l'ensemble des propriétés à récupérer. Il faut donc alimenter le contenu de la propriété View.PropertySet. Remarquez que cela est réalisé en deux étapes car les constructeurs requièrent des collections d'objet, chose qui n'est pas forcément pratique à mettre en place.
    • new PropertySet(BasePropertySet.IdOnly).
    • vi.PropertySet.Add(xxxx) : ajouter d'autres propriétés qu'on souhaite récupérer et lire (comme FolderSchema.DisplayName pour le nom ou FolderSchema.FolderClass pour la classe du dossier - ex : "IPF.Note" pour les mails).
  • Méthode de recherche : avec les dossiers il est possible d'aller plus loin et donc de rechercher les sous-dossiers de manière récursive. La propriété Traversal de notre vue peut être initialisée avec la constante FolderTraversal.Deep. Dans notre code d'exemple cela donne tout simplement la syntaxe suivante : vi.Traversal = FolderTraversal.Deep.
    
Notre filtre et notre vue sont désormais prêts, on peut passer à l'étape suivante.


Dans une boucle où l'on teste qu'il reste des éléments, nous récupérons à chaque fois jusqu'à 10 objets, en modifiant à chaque fois l'offset dans la vue. Le principe est le même que pour récupérer les e-mails. Dans cette étape on a donc réalisé les opérations suivantes : 
  • Tester la variable bMoreItems. Si elle vaut "true" on continue à traiter les éléments.
  • Initialiser notre variable de type FindItemResults cette fois avec la méthode ExchangeService.FindFolders(). 3 paramètres doivent être donnés à la fonction : le dossier à partir duquel on souhaite effectuer la recherche (ex : WellKnownFolderName.Root), le filtre (dans notre exemple il s'agit de la variable "scFilt") et enfin la vue (variable "vi").
  • Est-ce qu'il y a encore des objets ? bMoreItems = clDrFindResults.MoreAvailable.
  • Déplacer l'offset si bMoreItems vaut Vrai : vi.Offset = vi.Offset + iPageSize.
  • Initialiser une variable de type entier à 0 en guise de compteur.
  • Initialiser le nombre d'objets affichables, c'est-à-dire le nombre d'objets que la collection a retourné. Dans notre exemple le code est le suivant : iDspCnt = clDrFindResults.Folders.Count.
  • Dans une boucle POUR TOUT on traite chaque objet de la collection clDrFindResults.Folders. Ici nous décidons de sauvegarder le nom et l'ID de chaque dossier dans un objet de classe. On sort de cette boucle lorsque notre compteur a atteint le nombre d'objets affichables (voir ci-dessus). A vous de trouver le traitement adéquat à réaliser...
   
Voilà, vous pouvez désormais récupérer une liste de dossiers avec l'API et ce en utilisant Windev. N'est-ce pas magnifique ?

Aucun commentaire: