Filtern von Terminserien und Suchen nach einer Zeichenfolge im Betreff
In diesem Beispiel werden Terminserien in einem Kalenderordner gefiltert, die in einen bestimmten Datumsbereich fallen. Anschließend wird auf zwei Arten nach der Zeichenfolge "office" im Betreff gesucht.
Beispiel
Zum Filtern von Terminserien verwendet dieser Beispielcode die Items-Auflistung anstelle des Table-Objekts, da das Table-Objekt nur die Masterserientermine zurückgibt und keine Terminserien in dem Ordner enthält. Um Terminserien beim Aufrufen der Find(String)- oder der Restrict(String)-Methode einzuschließen, legt das Codebeispiel die IncludeRecurrences-Eigenschaft der Items-Auflistung fest und sortiert dann Termine im Ordner anhand der Start-Eigenschaft. Dann wird eine Jet-Abfrage verwendet, um Start- und Enddaten für die Termine anzugeben.
Nach dem Abrufen einer Items-Auflistung von Terminserienelementen, die in den angegebenen Datumsbereich fallen, führt das Codebeispiel zwei oder mehr Suchvorgänge mithilfe von DASL-Abfragen (DAV Searching and Locating) aus. Bei der ersten Suche wird Items.Find, FindNext und das like-Schlüsselwort verwendet, um nach Elementen zu suchen, die „office“ als Teilzeichenfolge im Betreff enthalten. Die zweite Suche verwendet die Items.Restrict-Methode und die ci_startswith Schlüsselwort (keyword), um nach Elementen zu suchen, deren Themen mit "office" beginnen.
Wenn Sie Visual Studio verwenden, um dieses Codebeispiel zu testen, müssen Sie der Microsoft Outlook 15.0-Objektbibliothekkomponente zuerst einen Verweis hinzufügen und die Outlook-Variable angeben, wenn Sie den Microsoft.Office.Interop.Outlook-Namespace importieren. Die Anweisung Imports oder using darf im Codebeispiel nicht direkt vor den Funktionen stehen, sondern muss vor der öffentlichen Class-Deklaration hinzugefügt werden. Die folgenden Codezeilen zeigen, wie Sie den Import und die Zuweisung in Visual Basic und C# vornehmen.
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());
}
}