【问题标题】:How do I get the Outlook calendar that an appointment is being made to如何获取正在约会的 Outlook 日历
【发布时间】:2014-04-02 13:55:04
【问题描述】:

我在 Outlook 中创建了一个名为 Time Tracking 的个人日历以及我的正常交换日历。我为一个简单的 Outlook 插件创建了一个表单区域。我希望表单区域仅在约会进行/派生自 时间跟踪 日历时显示。下面是两个日历的屏幕截图。

我只想显示来自我的时间跟踪日历的表单区域。

我试过这段代码:

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 属性看起来都一样。

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

就像所有约会似乎都默认为 Calendar 而不是 Time Tracking 日历,即使我试图从那里创建一个直到它被保存。

有没有办法找出约会项目保存到哪个日历?

谢谢,比尔 N

【问题讨论】:

    标签: c# calendar outlook outlook-addin


    【解决方案1】:

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

    【讨论】:

    • 我确实查看了 Parent 属性:(appt.Parent as Microsoft.Office.Interop.Outlook.MAPIFolder).Name 但名称是相同的“日历”。与商店相同。我确实看到有一个 Folders 属性,计数是两个。哪个是对的。如果我创建一些屏幕截图会有帮助吗?
    • 我已经更新了问题。该约会被创建为普通的 Outlook 约会(见上面的屏幕截图)。但是,一旦我保存它,上面的代码就会工作,因为它似乎知道它来自时间跟踪日历。
    • 是的,Outlook 在默认日历文件夹中创建约会,然后在调用保存时移动它们。调用 save 是你的选择吗?
    • 不确定“调用保存选项”是什么意思?理想情况下,我只想显示来自时间跟踪日历的表单区域。我不确定是否有一些“OnSave”事件,但我认为这不会起作用,因为它无论如何都会显示表单区域。我可能不得不求助于一些只保存到时间跟踪日历的自定义表单。
    • 我的意思是如果您可以在运行表单逻辑之前调用 AppointmentItem.Save。如何在您的文件夹中创建约会?它们是从 Outlook UI 创建的吗?如果 AppointmentItem.Parent 测试失败,您是否尝试过使用 Application.ActiveExplorer.CurrentFolder 检索当前显示的文件夹?
    【解决方案2】:

    德米特里建议作品:

    var outlook = new Microsoft.Office.Interop.Outlook.Application();
    
    e.Cancel = !(outlook.Application.ActiveExplorer().CurrentFolder).Name.Equals(
                Constants.TIME_TRACKING_CALENDAR);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 2016-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多