2016-08-07 2 views
7

J'ai le code suivant:bon moyen de demander des éléments de calendrier via ews managed api?

var startProp = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Meeting, "DTSTART", MapiPropertyType.String); 
var endProp = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Meeting, "DTEND", MapiPropertyType.String); 

var cond1 = new SearchFilter.IsEqualTo(startProp, StartDate); 
var cond2 = new SearchFilter.IsEqualTo(endProp, EndDate); 
var filter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, cond1, cond2); 
var items = svc.FindItems(WellKnownFolderName.Calendar, filter, view); 

Je suis en train d'exécuter cette requête sur une boîte aux lettres de salle d'échange. (Ceci n'est pas apparent dans le code ci-dessus cependant). Il peut avoir une réservation avec l'heure exacte de début/fin. Par conséquent, s'il y a une réservation correspondant à ce critère, je devrais obtenir au moins un élément. Le contexte à ceci: penser à une salle de réunion et les gens essaient de le bloquer pour une réunion. En échange, c'est juste une autre boîte aux lettres, semblable à une boîte aux lettres d'utilisateur. Donc, sur réservation réussie, cette boîte aux lettres reçoit un courriel avec les détails du calendrier (format iCalendar (*.ics).

Je suis coincé sur deux chefs d'accusation différents ...

  1. items ne reviennent pas quoi que ce soit dans le TotalCount est 0. Peut-être que je fais quelque chose de mal avec l'API, je suis incapable de le comprendre

  2. Je ne comprends pas ce que j'essaie d'interroger. cette question est décrite ci-dessous:

Vous avez donc des éléments de courrier électronique dans une boîte aux lettres de pièce. Chaque email a le calendrier incorporé avec habituellement un peu d'encodage base64. Le calendrier a un schéma spécifique - nous sommes seulement intéressés par les données que vous trouvez entre VEVENTS (c'est-à-dire BEGIN: VEVENT et END: VEVENT). Le problème ici est qu'il peut y avoir plusieurs VEVENTS parfois. Alors, comment l'échange le fait-il vraiment? Est-ce qu'il traverse tous les VEVENTS, correspond aux critères? si elle correspond bien, renvoie-t-elle cet "email" (avec le calendrier joint/incorporé)? Ou c'est un autre mécanisme?

Par conséquent, je ne suis pas sûr de la sémantique que j'ai écrit dans le code ci-dessus. Alors s'il vous plaît conseiller à ce sujet.

Répondre

1

a trouvé la réponse à la première partie:

static void Find(DateTime Start, DateTime End, ExchangeService svc) 
{ 
    var filter1 = new SearchFilter.IsGreaterThanOrEqualTo(MeetingRequestSchema.Start, Start); 
    var filter2 = new SearchFilter.IsLessThanOrEqualTo(MeetingRequestSchema.End, End); 
    var filter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, filter1, filter2); 
    var vw = new ItemView(99); 
    var items = svc.FindItems(WellKnownFolderName.Calendar, filter, vw); 

    Console.WriteLine("Count: {0}", items.TotalCount); 

}