我在Outlook中运行了一个表单服务器,我为表单服务器处理的项目指定了不同的MessageClass(比如说IPM.Note.Test)。如果在资源管理器视图中使用MessageClass IPM.Note.Test选择一个项目,并尝试从功能区转发按钮,我会通过挂钩转发命令阻止用户这样做。
在OL 2013中,如果您有阅读窗格可见,并在资源管理器中选择一个项目,您可以看到它的预览,并可以从阅读窗格顶部的工具栏中转发/回复/回复,这将创建一个InlineResponse。
我想挂钩这个Forward操作,并阻止用户这样做,就像我对Explorer-Ribbon Forward命令一样。
我知道在创建内联响应的任何操作上触发的Explorer.InlineResponse事件,但是此操作在操作之后触发,而不是在它之前触发,并且它触发Reply,ReplyAll和Forward,这三个他们。我只想拦截前锋。事件中没有信息告诉哪个动作触发了它。
在创建InlineResponse之前,有没有办法识别触发事件的动作?
或者有没有办法阻止创建InlineResponse? (从代码中,我知道你可以在OL选项中禁用它。)
或者有没有办法从Explorer.SelectionChange事件中禁用这些操作/内联响应?
我将不胜感激任何帮助。
感谢。
答案 0 :(得分:0)
attrs
对象公开sendAction
集合。检索Forward操作,将MailItem
属性设置为true,调用Actions
。
答案 1 :(得分:0)
您需要将相应Action对象实例的Enabled属性设置为 false 。 True
如果在应用程序中启用了操作,false
- 如果操作已禁用。
答案 2 :(得分:0)
谢谢你们花时间回答这个问题。
还出现了其他问题,我暂时搁置了这个问题。
正如我之前提到的,我有自己的Form Server和不同的MessageClass。所以我在ExplorerSelectionChange事件中得到的MailItem对象,不是纯 Outlook MailItem,而是我的 MailItem,不幸的是,目前它无法获取Actions属性就可以了,可能是因为我的表单服务器实现没有返回正确的。
所以,虽然,对于普通的MailItem,Enabled属性会起作用,但它不能解决我的问题...... :(
我也发布到Outlook Dev论坛,有人建议如下:
Private Sub myOlExp_InlineResponse(ByVal Item As Object)
Dim a As MailItem
Set a = Item
If a.To = "" Then
a.Close olDiscard ‘close the mail item
MsgBox "Forward is not supported"
End If
End Sub
虽然有点hacky,并没有很好的用户体验,但我现在正在接受这个答案,因为它有效。
在这里分享,以防其他人来寻找它。