Office js Office.js Outlook插件InternetHeader更喜欢ImmutableId

Office js Office.js Outlook插件InternetHeader更喜欢ImmutableId,office-js,office-addins,outlook-web-addins,Office Js,Office Addins,Outlook Web Addins,我正在开发Outlook外接程序(使用dotnet core后端进行响应)。我想利用邮件消息的不可变ID。说 更新(2019年1月15日):此功能现在以“选择加入”的形式在Microsoft Graph v1.0和beta版中提供。默认情况下,Graph将继续返回常规ID 因此,为了访问此功能,我需要在API请求中发送HTTP头: Prefer: IdType="ImmutableId" 有一个API可以做到这一点: Office.context.mailbox.item.internetHe

我正在开发Outlook外接程序(使用dotnet core后端进行响应)。我想利用邮件消息的不可变ID。说

更新(2019年1月15日):此功能现在以“选择加入”的形式在Microsoft Graph v1.0和beta版中提供。默认情况下,Graph将继续返回常规ID

因此,为了访问此功能,我需要在API请求中发送HTTP头:

Prefer: IdType="ImmutableId"
有一个API可以做到这一点:

Office.context.mailbox.item.internetHeaders.setAsync({"Prefer": "IdType=\"ImmutableId\""});
在用于编写消息的React组件中,请求在
componentDidMount()
方法中成功,但不会生成不可变ID[已编辑-该方法仅用于编写消息]。在写问题的过程中,我找到了关于以下方面的答案:

您需要采取一些额外的步骤来完成更新。在外接程序HTML页面的head标记中,注释掉或删除任何现有的office.js脚本引用,并引用office library的更新JavaScript API,如下所示:


CDN URL中office.js中的/1/指定使用office.js版本1中的最新增量版本


我已经用更新的脚本引用更新了
taskpane.html
文件,但请求仍然失败-id从来都不是不可变的,即使成功设置了标题,itemId只是在文件夹之间移动项目时更改的标准易失性id。是否有一个示例演示了此功能的成功使用?

第一个文档描述了在调用Microsoft Graph或Exchange REST API时要设置的HTML头。这对您以后可能很重要,具体取决于您如何使用id

要获取Outlook项目的不可变id,请执行以下操作:

  • Office.context.mailbox.item.itemId
  • 对RESTAPI进行远程服务调用,以将REST id交换为不可变id
  • 这是一个关于如何从Outlook加载项调用REST API的不完整示例。它缺少访问令牌,因为
    translateExchangeIds
    REST API需要
    User.ReadBasic
    权限,这不是getClientAccessToken API返回的令牌的范围。这个缩略的例子是基于这篇文章的,它包含了更多关于提出其他类似请求的信息

    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加载项上为客户端不可变id API创建功能请求。在我们进行规划过程时,会考虑对UserVoice的功能请求。

    第一个文档描述了在调用Microsoft Graph或Exchange REST API时要设置的HTML头。这对您以后可能很重要,具体取决于您如何使用id

    要获取Outlook项目的不可变id,请执行以下操作:

  • Office.context.mailbox.item.itemId
  • 对RESTAPI进行远程服务调用,以将REST id交换为不可变id
  • 这是一个关于如何从Outlook加载项调用REST API的不完整示例。它缺少访问令牌,因为
    translateExchangeIds
    REST API需要
    User.ReadBasic
    权限,这不是getClientAccessToken API返回的令牌的范围。这个缩略的例子是基于这篇文章的,它包含了更多关于提出其他类似请求的信息

    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加载项上为客户端不可变id API创建功能请求。在我们进行规划过程时,会考虑对UserVoice的功能请求。

    Office.context.mailbox.item.internetHeaders用于处理电子邮件MIME头。它与REST ImmutableId头不相关。当前Outlook加载项不支持不可变id。您的方案是什么?您主要对通过Outlook加载项获取项目的不可变ID感兴趣吗?是的,我正在尝试为Outlook加载项获取邮件项目的不可变ID。Office.context.mailbox.item.internetHeaders用于处理电子邮件MIME头。它与REST ImmutableId头不相关。当前Outlook加载项不支持不可变id。您的方案是什么?您主要对通过Outlook加载项获取项目的不可变ID感兴趣吗?是的,我正在尝试为Outlook加载项获取邮件项目的不可变ID。对于任何想要更新此想法的人,我已在此处为任何想要更新此想法的人创建了一个请求,我已在此处创建了一个请求