Outlook Addin事件处理程序清理

问题描述 投票:0回答:1

我在办公室插件中遇到了事件处理程序的问题。下面是我从微软网站获得的一个示例代码来解释我的意思。我有一个清单文件,它使用on-send钩子以及基于点击的事件触发。我的按钮调用appendMessageBodyOnClick和onsend,我打电话给appendMessageBodyOnSend。这两个功能主要做同样的事情。我绝不想阻止发送电子邮件。

问题是我认为事件对象没有被正确清理。

场景1当我点击我的按钮时;它调用event.completed(),然后在我尝试发送消息之后,它说我的应用程序正在阻止消息,但是当我尝试再次发送时它会通过。

场景2当我将主题留空并然后发送消息时,正如预期的那样,我被提示主题为空。如果我取消在此笔记上发送消息,然后单击我的按钮,则消息会尝试发送,就像我点击发送一样。

我想这是某种或状态清理问题。我在这做错了什么?

功能File.js

function appendMessageBodyOnClick(event) {
    // Append string to message body
    event.completed();
}

// In the following example, the checkMessage function has
// been registered as an event handler for ItemSend.
function appendMessageBodyOnSend(event) {
     // Append string to message body
    event.completed({allowEvent = true});
}
event-handling outlook-addin office-js office-addins outlook-web-addins
1个回答
0
投票

不确定这是否会有所帮助,但在理解如何完成信号事件的同时,我也遇到了一些看似不一致的行为。一旦我修复了边缘情况,就可以了。

一个建议:将字符串附加到邮件正文应该是一个异步函数。从回调函数内部调用event.completed()。 (即:确保在调用event.completed()时,没有其他内容正在等待 - 比如另一个异步结果)

类似于以下内容:

Office.context.mailbox.item.body.setAsync("new body", function(asyncResult) {
    // handle success and failure
    event.completed()
});

对于您的方案2也是如此,确保在最后调用event.completed()。

© www.soinside.com 2019 - 2024. All rights reserved.