Question

J'ai besoin du rendez-vous en cours. Si pas de rendez-vous en cours, le rendez-vous suivant ou même précédent.

Je pense à utiliser Restrict Pour limiter l'ensemble des nominations, puis choisissez le premier ou le dernier rendez-vous en fonction de l'argument de restriction (par exemple, restreignez les nominations se terminant après l'heure actuelle, ou les nominations commençant avant l'heure actuelle).

J'ai des problèmes avec le filtre de chaîne nécessaire comme argument.

Un exemple VB simple (Code Stump):

myStart = Format(Date, "mm/dd/yyyy hh:mm AMPM")    
strRestriction = "[Start] <= '" & myStart & "'"

'Restrict the Items collection
Set oResItems = oItems.Restrict(strRestriction)
'Sort
oResItems.Sort "[Start]"

J'essaie de faire de même en C #.

// Create the Outlook application.
Outlook.Application oApp = new Outlook.Application();

// Get the NameSpace and Logon information.
// Outlook.NameSpace oNS = (Outlook.NameSpace)oApp.GetNamespace("mapi");
Outlook.NameSpace oNS = oApp.GetNamespace("mapi");

//Log on by using a dialog box to choose the profile.
oNS.Logon(Missing.Value, Missing.Value, true, true);

// Get the Calendar folder.
Outlook.MAPIFolder oCalendar = oNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);

// Get the Items (Appointments) collection from the Calendar folder.
oItems = oCalendar.Items;
oItems.IncludeRecurrences = true;

// THIS IS THE PROBLEM AREA
String filter = "[Start] <= '" + DateTime.Now.ToString("MM/dd/yyyy hh:mm AMPM") + "'";
Outlook.Items restrictedItems = oItems.Restrict(filter);
// Take the last item on the list - should be current or next appointment
restrictedItems.Sort("[Start]");
Outlook.AppointmentItem oAppt = restrictedItems.GetLast();


// Done. Log off.
oNS.Logoff();

J'imagine que le filtre est une chaîne, le format de date doit être yyyy / mm / dd hh: mm: ss? Je ne trouve aucune documentation sur la façon de manipuler le [début], comme l'analyser à une date ou quelque chose.

Selon le format de date, j'obtiendrai le mauvais rendez-vous ou ne pourrai pas utiliser GetLast en raison du filtre à l'exclusion de tous les rendez-vous.

J'ai vu des exemples, mais soit ils traversent les rendez-vous (trop inefficaces), soit les formats de date semblent ne pas être fiables pour retourner le rendez-vous correct (par exemple https://social.msdn.microsoft.com/forums/vstudio/en-us/c6a8bd21-6534-43be-b23e-1068651da92e/retReve-appointment-items-from-outlook-2007--calendar-restrict?Forum=Vsto, qui semble avoir la date à code dur à la place si vous utilisez DateTime.Now.)

MISE À JOUR: Je me déroule actuellement comme indiqué ci-dessous. Des suggestions de code plus efficace?

DateTime currentTime = DateTime.Now;
foreach (Outlook.AppointmentItem item in oItems)
{
    if (item.Start <= currentTime && item.End.Subtract(new TimeSpan(0, 10, 0)) > currentTime)
    {
        appointmentArrayList.Add(item);
    }
}

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top