Office.js надстройки Outlook InternetHeaders предпочитают ImmutableId - PullRequest
1 голос
/ 04 октября 2019

Я занимаюсь разработкой надстройки для Outlook (реагирует на ядро ​​dotnet). Я хочу использовать неизменный идентификатор для почтовых сообщений. Эта страница говорит

ОБНОВЛЕНИЕ (15 января 2019 г.): эта функция теперь доступна в Microsoft Graph v1.0 и бета-версии как «opt-в". Graph будет по-прежнему возвращать обычные идентификаторы по умолчанию.

Поэтому для доступа к этой функции мне нужно отправить HTTP-заголовок в запросах API:

Prefer: IdType="ImmutableId"

Существует APIчто делает это:

Office.context.mailbox.item.internetHeaders.setAsync({"Prefer": "IdType=\"ImmutableId\""});

В компоненте React для составления сообщения запрос успешно выполняется в методе componentDidMount(), но не генерирует ImmutableId [Отредактировано - setAsync() метод доступен только для составления сообщения]. В процессе написания вопроса я нашел ответ на этой странице :

Вам потребуется выполнить несколько дополнительных шагов для завершения обновления. В теге head HTML-страниц вашей надстройки закомментируйте или удалите все существующие ссылки на сценарии office.js и укажите обновленную библиотеку JavaScript API для Office следующим образом:

<script src="https://appsforoffice.microsoft.com/lib/1/hosted/Office.js" type="text/javascript"></script>

/ 1 / в office.js в URL-адресе CDN указывает на использование последнего инкрементного выпуска в версии 1 Office.js.

Я обновил файл taskpane.html обновленнымссылка на скрипт, но запрос по-прежнему не выполняется - идентификаторы никогда не являются неизменяемыми, даже если заголовок задан успешно, itemId - это просто стандартный переменный идентификатор, который изменяется при перемещении элемента между папками. Есть ли пример, демонстрирующий успешное использование этой функциональности?

1 Ответ

0 голосов
/ 26 октября 2019

В первом документе описан HTML-заголовок, который нужно установить при вызовах Microsoft Graph или Exchange REST API. Это может быть важно для вас позже, в зависимости от того, как вы используете идентификатор.

Чтобы получить неизменяемый идентификатор для элемента Outlook:

  1. Получите идентификатор элемента EWS из Office.context.mailbox.item.itemId
  2. Выполните удаленный вызов службы для API translateExchangeIds REST для обмена идентификатором REST на неизменяемый идентификатор

Это неполный пример того, как вызыватьAPI REST из надстройки Outlook. В нем отсутствует токен доступа, поскольку для translateExchangeIds REST API требуются разрешения User.ReadBasic, что не входит в область действия токена, возвращаемого API getClientAccessToken. Этот сокращенный пример основан на выполнении вызовов REST API из статьи надстройки Outlook, в которой содержится дополнительная информация о выполнении других запросов, подобных этой.

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);
});

Вы также можете создатьзапрос функции для API неизменяемого идентификатора на стороне клиента в надстройках Outlook UserVoice . Запросы функций в UserVoice рассматриваются, когда мы проходим процесс планирования.

...