尝试使用 Redemption RDORecurrencePattern 通过 RDOAppointmentItem 项的索引获取 GetOccurence

问题描述 投票:0回答:1

我正在尝试获取默认日历中所有会议的开始日期。根据文档(链接)

我可以使用 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。

outlook-redemption
1个回答
0
投票

所有 Redemption 集合,就像 Outlook 对象模型中的集合一样,都是基于 1,而不是 0,因此循环应该是

for (int i = 1; i <= pattern.Occurrences; i++) 
© www.soinside.com 2019 - 2024. All rights reserved.