如何获取正在进行约会的Outlook日历

时间:2014-04-02 13:55:04

标签: c# calendar outlook outlook-addin

我在Outlook中创建了一个名为时间跟踪的个人日历以及我的正常交换日历。我为一个简单的Outlook AddIn创建了一个表单区域。我希望表单区域仅在约会来自时间跟踪日历时显示。以下是两个日历的屏幕截图。

enter image description here

我希望仅在来自我的时间跟踪日历时显示表单区域。

我试过这段代码:

public partial class TimeTrackingRegionFactory
{
    // Occurs before the form region is initialized.
    // To prevent the form region from appearing, set e.Cancel to true.
    // Use e.OutlookItem to get a reference to the current Outlook item.
    private void TimeTrackingRegionFactory_FormRegionInitializing(object sender, Microsoft.Office.Tools.Outlook.FormRegionInitializingEventArgs e)
    {
        var appt = e.OutlookItem as AppointmentItem;
        if (appt != null)
            e.Cancel =
                !(appt.Parent as Microsoft.Office.Interop.Outlook.MAPIFolder).Name.Equals(
                    Constants.TIME_TRACKING_CALENDAR);
    }
}

但是,我发现两者的日历名称都是“日历”。我看到了这个question,但我检查了StoreID和Store属性看起来都一样。

如果我保存约会然后重新打开,它会说明约会来自时间跟踪日历,然后从上面的代码中正确显示表单区域。

就像所有约会似乎默认为日历而不是时间跟踪日历,即使我正在尝试从那里创建一个直到它被保存。

有没有办法找出保存约会项目的日历?

谢谢,Bill N

2 个答案:

答案 0 :(得分:0)

查看appt.Parent属性 - 它将返回父MAPIFolder对象。

答案 1 :(得分:0)

Dmitry Suggestion Works:

var outlook = new Microsoft.Office.Interop.Outlook.Application();

e.Cancel = !(outlook.Application.ActiveExplorer().CurrentFolder).Name.Equals(
            Constants.TIME_TRACKING_CALENDAR);