2016-08-29 3 views
2

У меня есть код ниже, который должен позволить мне получать собрания из общего подкатегория, но он не работает.Доступ Получите подпапку общих собраний папок

Если я только пытаюсь получить доступ к основной общий календарь он работает идеально, но не для суб календарей ..

может кто-то момент меня на правильный путь?

Public Sub getCalendarData(calendar_name As String, sDate As Date, eDate As Date, Optional recurItem As Boolean = True) 
    On Error GoTo ErrorHandler 

    Dim oOL As Outlook.Application 
    Dim oNS As Outlook.Folder 
    Dim oAppointments As Outlook.AppointmentItem 
    Dim oAppointmentItem As Outlook.AppointmentItem 
    Dim strFilter As String 
    Dim ItemsCal As Outlook.Items 
    Dim olFolder As Outlook.Folder 
    Dim fldCalendar As Outlook.Folder 
    Dim iCalendar As Integer 
    Dim nmsNameSpace As Outlook.Namespace 
    Dim objDummy As Outlook.MailItem 
    Dim objRecip As Outlook.Recipient 

    'Set objects 

    Set oOL = CreateObject("Outlook.Application") 
    Set nmsNameSpace = oOL.GetNamespace("MAPI") 

    Set objDummy = oOL.CreateItem(olMailItem) 

    Set objRecip = nmsNameSpace.CreateRecipient("shared calendar name") 
    objRecip.Resolve 

    'Set filter to grab items by date range 
    strFilter = "[Start] >= " _ 
    & "'" & sDate & "'" _ 
    & " AND [End] <= " _ 
    & "'" & eDate & "'" 

    With ItemsCal 
     .Sort "[Start]" 
     .IncludeRecurrences = recurItem 
    End With 

    If objRecip.Resolved Then 
     On Error Resume Next 
     Set fldCalendar = nmsNameSpace.GetSharedDefaultFolder(objRecip, olFolderCalendar).Folders("sub_calendar_name") 

     If Not fldCalendar Is Nothing Then 
      Set ItemsCal = fldCalendar.Items 
      If Not ItemsCal Is Nothing Then 
       For Each oAppointmentItem In ItemsCal.Restrict(strFilter) 
        Set objItem = oAppointmentItem 
        With oAppointmentItem 
         iCalendar = getSegmentIDByName(calendar_name) 
         meeting_id = insertAppointment(iCalendar, .Start, .End, scrubData(.Subject), scrubData(.Location), Format(.Start, "Long Time"), .duration, .Body) 
         Call GetAttendeeList(meeting_id, objItem, .Recipients) 
        End With 
       Next 
      End If 
     End If 
    End If 

    'Garbage cleanup 
    Set oAppointmentItem = Nothing 
    Set oAppoinments = Nothing 
    Set oNS = Nothing 
    Set oOL = Nothing 

Exit Sub 
ErrorHandler: 
    'MsgBox "Error: " & Err & " | " & Error(Err) 
    'Whenever error occurs, skip to next 
    Resume Next 
End Sub 

Проблема заключается в том, что fldCalendar всегда возвращается nothing, и я не знаю, что это неправильно ..

Спасибо!

ответ

2

Имейте в виду, что в режиме кеширования, когда вы получаете доступ к папке по умолчанию из другого почтового ящика, вы не получаете доступ ко всему почтовому ящику - папка (но не ее подпапки) кэшируется в вашем основном файле OST.

Вы можете добавить весь почтовый ящик в качестве делегата магазина (вкладке Дополнительно диалогового окна свойств учетной записи Exchange,), а затем перейти в эту папку из Store.RootFolder (где магазин извлекается из Namespace.Stores коллекции).

Если используется Redemption, это вариант RDOSession. GetSharedDefaultFolder (или RDOSession.GetSharedMailbox) возвращает живую папку (RDOFolder), а не ее кешированную версию, поэтому вы сможете получить доступ к подпапкам.

+0

Благодарим за быстрый ответ. Поэтому я должен использовать что-то вроде Store.RootFolder.Folders ('' calendar_name ')? Или как я могу получить собрания внутри этой папки? – rosuandreimihai

+0

Это точно верно - Store.RootFolders.Folders («Календарь»). Папки («Имя подпапки») или Store.GetDefaultFolder (olFolderCalendar) .Folders («Имя подпапки») будут работать. –

+0

'Dim rootFolder As Outlook.Stores Set rootFolder = nmsNameSpace.Stores Установить fldCalendar = rootFolder.RootFolders.Folders (« Календарь »). Папки (« Имя подпапки »)' Но тогда я потеряю соединение с общим default folder .. – rosuandreimihai

Смежные вопросы