我正在使用makeEwsRequestAsync请求在outlook add中进行邮箱搜索。
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。
答案 0 :(得分:1)
您需要根据客户端的不同来解析XML,并在https://msdn.microsoft.com/en-us/library/office/fp160952.aspx上进行讨论。如果您转储result.toString()的内容,您将能够告诉实际返回到Outlook中运行的Javascript处理器的内容,然后您应该能够确定如何正确处理它。
微软已经在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);
}
}