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.