我正在开发Outlook加载项(与dotnet核心后端进行交互)。我想利用邮件的不变ID。 This page说
更新(2019年1月15日):此功能现已在 Microsoft Graph v1.0 和Beta中作为“选择加入”提供。默认情况下,图表将继续返回常规ID。
因此,要访问此功能,我需要在API请求中发送HTTP标头:
Prefer: IdType="ImmutableId"
有一个API可以做到这一点:
Office.context.mailbox.item.internetHeaders.setAsync({"Prefer": "IdType=\"ImmutableId\""});
在用于编写消息的React组件中,请求以componentDidMount()
方法成功,但未生成ImmutableId [已编辑-setAsync()
方法仅可用于编写消息]。在编写问题的过程中,我在this page上找到了答案:
您需要采取一些其他步骤来完成更新。在外接程序HTML页面的head标签中,注释掉或删除任何现有的office.js脚本引用,并按如下所示引用更新的Office库JavaScript API:
<script src="https://appsforoffice.microsoft.com/lib/1/hosted/Office.js" type="text/javascript"></script>
CDN URL中office.js中的/ 1 /指定使用Office.js版本1中的最新增量版本。
我已经用更新的脚本引用更新了taskpane.html
文件,但是请求仍然失败-即使从头设置成功,ID也不是不可变的,itemId只是会更改的标准易失性ID当项目在文件夹之间移动时。是否有示例演示了此功能的成功使用?
答案 0 :(得分:0)
第一个文档描述了在调用Microsoft Graph或Exchange REST API时要设置的HTML标头。以后根据您使用id的方式,这对您可能很重要。
要获取Outlook项目的不可变ID:
Office.context.mailbox.item.itemId
获取EWS物品ID translateExchangeIds
REST API进行远程服务调用,以将REST ID交换为不可变的ID 这是如何从Outlook加载项调用REST API的不完整示例。它缺少访问令牌,因为translateExchangeIds
REST API需要User.ReadBasic
权限,这不是getClientAccessToken API返回的令牌的范围。这个简短的示例基于making REST API calls from an Outlook add-in文章,其中包含有关发出其他类似请求的更多信息。
var accessToken = "" // Need access token with User.ReadBasic or greater permissions
var itemIdFormat = "ewsId";
var translateExchangeIdsUrl = Office.context.mailbox.restUrl +
'/v2.0/me/translateExchangeIds/';
$.ajax({
type: 'POST',
url: translateExchangeIdsUrl,
data: JSON.stringify({
InputIds : [
Office.context.mailbox.item.itemId
],
"SourceIdType": itemIdFormat,
"TargetIdType": "restImmutableEntryId"
}),
contentType: 'application/json',
dataType: 'json',
processData: false,
headers: { 'Authorization': 'Bearer ' + accessToken }
}).done(function(result){
console.log(result);
}).fail(function(error){
console.error(error);
});
您还可以在Outlook外接程序UserVoice上为客户端不可变id API创建功能请求。在我们进行规划过程时,会考虑对UserVoice的功能请求。