C# 如何获取预约的Outlook日历
我在Outlook中创建了名为“时间跟踪”的个人日历以及我的常规exchange日历。我已经为一个简单的Outlook创建了一个窗体区域AddIn。我希望表单区域仅在约会进行/源自时间跟踪日历时显示。下面是两个日历的屏幕截图 我只想显示来自我的时间跟踪日历的表单区域 我尝试了以下代码:C# 如何获取预约的Outlook日历,c#,calendar,outlook,outlook-addin,C#,Calendar,Outlook,Outlook Addin,我在Outlook中创建了名为“时间跟踪”的个人日历以及我的常规exchange日历。我已经为一个简单的Outlook创建了一个窗体区域AddIn。我希望表单区域仅在约会进行/源自时间跟踪日历时显示。下面是两个日历的屏幕截图 我只想显示来自我的时间跟踪日历的表单区域 我尝试了以下代码: public partial class TimeTrackingRegionFactory { // Occurs before the form region is initialized.
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);
}
}
但是,我发现两者的日历名称都是“calendar”。我看到了这个,但是我检查了一下,StoreID和Store属性看起来都是一样的
如果我保存约会,然后重新打开它,它会说约会来自时间跟踪日历,然后根据上面的代码正确显示表单区域
这就像所有约会似乎都默认为日历,而不是时间跟踪日历,即使我试图从那里创建一个日历,直到它被保存
有没有办法确定约会项目保存到哪个日历
谢谢,Bill N查看appt.Parent属性-它将返回父MAPIFolder对象。Dmitry建议有效:
var outlook = new Microsoft.Office.Interop.Outlook.Application();
e.Cancel = !(outlook.Application.ActiveExplorer().CurrentFolder).Name.Equals(
Constants.TIME_TRACKING_CALENDAR);
我确实查看了父属性:(appt.Parent为Microsoft.Office.Interop.Outlook.MAPIFolder)。名称,但名称与“日历”相同。商店也一样。我确实看到有一个文件夹属性,计数是2。这是正确的。如果我创建一些截图会有帮助吗?我已经更新了问题。正在将约会创建为普通outlook约会(请参见上面的屏幕截图)。但是,一旦我保存了它,上面的代码就会起作用,因为它似乎知道它来自时间跟踪日历。是的,Outlook在默认日历文件夹中创建约会,然后在调用“保存”时移动它们。调用save是您的一个选项吗?不确定您所说的“调用save是一个选项”是什么意思?理想情况下,我只想显示来自时间跟踪日历的表单区域。我不确定是否有一些“OnSave”事件,但我认为这不会起作用,因为它将显示表单区域。我可能不得不求助于一些只保存到时间跟踪日历的自定义表单。我的意思是,如果您可以调用AppointmentItem.Save,然后再运行表单逻辑。如何在文件夹中创建约会?它们是从Outlook UI创建的吗?如果AppointItem.Parent测试失败,是否尝试使用Application.ActiveExplorer.CurrentFolder检索当前显示的文件夹?