2016-12-12 44 views
0

目前我已经我们使用检索了整整一天邮箱地址日历(专门为室联系邮箱)一些代码:交易所EWS API - 从预约获取CalendarEvent

 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,但我看不到可靠的方法来正确识别CalendarEvent是一样的一个我刚做出来的。我可以开始和结束日期/时间,检查主题,但看起来有点脆弱。

新的会议确实有一个ID保存的反对,也是如此每个CalendarEventCalendarEventDetails,但是这两个不匹配(转换新的ID IdFormat.EwsIdIdFormat.HexEntryId之后),所以我假定这不是正确的方式去做。

有没有更好的方法来实现这一目标?要么从GetUserAvailability切换到返回Appointment s的东西,然而(自从我写了那么一小段代码以来已经有一段时间了),我记得在给定的一天中获得所有约会并不那么简单(但是更愿意否则会被显示)。

回答

0

新的会议确实有保存反对的标识,也是如此但是每个CalendarEvent的CalendarEventDetails,两者不匹配(转换新的ID IdFormat.EwsId到IdFormat.HexEntryId后)所以我认为这不是正确的方法。

的ENTRYID是在CalendarEventDetails返回是你查询的邮箱当前预约的ID。当你说不匹配时,它是没有意义的(例如,如果你有一个可能已过时的ID或指向不同的对象或邮箱,例如它从目标邮箱返回当前数据,例如你从会议室邮箱将与在Organizer邮箱中创建的约会不匹配,您需要使用会议GOID并在该实例中进行搜索)。

有没有更好的方法来实现这个目标?无论是通过从GetUserAvailability切换到返回Appointments的东西,但是(自从我写了那么一小段代码以来已经有一段时间了),我记得在给定的一天中获得所有约会并不那么简单(但是更乐意成为否则显示)。

你的查询完全相同的在运行数据,无论(例如,使用FindItems查询日历直接地)使用,从而再次这样做没有逻辑意义的我。

其中也工作得很好,但是我现在需要做的就是让CalendarEvent新任命,在相同的结构相同的信息位返回(因为CalendarEvent确实喜欢打开问题的一些事情到

是什么并不EWS这个[主办名字] [主办姓氏] [主题],这是我们在网络内部处理打破回到外面的名字和主题。是会议的一个特点房间邮箱将用secu的组织者名称替换约会的主题实际的原因。这可以在会议邮箱上使用Set-CalendarProcessing禁用 - AddOrganizerToSubject https://technet.microsoft.com/en-us/library/dd335046(v=exchg.160).aspx