0

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

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

我目前遇到的问题是,以前,此消息窗口是使用 CommandBarControl 对象创建的,以编程方式触发单击 Outlook 中的“新会议”按钮。这在 Outlook 的早期版本中有效,但我收集到 CommandBarControl 对象已从 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 中查找“新会议”按钮,然后在该按钮上执行单击操作 Execute()。

另一种可能是这样的:

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. 创建的会议请求不会考虑用户“代表”另一个用户创建会议请求的情况,因为它忽略了在用户发起新的会议请求之前单击了哪个日历。

所以我的问题是:现在如何以编程方式(使用 VSTO 加载项)在 Outlook 2013 中创建一个新的会议请求,以尊重用户事先点击的日历?也就是说,它会满足之前使用CommandBarControl对象设法满足的上述两个要求吗?

4

1 回答 1

0

没错,Office 2010 中已弃用命令栏。现在改用 Fluent UI。您可以在以下系列文章中阅读有关新 UI 的更多信息:

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

于 2014-12-11T13:09:14.530 回答