2015-06-12 33 views
0

我正在使用加载项,并且作为我工作的一部分,我需要能够接受会议请求。我需要能够在收件箱中选中MeetingItem时从邮件选项卡执行此操作,并且在选择AppointmentItem时从日历选项卡中执行此操作。展望2013年VSTO:如何获得原创MeetingItem预约?

对于给定的MeetingItem,我可以使用内置的.GetAssociatedAppointment()来获取相应的约会。然后很容易对meetingItem上的.Respond()和meetingItem上的.Send()做一个。

但是,当我处于日历视图并且只有选定的AppointmentItem时,是否有向后工作的有效方式?我需要能够在收件箱中找到原始的MeetingItem,如果它仍然在那里(用户可能已经删除它并且约会项目在日历中仍然可见)。 我相信我可以迭代收件箱中的所有项目和每个MeetingItem,获取关联的约会项目,并查看它的GlobalAppointmentID是否等于日历中选定的约会项目的GlobalAppointmentID - 如果是,那就是原始MeetingItem 。

有没有更好的方法来做到这一点?我知道收件箱项目集合中的.Filter()和.Find(),但看到我需要先获取关联的约会项目才能查看会议项目是否与我的约会项目相对应日历,我不认为我可以做到这一点与过滤器(传递给.Filter()或.Find())。

它似乎会有一个相对简单的方法来获取给定的约会项目的原始meetingItem。

任何帮助?

回答

1

通过预约ID搜索是唯一的方法。没有其他办法,因为预约与“收件箱”和“已发送邮件”文件夹中的(可能)多个会议项目之间没有一对一的对应关系。

还请记住,Outlook对象模型不会让您搜索二进制(PT_BINARY)属性,如GlobalAppointmentID或CleanGlobalObjectId。您需要使用Extended MAPI(C++或Delphi)或Redemption(任何语言)。

+0

好吧,这是有道理的。但在日历视图中,如果选择了预约,如何以编程方式接受/拒绝该请求?我只需要在该AppointmentItem上做一个.Respond(),而不用担心试图找到原始的MeetingItem?我不需要在原始的MeetingItem上做一个.Send()? – user3487286

+1

你不必担心这一点。响应将在您回复时创建一个全新的项目。 –

+0

好吧,对。但我的意思是,我想将原始会议项目移到“已删除邮件”文件夹,就像在Outlook中使用内置接受/拒绝一样。但是,如果我不能以某种方式获得原始的MeetingItem,我无法对其执行.Move()。我不认为做一个.Move()的约会项目会导致原始的MeetingItem发生任何事,对吗?似乎在那里我没有干净的方式来处理尝试移动原始meetingItem,如果你在日历视图? – user3487286