代码之家  ›  专栏  ›  技术社区  ›  Rajeev

Outlook WebAddin在注册时引发内部服务器错误Office.EventType.ItemChanged

  •  2
  • Rajeev  · 技术社区  · 8 年前

    在我的outlookwebaddin中,我尝试使用以下代码注册邮件项更改事件。

        Office.context.mailbox.addHandlerAsync(Office.EventType.ItemChanged, mailItemSelectionChanged, [], function (result) {
                if(result && result.status != 'succeeded'){
                    console.error('result => ' + result);
                 }
    });
    

    每当用户以固定模式更改邮件时,我第一次收到邮件更改事件。如果对话有变化,我会用

    插件重新加载后,注册mailItemChange事件失败,引发以下错误:

    {“code”:5001,“message”:“发生内部错误。”,“name”: “内部错误”}

    outlookDiagnostics公司 :

    “16.0.9215.1000”}

    0 回复  |  直到 8 年前
        1
  •  2
  •   Ali Ahsan    6 年前

    我可以找出以下关于更改了Office.EventType事件登记:

    1. 事件处理程序的注册在外接程序的网页生命周期之外。这意味着,当外接程序卸载当前网页并重新加载相同或不同的网页(即,它导航到另一个网页)时,事件处理程序的注册仍将保留。
    2. 当Outlook关闭加载项窗格时,事件处理程序注册将丢失。

    因此,在调用位置。重新加载()如下所示。

    Office.context.mailbox.removeHandlerAsync(Office.EventType.ItemChanged, {handler: mailItemSelectionChanged}, function(result) {
        if (result.status === Office.AsyncResultStatus.Failed) {
            console.log('Item Change event could not be unregistered.');
            console.log(result.error);
        }
        else {
            console.log('Item Change event unregistered successfully.');
        }
    });
    setTimeout(function() {location.reload();}, 100);
    

    那些想要从外接程序导航到同一个或另一个网页的用户,可以将单击事件处理程序附加到定位标记(或按钮)上,以确保在卸载当前页面之前已注销ItemChanged事件处理程序。我使用以下代码完成此操作:

    $(document).ready(function() {
        $('.NavBarContainer a').toArray().forEach(function(anchor1, index) {
            $(anchor1).click(function(event) {
                if(itemChangeEventRegistered) {
                    unregisterItemChangeHandler();
                    setTimeout(function() {window.location = anchor1.href;}, 100);
                    return false;
                }
                return true;
            });
        });
    });