Share via


Suchen und Abrufen von Terminen in einem Zeitbereich

Dieses Beispiel gibt im standardmäßigen Microsoft Outlook-Kalender Termine in einem bestimmten Zeitraum zurück.

Beispiel

Dieses Codebeispiel enthält zwei Methoden: DemoAppointmentsInRange und GetAppointmentsInRange. DemoAppointmentsInRange ruft den Standardkalender für das aktuell angemeldete Outlook-Profil ab, legt einen Datumsbereich von 5 Tagen ab 12:00 Uhr fest, ruft GetAppointmentsInRange auf, um Termine zu erhalten, die in diesen Zeitbereich fallen, und zeigt den Betreff und die Startzeit jedes zurückgegebenen Termins an.

GetAppointmentsInRange akzeptiert einen Outlook-Ordner und die DateTime-Werte für die Start- und Endzeit als Eingabeparameter. Diese Methode verwendet die Restrict(String)-Methode und einen Zeichenfolgenfilter im Jet-Format, der Termine zurückgibt, die innerhalb des angegebenen Zeitraums beginnen und enden. Wenn [Start] und [End] die Start- und Endzeit eines Termins sind und startTime und endTime die Anfangs- und Endzeit des angegebenen Zeitbereichs sind, richtet GetAppointmentsInRange einen Filter ein, der mit [Start]>=startTime, und [End]<=endTimenach Terminen sucht. Der folgende Code zeigt den Jet-Filter in C#.

string filter = "[Start] >= '"
    + startTime.ToString("g")
    + "' AND [End] <= '"
    + endTime.ToString("g") + "'";

Vor dem Aufrufen der Items.Restrict-Methode zur Suche von Terminen werden von GetAppointmentsInRange zwei weitere Vorgänge ausgeführt, um Terminserien einzuschließen, die in dem angegebenen Zeitraum auftreten:

  • Legt die IncludeRecurrences-Eigenschaft der Items-Auflistung fest.

  • Sortiert die Terminelemente in dem angegebenen Kalenderordner anhand der Start-Eigenschaft.

Wenn Sie auch an Terminen interessiert sind, die teilweise oder komplett mit dem angegebenen Zeitraum überlappen, können Sie alternativ einen anderen Filter angeben, um weitere Typen von Terminen zurückzugeben (wie in Abbildung 1 dargestellt):

  • Termine, die innerhalb des angegebenen Zeitraums beginnen und enden (z. B. Termin A):

    [Start]>=startTime and [End]<=endTime

  • Termine, die vor dem angegebenen Zeitraum beginnen, aber innerhalb des Zeitraums enden (z. B. Termin B):

    [Start]<startTime and [End]<=endTime

  • Termine, die innerhalb des angegebenen Zeitraums beginnen, aber nach dem Zeitraum enden (z. B. Termin C):

    [Start]>=startTime and [End]>endTime

  • Termine, die vor dem angegebenen Zeitraum beginnen und nach dem Zeitraum enden (z. B. Termin D):

    [Start]<startTime and [End]>endTime

Abbildung 1: Arten von Terminen, die innerhalb eines Zeitraums auftreten oder sich mit diesem Zeitraum überschneiden.

Arten von Terminen, die innerhalb eines Zeitraums auftreten oder sich mit diesem Zeitraum überschneiden.

In einem beliebigen Zeitraum startTime<=endTime würde ein Filter mit [Start]<=endTime und [End]>=startTime die vorherigen Typen von Terminen in diesem Zeitraum erfassen.

In C# können Sie den Jet-Filter wie folgt ausdrücken.

string filter = "[Start] <= '"
    + endTime.ToString("g")
    + "' AND [End] >= '"
    + startTime.ToString("g") + "'";

Im folgenden Code ist das vollständige Beispiel dargestellt. 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 void DemoAppointmentsInRange()
{
    Outlook.Folder calFolder =
        Application.Session.GetDefaultFolder(
        Outlook.OlDefaultFolders.olFolderCalendar)
        as Outlook.Folder;
    DateTime start = DateTime.Now;
    DateTime end = start.AddDays(5);
    Outlook.Items rangeAppts = GetAppointmentsInRange(calFolder, start, end);
    if (rangeAppts != null)
    {
        foreach (Outlook.AppointmentItem appt in rangeAppts)
        {
            Debug.WriteLine("Subject: " + appt.Subject 
                + " Start: " + appt.Start.ToString("g"));
        }
    }
}

/// <summary>
/// Get recurring appointments in date range.
/// </summary>
/// <param name="folder"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns>Outlook.Items</returns>
private Outlook.Items GetAppointmentsInRange(
    Outlook.Folder folder, DateTime startTime, DateTime endTime)
{
    string filter = "[Start] >= '"
        + startTime.ToString("g")
        + "' AND [End] <= '"
        + endTime.ToString("g") + "'";
    Debug.WriteLine(filter);
    try
    {
        Outlook.Items calItems = folder.Items;
        calItems.IncludeRecurrences = true;
        calItems.Sort("[Start]", Type.Missing);
        Outlook.Items restrictItems = calItems.Restrict(filter);
        if (restrictItems.Count > 0)
        {
            return restrictItems;
        }
        else
        {
            return null;
        }
    }
    catch { return null; }
}

Siehe auch