2016-08-07 44 views
7

Ich habe den folgenden Code bekommt:Richtiger Weg, Kalendereinträge über Ews Managed API abzufragen?

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); 

Ich versuche, diese Abfrage auf einem Wechselraum Mailbox zu laufen. (Dies ist jedoch nicht im obigen Code ersichtlich). Es kann eine Reservierung mit der genauen Start-/Endzeit haben. Daher, wenn es eine Reservierung gibt, die diesen Kriterien entspricht, sollte ich mindestens einen Gegenstand bekommen.

Der Hintergrund dazu: Denken Sie an einen Besprechungsraum und die Leute versuchen, es für ein Treffen zu blockieren. Im Austausch ist dies nur ein anderes Postfach, ähnlich einem Benutzerpostfach. Also bei erfolgreicher Buchung erhält dieses Postfach eine E-Mail mit den Kalenderdetails (iCalendar-Format (*.ics).

ich auf zwei verschiedene Zählungen steckte ...

  1. items Rückkehr nichts in dem Der TotalCount ist Null. Vielleicht mache ich etwas falsch mit der API. Ich bin nicht in der Lage, dies zu denken.

  2. Ich bin eigentlich verwirrt mit dem, was ich versuche abzufragen.Ich verstehe nicht Exchange-Auflösung in Dies ist weiter unten beschrieben.

Sie haben also E-Mail-Nachrichten in einem Raum Postfach. In jeder E-Mail ist der Kalender normalerweise mit einer Base64-Kodierung eingebettet. Der Kalender hat ein spezifisches Schema - wir sind nur an den Daten interessiert, die Sie zwischen VEVENTS finden (d. H. BEGIN: VEVENT und END: VEVENT). Das Problem hier ist, dass es manchmal mehrere VEVENTS geben kann. Wie macht der Austausch das wirklich? Durchläuft es alle VEVENTS, entspricht den Kriterien; wenn es erfolgreich übereinstimmt, gibt es diese "E-Mail" zurück (mit dem Kalender angefügt/eingebettet)? Oder ist es ein anderer Mechanismus?

Daher bin ich mir nicht sicher über die Semantik, die ich im obigen Code geschrieben habe. Also bitte hierüber informieren.

Antwort

1

die Antwort auf den ersten Teil gefunden:

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); 

}