Office.js Outlook加载项InternetHeaders首选ImmutableId

时间:2019-10-04 01:33:29

标签: office-js office-addins outlook-web-addins

我正在开发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当项目在文件夹之间移动时。是否有示例演示了此功能的成功使用?

1 个答案:

答案 0 :(得分:0)

第一个文档描述了在调用Microsoft Graph或Exchange REST API时要设置的HTML标头。以后根据您使用id的方式,这对您可能很重要。

要获取Outlook项目的不可变ID:

  1. Office.context.mailbox.item.itemId获取EWS物品ID
  2. 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的功能请求。