2

我们有一个 Outlook 加载项。我们需要在 TaskItem Inspector 窗口中以编程方式取消任务分配,就像取消分配按钮一样。

有人会认为调用TaskItem.CancelResponseState()可能会起作用。尽管它确实取消了分配,但它也使任务处于不可分配状态。功能区上的分配任务按钮被禁用。

在 Outlook 2007 和 2010 中,我们可以获取CommandBarButton“取消分配”按钮的对象并调用其Execute()方法。这给了我们想要的行为。但是,在 Outlook 2013 中,此命令栏按钮不再存在。这并不奇怪,因为 Inspector 命令栏在 2007 年被 Ribbon 取代。不过,为了向后兼容,CommandBarButton 对象仍然以编程方式存在。在 Outlook 2013 中,微软终于删除了这个对象。

所以问题是:有没有办法以编程方式“点击”功能区按钮?如果没有,是否有另一种方法可以像功能区按钮那样取消任务分配?

4

1 回答 1

4

您可以尝试使用Redemption及其SafeRibbon对象:

'simulate a click on the "Assign Task" button of an active Inspector
set sInspector = CreateObject("Redemption.SafeInspector")
sInspector.Item = Application.ActiveInspector
set Ribbon = sInspector.Ribbon
oldActiveTab = Ribbon.ActiveTab
Ribbon.ActiveTab = "Task"
set Control = Ribbon.Controls("Assign Task")
Control.Execute
Ribbon.ActiveTab = oldActiveTab 'restore the active tab

编辑。在 C# 中,它将类似于以下内容(假设您将 Redemption 添加到项目引用中):

//simulate a click on the "Assign Task" button of an active Inspector
Redemption.SafeInspector sInspector = new Redemption.SafeInspector();
sInspector.Item = Application.ActiveInspector;
Redemption.SafeRibbon Ribbon = sInspector.Ribbon;
string oldActiveTab = Ribbon.ActiveTab;
Ribbon.ActiveTab = "Task";
Redemption.SafeRibbonControl Control = Ribbon.Controls.Item("Assign Task");
Control.Execute();
Ribbon.ActiveTab = oldActiveTab; //restore the active tab
于 2014-03-20T23:19:58.050 回答