Exchange EWS API - 从约会中获取CalendarEvent

时间:2016-12-12 15:31:13

标签: c# exchangewebservices

目前我已经使用了一些代码来检索邮箱地址的日历(特别是Room联系人的邮箱)一整天:

        var attendees = new List<AttendeeInfo> {
            new AttendeeInfo {
                SmtpAddress = emailAddress,
                AttendeeType = MeetingAttendeeType.Room
            }
        };

        var start = currentDate.Date.ToUniversalTime();
        var results = this._Service.GetUserAvailability(attendees, new TimeWindow(start, start.AddHours(24)), AvailabilityData.FreeBusy);

        var availability = results.AttendeesAvailability[0].CalendarEvents;
        // Do some manipulation across the events…

这一切都运转正常,我现在需要能够使用以下内容将会议添加到邮箱中:

        var meeting = new Appointment(this._Service) {
            Subject = subject,
            Start = startDate,
            End = endDate
        };

        if (null != roomToUse) {
            meeting.Location = roomToUse.Name;
            meeting.Resources.Add(roomToUse.EmailAddress);
        }

        var organiser = meeting.RequiredAttendees.Add(this._User);
        // Save the meeting to the Calendar folder and send the meeting request.
        meeting.Save(
            new FolderId(WellKnownFolderName.Calendar, organiser.Address),
            SendInvitationsMode.SendOnlyToAll
        );

哪个也行得正常,但我现在需要做的是获取新约会的CalendarEvent,在同一个结构中返回相同的信息(因为CalendarEvent做了类似的事情将主题转换为[Organiser First Name] [Organiser Last Name] [Subject],我们会在内部处理该名称和主题。

我可以复制那一点逻辑,但似乎有点不可靠,理想情况下我只是想重新使用同一个类。

所以我的下一个想法是重新获取邮箱的可用性,然后循环找到正确的CalendarEvent,但是我无法找到正确识别哪个{{1}的可靠方法和我刚刚制作的一样。我可以从开始和结束日期/时间开始,检查主题,但这看起来有点脆弱。

新会议确实保存了针对它的ID,每个CalendarEvent上的CalendarEventDetails也是如此(但在将新ID CalendarEvent转换为IdFormat.EwsId后)两者不匹配,所以我认为这不是正确的方法。

有没有更好的方法来实现这一目标?要么从IdFormat.HexEntryId切换到返回GetUserAvailability s的东西,然而(自从我编写那段代码以来已经有一段时间了)我记得要获得所有约会并不那么简单给定的一天(但非常乐意以其他方式展示)。

1 个答案:

答案 0 :(得分:0)

  
    

新会议确实有一个Id保存,每个CalendarEvent上的CalendarEventDetails也是如此(但是在将新ID IdFormat.EwsId转换为IdFormat.HexEntryId之后)两者不匹配,所以我假设这不是正确的方法。

  

CalendarEventDetails中返回的EntryId是您查询过的邮箱中当前约会的ID。当你说不匹配时它没有意义(例如,如果你的Id存储可能已过期或指向不同的对象或邮箱,例如你从中获取的ID,它会从目标邮箱返回当前数据会议室邮箱与您需要使用会议GOID并在该实例中搜索的管理员邮箱中创建的约会不匹配。

  
    

有没有更好的方法来实现这一目标?无论是通过从GetUserAvailability切换到返回约会的东西,然而(自从我写了一些代码以来它已经有一段时间了)我记得在给定的一天获得所有约会并不那么简单(但是很高兴能够另有说明。)

  

无论您使用哪种操作查询完全相同的数据(例如,使用FindItems直接查询日历),您再次使用这一点对我来说没有逻辑意义。

  
    

哪个也工作正常,但我现在需要做的是获取新约会的CalendarEvent,以在同一结构中返回相同的信息(因为CalendarEvent做了一些事情,比如将主题转换为[Organizer First Name] ] [主办单位姓名] [主题],我们正在内部处理该名称和主题。

  

这不是EWS,这是会议室邮箱的一项功能,出于安全原因,它将使用管理器名称替换约会的主题。可以使用Set-CalendarProcessing -AddOrganizerToSubject https://technet.microsoft.com/en-us/library/dd335046(v=exchg.160).aspx

在会议邮箱上禁用此功能