Использование Delphi для чтения встреч Outlook через COM ...
Код работает нормально, за исключением повторяющихся встреч.
Все, что я прочитал, говорит о том, что мне нужно использовать RecurrencePattern и GetOccurrence и определить, где должно быть следующее назначение, а затем попытаться получить его и посмотреть, не получится ли это ... Это похоже на действительно "запутанный" способ сделать это.
Кто-нибудь уже писал что-то подобное? Видимо, есть какой-то код на обмене экспертами, но у меня там нет подписки ... Больше ничего не могу найти.
ИДЕАЛЬНО (и я возьму то, что смогу получить), я хотел бы, чтобы подпрограмма гласила: у этого назначения 6 встреч, и здесь представлен массив всех TDateTimes каждого вхождения.
Обратите внимание, что весь этот код работает нормально. Мне просто нужна помощь в заполнении нижнего раздела кода для построения шаблонов повторения.
ФРАГМЕНТЫ КОДОВ --- Не весь код показан ---... согласно запросу ...
Доступ к Outlook ...
try
Outlook := GetActiveOleObject('outlook.application');
Form1.SB1.SimpleText := 'Outlook already started';
except
try
Outlook := CreateOleObject('outlook.application');
Created := True;
Form1.SB1.SimpleText := 'Outlook not running. Starting Outlook API';
except
// Unable to access or start OUTLOOK
MessageDlg(
'Unable to start or access Outlook. Possibilities include: permission problems, server down, or VPN not enabled. Exiting...', mtError, [mbOK], 0);
exit;
end;
end;
... Получить календарь моего получателя ...
// Now get the calendar entry
Calendar := Namespace.GetSharedDefaultFolder(Recip, 9);
Теперь установите фильтр для ограничения назначений в пределах диапазона дат и включения повторений.
// If here, everything is good so far...
// user name, email, and Calendar is accessible
MyItems := Calendar.Items;
MyItems.Sort('[Start]', False);
MyItems.IncludeRecurrences := True;
// Set the filter dates... SECONDS can NOT be shown...
FilterStartDate := FormatDateTime('mmmm dd, yyyy', StartDate);
FilterStartDate := FilterStartDate + ' 12:00 AM';
FilterEndDate := FormatDateTime('mmmm dd, yyyy', EndDate);
FilterEndDate := FilterEndDate + ' 11:59 PM';
RestrictDateFilter := ('[Start]>' + CHR(34) + FilterStartDate + CHR(34) + 'and ' + '[Start]<' + CHR(34)
+ FilterEndDate + CHR(34));
DebugIt('RestrictFilter:', RestrictDateFilter);
Application.ProcessMessages;
ItemCollection := MyItems.Restrict(RestrictDateFilter);
ItemCollection.Sort('[Start]', False);
Прочитайте мою первую встречу
// Try to read the first appoint, or error message if no appointments
try
Appointment := ItemCollection.GetFirst;
except
DebugIt('No appointments found', '');
MessageDlg('Unable to retrieve any appointments in this time frame.', mtError, [mbOK], 0);
exit;
end;
Зацикливаясь на всех встречах ...
if Appointment.IsRecurring = True then
begin
// Recurring Appointment, in a Valid RANGE
DebugIt('Repeating appointment starting on ' + DateToStr(Appointment.Start), '');
// If yearly repeating, we want to ignore
RP := Appointment.GetRecurrencePattern;
DebugIt('Determining appointment recurrence pattern', '');
if ((RP.RecurrenceType = olRecursYearly) or (RP.RecurrenceType = olRecursYearNth)) then
begin
// ignore these appointments
end
else
begin
// HERE IS WHERE I NEED HELP
// How do I determine all of the appointments based on the recurrences?
end;
end;
Спасибо
GS