Создание AppointmentItems в общих календарях - исключение объекта не найдено - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь создать приложение, которое позволяет пользователям создавать элементы встреч в общем календаре Outlook для нашей компании с помощью Outlook Interop (так вы говорите?).

Календарь находится в моемаккаунт и я дал разрешение всем, кому это нужно.Эти пользователи могут создавать и изменять календарь без проблем из своих реальных клиентов Outlook.Я написал следующую функцию, и она отлично работает, когда она запускается с моей учетной записью, вошедшей в систему. В тот момент, когда я выхожу из одной из учетных записей других пользователей, возникает исключение.

Public Sub AddAppointment()
    Try
        Dim Application As Outlook.Application = New Outlook.Application
        Dim NS As Outlook.NameSpace = Application.GetNamespace("MAPI")
        Dim RootFolder As Outlook.Folder
        Dim CalendarFolder As Outlook.Folder
        Dim PlumbingCalendarFolder As Outlook.Folder
        Dim Appointment As Outlook.AppointmentItem

        RootFolder = NS.Folders("myemail@ourdomain.com") 'exception here
        CalendarFolder = RootFolder.Folders("Calendar")
        FletcherCalendarFolder = CalendarFolder.Folders("Plumbing Tasks")
        Appointment = FletcherCalendarFolder.Items.Add("IPM.Appointment")

        'with/end with guts that define the appointmentitem here

        Appointment.Save()

        MessageBox.Show("An event for this due date was added to the calendar.")

        Application = Nothing
    Catch ex As Exception
        MessageBox.Show("The event for this due date could not be added to the calendar. The following error occurred: " & ex.Message)
    End Try
End Sub

Исключение выдается, когда я пытаюсь установить RootFolder - говорит, что «Попытка не удалась.Объект не может быть найден.Тот факт, что это работает, когда владелец календаря вошел в систему, заставляет меня поверить, что я не понимаю, как я должен получать папки из другой учетной записи.Я рядом?Я знаю об объекте получателя и создаю, а затем разрешаю его с помощью Outlook.Namespace.CreateRecipient, а также NameSpace.GetShareDefaultFolder, но каждая комбинация из тех, что я пробовал, терпела неудачу точно таким же образом.Я чувствую, что упускаю что-то глупое.

1 Ответ

0 голосов
/ 30 апреля 2019

Был в состоянии заставить это работать (FeelsGoodMan).Я отказался от идеи получения папки моего календаря предыдущим способом, когда узнал о Outlook.NameSpace.GetFolderFromID.EntryID - это, по-видимому, уникальные идентификаторы для объектов Outlook (не цитируйте меня). Посмотрев, какие папки работали, я смог получить EntryID календаря, а затем, используя GetFolderFromID, я смог получитьрабочая папка в моем коде.

Public Sub AddAppointment()
    Const ENTRYID As String = "IdIGotFromWatch"
    Try
        Dim Application As Outlook.Application = New Outlook.Application
        Dim NS As Outlook.NameSpace = Application.GetNamespace("MAPI")
        Dim CalendarFolder As Outlook.Folder
        Dim Appointment As Outlook.AppointmentItem

        CalendarFolder = NS.GetFolderFromID(ENTRYID)

        Appointment = CalendarFolder.Items.Add("IPM.Appointment")

        'with/end with guts that define the appointmentitem here

        Appointment.Save()

        Application = Nothing
    Catch ex As Exception
        MessageBox.Show("The event for this due date could not be added to the calendar. The following error occurred: " & ex.Message)
    End Try
End Sub

Редактировать: Я думаю, что следует сказать, что это решение будет работать для меня, только если Календарь / Папка остается там, где она есть и не перемещается.Если я правильно понимаю, если Календарь когда-либо перемещается, EntryID также изменится.Я не уверен, что еще вызовет изменение идентификатора (возможно, переименование?), Но я не понимаю, почему я не мог просто обновить идентификатор, чтобы отразить изменение в будущем.Это работает для меня.

...