Outlook 2013 VSTO 加载项的命令栏控件的替代方法
本文关键字:控件 方法 命令 2013 VSTO 加载项 Outlook | 更新日期: 2023-09-27 18:33:57
我有一个小型的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 中查找"新建会议"按钮,然后在该按钮上执行 (( 单击操作。
另一种选择可能是这样的:
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 中工作,但是与第二个代码块有一些细微但重要的区别...
- 创建的会议请求不会继承用户之前在其日历中单击的日期和时间,而是默认为当前日期/时间,而不管用户在其日历中单击了哪个日期/时间。 创建的会议请求
- 将不考虑用户"代表"其他用户创建会议请求的情况,因为它会忽略在用户发起新会议请求之前单击的日历。
所以我的问题是:现在如何以编程方式(使用 VSTO 加载项(在 Outlook 2013 中创建一个新的会议请求,该请求将尊重用户事先单击的日历?也就是说,它将满足以前使用 CommandBarControl 对象设法满足的上述两个要求?
你是对的,命令栏在 Office 2010 中已弃用。现在改用 Fluent UI。可以在以下系列文章中阅读有关新 UI 的详细信息:
- 为开发人员自定义 2007 Office Fluent 功能区(第 1 部分,共 3 部分(
- 为开发人员自定义 2007 Office Fluent 功能区(第 2 部分,共 3 部分(
- 为开发人员自定义 2007 Office Fluent 功能区(第 3 部分,共 3 部分(
可以使用 CommandBars.ExecuteMso 方法以编程方式运行所需的功能区按钮(请参阅资源管理器和检查器类的命令栏属性(。只需传递需要运行的内置控件的 idMso 值。以下链接提供了 Office 2010 和 2013 的内置控件列表:
- Office
- 2010 帮助文件:Office Fluent 用户界面控件标识符 Office
- 2013 帮助文件:Office Fluent 用户界面控件标识符