Avatar billede jsandh Nybegynder
26. maj 2006 - 14:06

Outlook 2003 programmering: Gemme aftale i delt kalender

Jeg programmerer i C# via COM-objekter fra namespacet Microsoft.Office.Interop.Outlook

Det er muligt at oprette aftaler (AppointmentItem) med CreateItem-metoden på Application-objektet, men det er desværre ikke muligt at angive i hvilken kalender?! (jeg ønsker som sagt at gemme i en delt kalender, der ikke er min egen)

Derfor opretter jeg den først og flytter den derefter med Move-metoden.

Det ville også være fint nok, hvis ikke det var fordi, at propertien "Organizer" (møde-indkalder) er read-only. Når jeg gemmer den, opretter Outlook derefter automatisk aftalen i min egen kalendar, da jeg er organizer :-(
Er det muligt at omgå dette?

Et hack er så efterfølgende at slette aftalen fra min egen kalender, hvilket er det jeg gør lige pt.
Problemet er her, at jeg er nødt til at foretage en lineær søgning med foreach på alle aftaler i min kalender, da Find-metoden på Items ikke understøtter EntryId :-(

Dette er ikke rart og jeg vil gerne finde en løsning, der kan gemme i en delt kalender, uden at jeg skal løbe alle mine egne kalender-entries igennem.

Her er min kode:
---
        private static void AddOutlookCalendarEntry(string sharedCalName, string subject, string body)
        {
            Microsoft.Office.Interop.Outlook.Application application = new Microsoft.Office.Interop.Outlook.Application();
            Microsoft.Office.Interop.Outlook.NameSpace ns = application.GetNamespace("MAPI");
            Microsoft.Office.Interop.Outlook.Recipient sharedCalRecipient = ns.CreateRecipient(sharedCalName);
            Microsoft.Office.Interop.Outlook.MAPIFolder sharedCal = ns.GetSharedDefaultFolder(sharedCalRecipient, Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderCalendar);
            Microsoft.Office.Interop.Outlook.AppointmentItem newAppointment = (Microsoft.Office.Interop.Outlook.AppointmentItem)application.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olAppointmentItem);
            newAppointment.Subject = subject;
            newAppointment.Body = body;
            newAppointment.ReminderSet = false;
            newAppointment.Move(sharedCal); // Move appointment to shared calendar
            newAppointment.Save();
            string newAppointmentEntryId = newAppointment.EntryID;
            newAppointment.Close(Microsoft.Office.Interop.Outlook.OlInspectorClose.olDiscard);

            Microsoft.Office.Interop.Outlook.MAPIFolder ownCalAppointments = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderCalendar);
            // Delete the calendar entry from own calendar (linear search is the only way)
            foreach (Microsoft.Office.Interop.Outlook.AppointmentItem myAppointment in ownCalAppointments.Items)
            {
                if (myAppointment.EntryID == newAppointmentEntryId)
                {
                    myAppointment.Delete();
                    break;
                }
            }
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester