Partager via


Effectuer des recherches et obtenir des rendez-vous dans un intervalle de temps

Cet exemple envoie les rendez-vous dans un intervalle de temps spécifique dans le calendrier Microsoft Outlook par défaut.

Exemple

Cet exemple de code contienne deux méthodes : DemoAppointmentsInRange et GetAppointmentsInRange. DemoAppointmentsInRange obtient le calendrier par défaut pour le profil Outlook connecté actuel, définit une plage de dates de 5 jours à partir de 12h00 aujourd’hui, appelle GetAppointmentsInRange pour obtenir des rendez-vous qui se trouvent dans cet intervalle de temps et affiche l’objet et l’heure de début de chacun des rendez-vous retournés.

GetAppointmentsInRange accepte un dossier Outlook et les valeurs de début et fin DateTime de l’intervalle de temps en tant que paramètres d’entrée. Cette méthode utilise la méthode Restrict(String) et une chaîne de filtre dans format Jet qui envoie les rendez-vous qui commencent et se terminent au sein de la plage horaire donnée. En supposant que [Start] et [End] sont l’heure de début et l’heure de fin d’un rendez-vous, et que startTime et endTime sont les heures de début et de fin de l’intervalle de temps spécifié, GetAppointmentsInRange configure un filtre qui recherche les rendez-vous avec [Start]>=startTime, et [End]<=endTime. Le code suivant montre le filtre Jet en C#.

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

Avant d’appeler la méthode Items.Restrict pour rechercher des rendez-vous, GetAppointmentsInRange procède à deux autres actions pour inclure les rendez-vous périodiques qui se produisent dans l’intervalle de temps spécifié :

Par ailleurs, si vous cherchez également des rendez-vous qui se chevauchent partiellement ou entièrement dans l’intervalle de temps spécifié, vous devez spécifier un filtre différent pour renvoyer les autres types de rendez-vous (comme illustré dans la Figure 1) :

  • Rendez-vous qui commencent et se terminent dans l’intervalle de temps spécifié (par exemple, rendez-vous A) :

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

  • Rendez-vous qui commencent avant mais se terminent dans l’intervalle de temps spécifié (par exemple, rendez-vous B) :

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

  • Rendez-vous qui commencent dans mais se terminent après l’intervalle de temps spécifié (par exemple, rendez-vous C) :

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

  • Rendez-vous qui commencent avant mais se terminent après l’intervalle de temps spécifié (par exemple, rendez-vous D) :

    [Start]<startTime and [End]>endTime

Figure 1. Types de rendez-vous qui se produisent au sein d’un intervalle de temps ou se chevauchent dans ce laps de temps

Types de rendez-vous qui se produisent au sein d’un intervalle de temps ou se chevauchent dans ce laps de temps

Étant donné que dans n’importe quelle plage horaire startTime<=endTime, un filtre avec [Start]<=endTime et [End]>=startTime capturerait les types de rendez-vous précédents de cette plage horaire.

En C#, vous pouvez exprimer le filtre Jet comme suit.

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

Le code suivant montre l’exemple complet. Si vous utilisez Visual Studio pour tester cet exemple de code, vous devez d’abord ajouter une référence au composant Bibliothèque d’objets Microsoft Outlook 15.0 et spécifier la variable lorsque vous importez l’espace de noms Microsoft.Office.Interop.Outlook. L'instruction Importer ou utilisation ne doit pas se produire juste avant les fonctions de l'exemple de code, mais doit être ajoutée avant la déclaration publique. Les lignes de code suivantes montrent comment effectuer l’importation et l’affectation dans Visual Basic et dans C#.

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; }
}

Voir aussi