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);
}
}
我正在使用 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);
}
}