我正在尝试获取默认日历中所有会议的开始日期。根据文档(链接)
我可以使用 GetOccurence 的索引或日期。
当我尝试将索引与下面的代码一起使用时,给我第一次会议出现两次和中间一次出现但不是最后一次出现。例如,如果我创建一个名为“兑换测试”的定期会议。该会议每天重复一次,持续 3 天,无例外(自 2023 年 11 月 27 日起至 2023 年 11 月 29 日期间每天晚上 8:00 至晚上 8:25 举行)。 我还更新了 Outlook 中每个事件的正文,以便我确定我的开始日期与该事件匹配以进行进一步验证。
第一次通过 for 循环 Debug.WriteLine(apt.Body);输出“11/27”(因为我手动将其添加到正文中)。调试.WriteLine(apt.Start);输出“11/27/2023 8:00:00 PM” 。在第二遍中,我得到了相同的结果,这是出乎意料的。第三遍 Debug.WriteLine(apt.Body);输出“11/28”和 Debug.WriteLine(apt.Start);输出“11/28/2023 8:00:00 PM”。但我从未在 11/29/2023 8:00:00 PM 出现第三次。
private void Button_Click(object sender, RoutedEventArgs e)
{
RDOSession session = new RDOSession();
session.Logon(System.Reflection.Missing.Value, System.Reflection.Missing.Value, false, true, System.Reflection.Missing.Value, false);
RDOFolder calendar = session.GetDefaultFolder(rdoDefaultFolders.olFolderCalendar);
foreach (RDOAppointmentItem item in calendar.Items)
{
if (item.Subject != null)
{
if (item.Subject.Contains("Redemption Test"))
{
Redemption.RDORecurrencePattern pattern = item.GetRecurrencePattern();
for (int i = 0; i < pattern.Occurrences; i++)
{
RDOAppointmentItem apt = (RDOAppointmentItem)pattern.GetOccurence(i);
Debug.WriteLine(apt.Body);
Debug.WriteLine(apt.Start);
}
如果我按日期使用 GetOccurence,例如:
string dt1str = "11/27/2023 8:00 PM";
var date1 = DateTime.Parse(dt1str);
string dt2str = "11/28/2023 8:00 PM";
var date2 = DateTime.Parse(dt2str);
string dt3str = "11/29/2023 8:00 PM";
var date3 = DateTime.Parse(dt3str);
RDOAppointmentItem apt1 = (RDOAppointmentItem)pattern.GetOccurence(date1);
Debug.WriteLine(apt1.Body);
Debug.WriteLine(apt1.Start);
RDOAppointmentItem apt2 = (RDOAppointmentItem)pattern.GetOccurence(date2);
Debug.WriteLine(apt2.Body);
Debug.WriteLine(apt2.Start);
RDOAppointmentItem apt3 = (RDOAppointmentItem)pattern.GetOccurence(date3);
Debug.WriteLine(apt3.Body);
Debug.WriteLine(apt3.Start);
}
}
这工作正常,我得到了预期的身体和开始日期。
我更喜欢使用索引,因为这样比查看每个 RecurrencePattern 更容易 并计算日期以获得每次出现的开始日期。
对 for 循环的第一个片段可能有什么问题有什么想法吗?
我尝试将 int i = 0 设置为 int i = 1,但这只是跳过了 11/27 的第一次出现。我使用的是最新版本的 Redemption 6.4.0.6234。
所有 Redemption 集合,就像 Outlook 对象模型中的集合一样,都是基于 1,而不是 0,因此循环应该是
for (int i = 1; i <= pattern.Occurrences; i++)