如何在outlook中识别特定的约会项目

时间:2014-04-30 05:47:59

标签: c# .net outlook office-interop

我们面临的问题是,我们需要在Outlook中确定特定的约会,即使这是一个经常性的约会。但由于GlobalAppointmentID对于整个系列而言是唯一的,我们不知道如何。

据我所知,当一个约会是一个重复约会时,没有特定的唯一ID。所以我们认为我们通过将Ticks中的Start-Time添加到GlobalAppointmentID来生成我们自己的ID,但是我们需要/想要在约会对象中保存这个新ID(因为StartTime可能会改变)。

我的问题:是否有办法识别特定的约会,如果没有,我如何在特定的约会中保存价值,这对每个收件人始终是可访问的和最新的?

//编辑:更具体一点:我们有一个outlook插件,允许将文件上传到我们的服务器,必须将其映射到特定约会(以及所有收件人)。对于正常的单次会议,我们只是GlobalAppointmentID。如果是定期约会,则仍需要将其映射到一个特定的"会议"。大多数时候,这次会议/任命不包含任何时间或任何例外情况。所以我需要在C#中获得这个特定的ID。

2 个答案:

答案 0 :(得分:2)

请记住,定期约会的实例并不存在(考虑没有结束日期的约会)。如果您有一个例外(作为主约会上的附件存储),它有2个ID - 主约会ID和实例ID,它是从主ID导出并嵌入例外日期。

查看OutlookSpy的约会(点击IMessage按钮)并查看http://msdn.microsoft.com/en-us/library/ee157690(v=exchg.80).aspx的约会ID格式。

答案 1 :(得分:0)

这是旧的,但它仍然显示在搜索中,因此,在我们公司中,我刚刚尝试过这个问题。

正如德米特里(Dmitry)所写,重复约会的出现不存在,除非并且直到用户将其更改后变为例外,这些约会才成为例外。这也意味着他们没有独立的ID。

但是,如果未更改,则每个异常都有其发生的原始日期。对于每个非异常事件,该日期只是该事件的开始日期。

表示形式

您可以结合使用全局约会ID和原始日期来获得一个ID,该ID即使发生了约会也可以唯一地标识该约会:

device a

在这里,我使用NodaTime中的LocalDate表示没有时间成分的原始日期。

访问

可以轻松访问全局约会ID。如上所述,发生的原始日期也不例外,它只是约会开始的日期部分。

当您仅拥有 public struct AppointmentId : IEquatable<AppointmentId> { private readonly string GlobalAppointmentId; private readonly LocalDate? OriginalDate; public AppointmentId(string globalAppointmentId) { this.GlobalAppointmentId = globalAppointmentId; this.OriginalDate = null; } public AppointmentId(string globalAppointmentId, LocalDate originalDate) { this.GlobalAppointmentId = globalAppointmentId; this.OriginalDate = originalDate; } public bool Equals(AppointmentId other) { return this.GlobalAppointmentId.Equals(other.GlobalAppointmentId, StringComparison.Ordinal) && this.OriginalDate == other.OriginalDate; } public override bool Equals(object obj) => obj is AppointmentId other && this.Equals(other); public override int GetHashCode() { unchecked { int hash = 62207; hash += 3 * this.GlobalAppointmentId.GetHashCode(); hash += (5 * this.OriginalDate?.GetHashCode() ?? 0); return hash; } } public override string ToString() { if (this.GlobalAppointmentId == null) return "<None>"; if (this.OriginalDate == null) { return $"{this.GlobalAppointmentId}"; } return $"{OriginalDate.Value)} / {GlobalAppointmentId}"; } public static bool operator ==(AppointmentId x, AppointmentId y) => x.Equals(y); public static bool operator !=(AppointmentId x, AppointmentId y) => !(x == y); } 中的AppointmentItem对象而不是Exception对象时,异常会更加麻烦,因为原始日期无法直接获得。但是您可以通过RecurrencePattern来获取它:

PropertyAccessor