Фильтрация повторяющихся встреч и поиск строки в теме
В этом примере выполняется фильтрация повторяющихся встреч, попадающих в интервал дат в папке "Календарь", а затем двумя способами выполняется поиск в теме строки "office".
Пример
Чтобы отфильтровать повторяющиеся встречи, в этом примере кода используется коллекция Items вместо объекта Table, поскольку объект Table возвращает только главные серии встреч и не включает повторяющиеся элементы в папке. Чтобы включить повторяющиеся встречи при вызове метода Find(String) или Restrict(String), в примере кода задается свойство IncludeRecurrences коллекции Items, а затем встречи в папке сортируются с помощью их свойства Start. После этого применяется запрос Jet для указания дат начала и окончания повторений.
После получения коллекции Items элементов повторяющихся встреч, которые находятся в заданном диапазоне дат, в примере кода выполняется два новых поиска с помощью запросов DASL. В первом поиске используются методы Items.Find, FindNext и ключевое слово like для поиска элементов с подстрокой "office" в теме. Второй поиск использует метод Items.Restrict и ci_startswith ключевое слово для поиска элементов, у которых есть темы, начинающиеся с "office".
Если для тестирования этого примера кода вы используете Visual Studio, сначала добавьте ссылку на компонент библиотеки объектов Microsoft Outlook 15.0 и укажите переменную Outlook при импорте пространства имен Microsoft.Office.Interop.Outlook. Инструкция Imports или using не должна идти непосредственно перед функциями в примере кода, но ее нужно добавить перед объявлением общедоступного класса. В следующих строках кода показано, как выполнить импорт и назначение в Visual Basic и C#.
Imports Outlook = Microsoft.Office.Interop.Outlook
using Outlook = Microsoft.Office.Interop.Outlook;
Private Sub SearchRecurringAppointments()
Dim appt As Outlook.AppointmentItem = Nothing
Dim folder As Outlook.Folder = _
CType(Application.Session.GetDefaultFolder( _
Outlook.OlDefaultFolders.olFolderCalendar), _
Outlook.Folder)
' Set start value
Dim startTime As DateTime = New DateTime(2006, 8, 9, 0, 0, 0)
' Set end value
Dim endTime As DateTime = New DateTime(2006, 12, 14, 0, 0, 0)
' Initial restriction is Jet query for date range
Dim filter1 As String = "[Start] >= '" & startTime.ToString("g") _
& "' AND [End] <= '" & endTime.ToString("g") & "'"
Dim calendarItems As Outlook.Items = folder.Items.Restrict(filter1)
calendarItems.IncludeRecurrences = True
calendarItems.Sort("[Start]")
' Must use 'like' comparison for Find/FindNext
Dim filter2 As String
filter2 = "@SQL=" & _
Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & _
" like '%Office%'"
' Create DASL query for additional Restrict method
Dim filter3 As String
If (Application.Session.DefaultStore.IsInstantSearchEnabled) Then
filter3 = "@SQL=" & _
Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & " _
ci_startswith 'Office'"
Else
filter3 = "@SQL=" & _
Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & " _
like '%Office%'"
End If
' Use Find and FindNext methods
appt = CType(calendarItems.Find(filter2), Outlook.AppointmentItem)
While Not (appt Is Nothing)
Dim sb As StringBuilder = New StringBuilder()
sb.AppendLine(appt.Subject)
sb.AppendLine("Start: " & appt.Start)
sb.AppendLine("End: " & appt.End)
Debug.WriteLine(sb.ToString())
' Find the next appointment
appt = CType(calendarItems.FindNext(), Outlook.AppointmentItem)
End While
' Restrict calendarItems with DASL query
Dim restrictedItems As Outlook.Items = _
calendarItems.Restrict(filter3)
For Each apptItem As Outlook.AppointmentItem In restrictedItems
Dim sb As StringBuilder = New StringBuilder()
sb.AppendLine(apptItem.Subject)
sb.AppendLine("Start: " & apptItem.Start)
sb.AppendLine("End: " & apptItem.End)
sb.AppendLine()
Debug.WriteLine(sb.ToString())
Next
End Sub
private void SearchRecurringAppointments()
{
Outlook.AppointmentItem appt = null;
Outlook.Folder folder =
Application.Session.GetDefaultFolder(
Outlook.OlDefaultFolders.olFolderCalendar)
as Outlook.Folder;
// Set start value
DateTime start =
new DateTime(2006, 8, 9, 0, 0, 0);
// Set end value
DateTime end =
new DateTime(2006, 12, 14, 0, 0, 0);
// Initial restriction is Jet query for date range
string filter1 = "[Start] >= '" +
start.ToString("g")
+ "' AND [End] <= '" +
end.ToString("g") + "'";
Outlook.Items calendarItems = folder.Items.Restrict(filter1);
calendarItems.IncludeRecurrences = true;
calendarItems.Sort("[Start]", Type.Missing);
// Must use 'like' comparison for Find/FindNext
string filter2;
filter2 = "@SQL="
+ "\"" + "urn:schemas:httpmail:subject" + "\""
+ " like '%Office%'";
// Create DASL query for additional Restrict method
string filter3;
if (Application.Session.DefaultStore.IsInstantSearchEnabled)
{
filter3 = "@SQL="
+ "\"" + "urn:schemas:httpmail:subject" + "\""
+ " ci_startswith 'Office'";
}
else
{
filter3 = "@SQL="
+ "\"" + "urn:schemas:httpmail:subject" + "\""
+ " like '%Office%'";
}
// Use Find and FindNext methods
appt = calendarItems.Find(filter2)
as Outlook.AppointmentItem;
while (appt != null)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(appt.Subject);
sb.AppendLine("Start: " + appt.Start);
sb.AppendLine("End: " + appt.End);
Debug.WriteLine(sb.ToString());
// Find the next appointment
appt = calendarItems.FindNext()
as Outlook.AppointmentItem;
}
// Restrict calendarItems with DASL query
Outlook.Items restrictedItems =
calendarItems.Restrict(filter3);
foreach (Outlook.AppointmentItem apptItem in restrictedItems)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(apptItem.Subject);
sb.AppendLine("Start: " + apptItem.Start);
sb.AppendLine("End: " + apptItem.End);
sb.AppendLine();
Debug.WriteLine(sb.ToString());
}
}