Ограничение на настраиваемое свойство не работает в элементах календаря Outlook - PullRequest
0 голосов
/ 16 февраля 2019

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

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

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

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

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

Я знаю, что яне может использовать 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 также не работает.

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