VSTO Outlook插件:参会人接受/拒绝会议按钮默认动作失效
Outlook 365 2202版本VSTO插件拦截会议接受/拒绝按钮后默认动作失效的解决办法
问题描述
开发Outlook VSTO插件时,通过Ribbon XML配置拦截参会人接受/拒绝会议的按钮点击事件,执行自定义逻辑后默认的接受/拒绝动作未触发;即使移除所有自定义代码,问题仍存在——会议窗口保持打开,且确认处理程序已执行。使用Office 365 2202版本,尝试过旧论坛方案(添加ref bool cancel参数并设为false)但无效。
当前配置与代码
Ribbon XML命令配置
<commands> <command idMso="AcceptInvitationNoResponse" onAction="HandleAcceptMeetingResponse"/> <command idMso="DeclineInvitationNoResponse" onAction="HandleDeclineMeetingResponse"/> </commands>
处理代码
public void HandleAcceptMeetingResponse(Office.IRibbonControl control, ref bool cancel) { cancel = false; // 默认获取到的cancel值为true }
问题原因与解决办法
Office 365 2202版本行为变更
该版本对Ribbon命令拦截的默认处理逻辑做了调整,仅设置cancel=false无法触发原生动作,需要手动调用原生命令执行逻辑。手动触发原生命令
在处理方法中调用Outlook的ExecuteMso方法执行原生接受/拒绝命令,同时保持cancel=false:public void HandleAcceptMeetingResponse(Office.IRibbonControl control, ref bool cancel) { // 此处添加你的自定义逻辑(如果需要) // 手动执行原生接受命令 Globals.ThisAddIn.Application.ExecuteMso("AcceptInvitationNoResponse"); cancel = false; } public void HandleDeclineMeetingResponse(Office.IRibbonControl control, ref bool cancel) { // 此处添加你的自定义逻辑(如果需要) // 手动执行原生拒绝命令 Globals.ThisAddIn.Application.ExecuteMso("DeclineInvitationNoResponse"); cancel = false; }强制关闭会议窗口(可选)
若执行原生命令后会议窗口仍未关闭,可手动获取当前窗口并关闭:Outlook.Inspector inspector = control.Context as Outlook.Inspector; if (inspector != null) { inspector.Close(Outlook.OlInspectorClose.olSave); }校验Ribbon XML配置
确认Ribbon XML无语法错误,命名空间结构正确,且onAction指定的方法名与代码中的方法完全匹配。
内容的提问来源于stack exchange,提问作者ManojP
相关产品推荐
相关产品推荐

