makeEwsRequestAsync 在 Outlook 桌面客户端中不起作用

makeEwsRequestAsync not working in outlook desktop client

我正在使用 makeEwsRequestAsync 请求在 outlook 中进行邮箱搜索。

var mailbox = Office.context.mailbox;
mailbox.makeEwsRequestAsync(request, callback);

它在 outlook web 客户端中运行良好,但我在 outlook 桌面客户端中总是得到空结果。

回调函数:

function callback(asyncResult) {

        var result = asyncResult.value;
        var context = asyncResult.context;

        if (asyncResult.status == "succeeded") {

            var xmlDoc = $.parseXML(result.toString());
}
}

在 xml 解析后,$(xmlDoc).text() 给出 xml 文本。

但是 $(xmlDoc).find('node') 在 Outlook 桌面客户端 (Outlook 2013) 中不起作用。我尝试以大写字母给出节点名称,较低(例如 s:Envelope、s:envelope、S:ENVELOPE)但 find() 不起作用

我应该怎么做才能在 outlook 桌面客户端中获得结果。我正在使用 Outlook 2013。

您需要根据客户端以不同方式解析 XML,https://msdn.microsoft.com/en-us/library/office/fp160952.aspx 中对此进行了讨论。如果转储 result.toString() 的内容,您将能够知道在 Outlook 中实际返回到 Javascript 处理器 运行 的内容,然后您应该能够计算出处理过程它正确。

Microsoft 在 GitHub 上发布了很多示例,例如 https://github.com/OfficeDev/Outlook-Add-in-JavaScript-MakeEWSRequest

我个人使用以下方法,它适用于大多数浏览器和桌面 outlook 版本,但我通常首先输出结果以查看返回的内容,然后很容易找出下一步应该做什么以及哪个 js物件最好用

function callbackFindItems(asyncResult) {
    //$('#ChkTest').text(asyncResult.value);
    var result = asyncResult.value;
    var context = asyncResult.context;
    var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
    if (is_chrome) {
        var parser = new DOMParser();
        var doc = parser.parseFromString(asyncResult.value, "text/xml");
        var values = doc.childNodes[0].getElementsByTagName("ItemId");
        var itemId = values[0].attributes['Id'].value;
        var changeKey = values[0].attributes['ChangeKey'].value;
        var request = UpdateVerb(itemId, changeKey, hexToBase64(_VerOptions));
        var envelope = getSoapEnvelope(request);
       // $('#ChkTest').text(request);
        Office.context.mailbox.makeEwsRequestAsync(envelope, updateCallBack);
    }
    else {
        var parser = new DOMParser();
        var doc = parser.parseFromString(asyncResult.value, "text/xml");
        var values = doc.childNodes[0].getElementsByTagName("t:ItemId");
        var itemId = values[0].attributes['Id'].value;
        var changeKey = values[0].attributes['ChangeKey'].value;
        var request = UpdateVerb(itemId, changeKey, hexToBase64(_VerOptions));
        var envelope = getSoapEnvelope(request);
        //$('#ChkTest').text(request);
        Office.context.mailbox.makeEwsRequestAsync(envelope, updateCallBack);
    }
}