Перемещение элементов из личного календаря в командный календарь, где приглашение принимается и принимается автоматически? - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь автоматически добавить собрания Zoom, которые мы получаем от Salesforce, в календарь нашей команды.

Благодаря https://www.slipstick.com/developer/copy-new-appointments-to-another-calendar-using-vba/ мне удалось подойти очень близко. Сценарий работает, если я создаю встречу в качестве теста, но не тогда, когда встреча отправляется мне, и я принимаю приглашение. (Мои настройки Outlook настроены на автоматический прием всех приглашений.)

При отладке выделяются .Start = Item.Start в curCal_ItemAdd:

Dim WithEvents curCal As Items
Dim newCalFolder As Outlook.Folder

Private Sub Application_Startup()
    Dim NS As Outlook.NameSpace
    Set NS = Application.GetNamespace("MAPI")
    ' calendar to watch for new items
    Set curCal = NS.GetDefaultFolder(olFolderCalendar).Items
    ' calendar moving copy to
    Set objOwner = NS.CreateRecipient("Team Calendar")
    objOwner.Resolve

     If objOwner.Resolved Then
        'MsgBox objOwner.Name
        Set newCalFolder = NS.GetSharedDefaultFolder(objOwner, olFolderCalendar)
    End If
    Set NS = Nothing
End Sub

Private Sub curCal_ItemAdd(ByVal Item As Object)
Dim cAppt As AppointmentItem
Dim moveCal As AppointmentItem

' On Error Resume Next

' copy only Zoom Meetings
' remove to make a copy of all items
If Item.Subject Like "Zoom Meeting Invitation*" Then
    Set cAppt = Application.CreateItem(olAppointmentItem)

    With cAppt
        .Subject = Mid(Item.Subject, 28)

        .Start = Item.Start    ' ** highlighted text 

        .Duration = Item.Duration
        .Location = Item.Location
        .Body = Item.Body
    End With

' set the category after it's moved to force EAS to sync changes
Set moveCal = cAppt.Move(newCalFolder)
moveCal.Categories = "Webex"
moveCal.Save

End If
End Sub

Public Function GetDATETIME() As String
    GetDATETIME = Format(DateTime.Now, "yyyy-MM-dd hh:mm:ss")
End Function

Function GetFolderPath(ByVal FolderPath As String) As Outlook.Folder
    Dim oFolder As Outlook.Folder
    Dim FoldersArray As Variant
    Dim i As Integer

    On Error GoTo GetFolderPath_Error
    If Left(FolderPath, 2) = "\\" Then
        FolderPath = Right(FolderPath, Len(FolderPath) - 2)
    End If
    'Convert folderpath to array
    FoldersArray = Split(FolderPath, "\")
    Set oFolder = Application.Session.Folders.Item(FoldersArray(0))
    If Not oFolder Is Nothing Then
        For i = 1 To UBound(FoldersArray, 1)
            Dim SubFolders As Outlook.Folders
            Set SubFolders = oFolder.Folders
            Set oFolder = SubFolders.Item(FoldersArray(i))
            If oFolder Is Nothing Then
                Set GetFolderPath = Nothing
            End If
        Next
    End If
    'Return the oFolder
    Set GetFolderPath = oFolder
    Exit Function

GetFolderPath_Error:
    Set GetFolderPath = Nothing
    Exit Function
End Function

После нажатия кнопки сброса в VBA В редакторе, если я открою приглашение и снова нажму «принять приглашение», оно будет работать так, как должно. При первом запуске оно не определяет время начала приглашения.

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

1 Ответ

0 голосов
/ 01 февраля 2020

Разрешение: изменил код здесь

If Item.Subject like "Zoom Invitation Meeting*" and Item.BusyStatus = olBusy Then

Это решило проблему, пытаясь добавить встречу в новый календарь после того, как встреча была принята.

Я заметил, когда выключил Auto-accept, что он породил 2 встречи, одну до того, как я принял приглашение, и одну после. Не позволяя копировать встречи до тех пор, пока они не будут приняты, я решил свою проблему. Думаю, мне не следовало удалять этот фрагмент кода из начальной статьи. Упс.

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