繁体   English   中英

Outlook 2013 VSTO外接程序的CommandBarControl的替代方法

[英]Alternative to CommandBarControl for Outlook 2013 VSTO add-in

我有一个小型的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中运行,但是第二个代码块有一些细微但重要的区别...

  1. 创建的会议请求将不会继承用户先前在其日历中单击的日期和时间,而是默认为当前日期/时间,无论用户在其日历中单击了什么日期/时间。
  2. 创建的会议请求将不考虑用户正在“代表”另一个用户创建会议请求的情况,因为它会忽略用户发起新的会议请求之前已单击哪个日历。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM