替代CommandBarControl for Outlook 2013 VSTO加载项

时间:2014-12-11 01:04:29

标签: c# calendar outlook vsto outlook-2013

我有一个小的VSTO加载项,我已经在Outlook 2010中使用了一段时间。很快就会迁移到Office 2013 / Outlook 2013,因此需要重新编写加载项以与Outlook 2013一起使用。

Outlook加载项由自定义功能区按钮触发。触发后,加载项将创建一个新的会议请求窗口,并使用一些自定义内容填充邮件正文。之后,用户可以完成会议请求并在需要时发送。

我目前遇到的问题是,此消息窗口是使用CommandBarControl对象创建的,以编程方式触发"新会议" Outlook中的按钮。这适用于以前版本的Outlook,but I gather that the CommandBarControl object has been removed from Outlook 2013,现在无声地失败。这确实是我所看到的。

用于创建新会议请求的原始代码如下:

Explorer activeExplorer = Globals.ThisAddIn.Application.ActiveExplorer();

CommandBarControl commandBarControl = activeExplorer.CommandBars.FindControl(Type.Missing, 1106);
commandBarControl.Execute();

appointmentItem = (AppointmentItem)Globals.ThisAddIn.Application.ActiveInspector().CurrentItem;
appointmentItem.MeetingStatus = OlMeetingStatus.olMeeting;
appointmentItem.RTFBody = message; // message is a byte array being passed in from elsewhere.

FindControl()方法用于查找"新会议"在Outlook中按钮,然后执行()对该按钮执行单击操作。

替代方案可能是这样的:

appointmentItem = (AppointmentItem)Globals.ThisAddIn.Application.CreateItem(OlItemType.olAppointmentItem);
appointmentItem.MeetingStatus = OlMeetingStatus.olMeeting;
appointmentItem.RTFBody = message; // message is a byte array being passed in from elsewhere.
appointmentItem.Display(false);

第二个代码块也将创建一个新的会议请求窗口并在Outlook 2013中运行,但是与第二个代码块存在一些微妙但重要的差异......

  1. 创建的会议请求不会继承用户之前在其日历中单击的日期和时间,而是默认为当前日期/时间,无论用户在其日历中单击的日期/时间如何。
  2. 创建的会议请求不会尊重用户代表"创建会议请求的情况。另一个用户,因为它忽略了在用户发起新会议请求之前点击了哪个日历。
  3. 所以我的问题是:现在如何以编程方式在Outlook 2013中创建(使用VSTO加载项)新的会议请求,该请求将尊重用户之前点击的日历?也就是说,它将满足以前使用CommandBarControl对象设置满足?

    的上述两个要求

1 个答案:

答案 0 :(得分:0)

您是对的,Office 2010中不推荐使用命令栏。现在使用Fluent UI。您可以在以下系列文章中阅读有关新UI的更多信息:

您可以使用 CommandBars.ExecuteMso 方法以编程方式运行所需的功能区按钮(请参阅Explorer和Inspector类的CommandBars属性)。您只需要传递您需要运行的内置控件的idMso值。以下链接提供了Office 2010和2013的内置控件列表: