Ограничение на настраиваемое свойство не работает в элементах календаря Outlook

Я хочу добавить настраиваемое свойство к своим элементам календаря (в идеале оно должно содержать уникальный идентификатор), чтобы я мог использовать ограничение для сбора экземпляров повторяющихся элементов встречи. Но хотя мне кажется, что я могу добавить свойство, я не могу найти способ использовать метод Items.Restrict(), чтобы найти элементы, содержащие свойство.

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

Я просмотрел десятки сайтов и нашел противоречивые ответы о том, возможно ли это вообще, но Microsoft, похоже, так думает (см. Первую ссылку), а также другие люди (см. Вторую ссылку).

Я использовал окно locals в режиме отладки, и Restrict определенно не собирает никаких объектов.

Я могу только предположить, что я делаю что-то не так в разделе "Столбец" (на основании этого "Пользовательские свойства должны быть определены в папке, к которой вы применяете фильтр. Если пользовательские свойства определены только в элементе, поиск завершится неудачно" "- первая ссылка) или вид, но я не могу понять, что.

Я знаю, что я не могу использовать TableView, потому что он не будет включать в себя повторяющиеся экземпляры (см. Третью ссылку).

  1. https://docs.microsoft.com/en-us/office/vba/outlook/how-to/search-and-filter/filtering-a-custom-field
  2. http://www.outlookcode.com/threads.aspx?forumid=2&messageid=27942
  3. https://docs.microsoft.com/en-us/office/client-developer/outlook/pia/how-to-filter-recurring-appointments-and-search-for-a-string-in-the-subject

    Sub AddAndRestrictCustomProperty()
    
    Dim NS As Outlook.NameSpace
    Dim dcal As Folder
    Dim dCalItmes As Items
    Dim objd As Items, objc As Items
    Dim item As Outlook.AppointmentItem
    Dim upCheck As Outlook.UserProperty
    Dim udpCheck As Outlook.UserDefinedProperty
    
    Set NS = Application.GetNamespace("MAPI")
    Set dcal = NS.GetDefaultFolder(olFolderCalendar)
    Set dCalItems = dcal.Items
    
    Set item = dCalItems.Add(olAppointmentItem)
    With item
        .Subject = "Placeholder Appt"
        .Start = "2/12/2019 4:30PM"
        .Body = "nothing"
        .MeetingStatus = olMeeting
        .Save
    End With
    
    'adds custom property
    Set upCheck = item.UserProperties.Add("userPropCheck", olText, True, olText)
    upCheck.Value = "testing"
    Debug.Print item.ItemProperties.item("userPropCheck").Value 'prints "testing"
    item.Save
    
    'gets instances of custom property in objd
    dCalItems.Sort "[Start]"
    dCalItems.IncludeRecurrences = True
    Set objd = dCalItems.Restrict("[subject] = Placeholder Appt And [Start] >= '2/11/2019' and [Start] <= '2/13/2019'")
    Debug.Print objd(1).ItemProperties.item("userPropCheck").Value 'prints testing
    
    'setColumns seems to not work for custom properties
    objd.SetColumns ("userPropCheck, subject, start") 'ERROR: The property "userPropCheck" is unknown error
    
    'Jet Restrict Fails
    Set objc = dCalItems.Restrict("[userPropCheck] = " & Chr(34) & "testing" & Chr(34))
    Debug.Print objc(1).ItemProperties.item("userPropCheck").Value 'ERROR: object variable or with block variable not set error
    
    'Jet Find Fails
    Set objc = dCalItems.Find("[userPropCheck] = " & Chr(34) & "testing" & Chr(34))
    Debug.Print objc(1).ItemProperties.item("userPropCheck").Value 'ERROR: object variable or with block variable not set error
    
    'DSAL Restrict Fails
    sFilter = "@SQL=" & Chr(34) & "http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/userPropCheck" & Chr(34) & "= 'testing'" ''"@SQL=" & Chr$(34) & "http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/userPropCheck" & Chr(34) & " = 'testing'"
    Set objc = dCalItems.Restrict(sFilter)
    Debug.Print objc(1).ItemProperties.item("userPropCheck").Value 'ERROR: object variable or with block variable not set error
    
    'DSAL Find Fails
    sFilter = "@SQL=" & Chr(34) & "http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/userPropCheck" & Chr(34) & "= 'testing'" ''"@SQL=" & Chr$(34) & "http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/userPropCheck" & Chr(34) & " = 'testing'"
    Set objc = dCalItems.Find(sFilter)
    Debug.Print objc(1).ItemProperties.item("userPropCheck").Value 'ERROR: object variable or with block variable not set error
    
    'THIS WORKS to filter the actual calendar view
    Set objView = Application.ActiveExplorer.CurrentView
    objView.Filter = Chr(34) & "http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/userPropCheck" & Chr(34) & "= 'testing'"
    objView.Save
    objView.Apply
    
    End Sub
    

Как видите, я довольно потерян. Я могу добавить настраиваемое свойство к элементу, а затем ограничить что-либо, кроме этого свойства, чтобы получить элемент, а затем распечатать настраиваемое свойство, и я могу отфильтровать текущее представление по настраиваемому свойству, используя представление DSAL.Filter, но используя что в Restrict также не работает.

0 ответов

Другие вопросы по тегам