Outlook & C# Serie – Search Appointment

In diesem Post zeige ich, wie der Outlook Kalender nach Appointments durchsucht werden kann.

Outlook bzw. dessen API bietet zwei Möglichkeiten Suchabfragen zu definieren. Zum einen Jet Query Language und zum Anderen DASL.

Entry Point Jet Filter Support DASL Filter Support
Application.AdvancedSearch No Yes
Folder.GetTable Yes Yes
Items.Find Yes Yes. Note that if you use the query keywords ci_phrasematch or ci_startswith in the filter, you will get an error.
Items.Restrict Yes Yes
Search.GetTable No Yes
Table.FindRow Yes Yes. Note that if you use the query keywords ci_phrasematch or ci_startswith in the filter, you will get an error.
Table.Restrict Yes Yes
View.Filter No Yes

http://msdn.microsoft.com/en-us/library/office/ff863965%28v=office.15%29.aspx

In meinem Fall habe ich Items.Restrict, mit einem Jet Filter, verwendet.

Code sagt mehr als tausend Worte, deshalb nun direkt das Beispiel.
Vorausgesetzt ist, dass es ein Field “outlook” gibt welches eine Instanz einer Outlook Application enthält.

private IEnumerable<AppointmentItem> GetModifiedAppointments(DateTime from, DateTime to) {
    private const string filter = 
      "[LastModificationTime] >= '{0}' AND [LastModificationTime] <= '{1}' AND [MessageClass] = 'IPM.Appointment'";

    var folder = 
      (Folder)outlook.Session.GetDefaultFolder(OlDefaultFolders.olFolderCalendar);
    
    string transformedFilter = 
       String.Format(filter, @from.ToString("g"), to.ToString("g"));

    Items items = folder.Items;
    items.IncludeRecurrences = true;
    Items restrictItems = items.Restrict(transformedFilter);

    foreach (AppointmentItem restrictItem in restrictItems)
    {
        yield return restrictItem
    }
}

Das folgende Code Snippet holt alle AppointmentItems (Kalendereinträge) welche in einem gewissen Zeitraum modifiziert wurden. Die Rückgabewerte der API sind jeweils “dynamic“, es ist jedoch praktischer sie zu Casten, damit man IntelliSense Unterstütztung erhält.

Leave a Reply

Your email address will not be published.