【问题标题】:Outlook 2013 AddIn - Appointment Open Event Handler - No Access to PropertiesOutlook 2013 加载项-约会打开事件处理程序-无法访问属性
【发布时间】:2018-11-07 23:59:02
【问题描述】:

我正在尝试创建 Outlook 2013 插件,但在访问 AppointmentItem 的属性时遇到了一些问题。之后你会找到一个缩短的示例代码:

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        this.Application.ItemLoad += new Outlook.ApplicationEvents_11_ItemLoadEventHandler(Application_ItemLoad);
    }

    void Application_ItemLoad(object Item)
    {
        if (Item is Outlook.AppointmentItem)
        {
            try
            {
                    appointmentItem = Item as Outlook.AppointmentItem;

                    string sub = appointmentItem.Subject; // <--------
    ...

问题在于,我无法访问 appintment 的属性,因为内存中的数据尚不可用:

MSDN: ApplicationEvents_11_Event.ItemLoad event: 此事件在 Outlook 项目开始加载到内存时发生。除了 Outlook 项目的 Class 和 MessageClass 属性的值之外,该项目的数据尚不可用,因此在调用 Item 中返回的 Outlook 项目的 Class 或 MessageClass 以外的任何属性时会发生错误。同样,如果您尝试从 Outlook 项目调用任何方法,或者如果您在 Item 中返回的 Outlook 项目上调用 Application 对象的 GetObjectReference 方法,则会发生错误。

我的插件背后的目的是,在功能区栏中显示一个下拉框,其中显示的项目取决于约会的主题(和一些其他属性)的值。 那么有没有办法在事件处理程序期间访问约会的属性?或者是否有任何其他事件处理程序可以在 Appointment 加载时更改 DropDownBox?

谢谢和问候 安迪

【问题讨论】:

  • 只是一个疯狂的猜测:尝试挂钩 AppointmentItem.ReadComplete 事件 msdn.microsoft.com/en-us/library/office/jj229473.aspx 并且属性应该在那里
  • 我试过了,你的想法,但我如何获得当前的约会? The statement this.Application.ActiveInspector().CurrentItem as Outlook.AppointmentItem; 不起作用。
  • 如果您更改示例并为您的appointmentItem = Item as Outlook.AppointmentItem; 注册ReadComplete 事件,它不起作用

标签: c# outlook outlook-addin


【解决方案1】:

遇到类似问题,我发现在注册AppointmentItem.ReadComplete 处理程序时仍然无法访问属性。

不过,AppointmentItem.Read 处理程序确实取得了一些成功。在处理程序的方法中,我能够访问属性。

我的代码如下:

private Outlook.AppointmentItem _item;

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
   this.Application.ItemLoad += 
      new Outlook.ApplicationEvents_11_ItemLoadEventHandler(Application_ItemLoad);
}

private void Application_ItemLoad(object item)
{
   if (item is Outlook.AppointmentItem)
   {
      this._item = item as Outlook.AppointmentItem;
      this._item.Read += _item_Read;
    }
}

private void _item_read()
{
   // Example access of Recipients property
   var recipients = this._item.Recipients;
}

【讨论】:

    猜你喜欢
    • 2021-10-24
    • 2021-10-26
    • 2013-06-24
    • 2012-04-06
    • 2015-05-09
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多