Получение настраиваемого набора свойств в надстройке Outlook через Microsoft Graph

Допустим, у меня есть в моей надстройке Outlook (с использованием Office.js) следующий код, работающий в форме создания встречи:

const item = Office.context.mailbox.item;
item.loadCustomPropertiesAsync((result) => {
    const props = result.value;
    const testProp = props.get("my_prop");
    console.log("CUSTOM_PROP", testProp);
    props.set("my_prop", "test_value");
    props.saveAsync((saveResult) =>
        console.log("SAVE_CUSTOM_PROP", saveResult));
});

Я вижу, что на самом деле это сохраняется.

А теперь несколько вопросов по этим настраиваемым свойствам:

  1. Но связаны ли они как-то с расширенными свойствами?

  2. Доступны ли эти свойства каким-либо образом через Outlook REST API или Microsoft Graph?

  3. Могу ли я создать подписку на push-уведомления с помощью Microsoft Graph с фильтром на основе этих свойств? (Я знаю, что могу на основе расширенных свойств)

  4. Если ответ на вопрос выше - «нет», а настраиваемые свойства доступны только через надстройку, в которой они созданы, есть ли способ создать расширенное свойство для события из надстройки, даже если оно не сохранено ?

Чтобы объяснить, почему я спрашиваю, я создаю надстройку, которая позволяет «связать» встречу с нашей сторонней системой и синхронизировать эту встречу с нашим объектом.

Поэтому, когда в форме создания сообщения нажимается кнопка, я:

  • сохраните встречу и получите event-id,
  • сохраните его в нашей системе, чтобы синхронизировать нашу систему с назначением.
  • добавить расширенное свойство в нашу систему с помощью Microsoft Graph для этой встречи

При первом использовании надстройки пользователь аутентифицируется, и я создаю подписку на push-уведомления для событий с нашим расширенным свойством, чтобы выполнить синхронизацию из Outlook в нашу систему.

Он отлично работает в OWA, но теперь, когда нам действительно нужна поддержка рабочего стола, возникают две основные проблемы:

  • Outlook для Mac: нет метода saveAsync, поэтому нет возможности получить id события, я думал о добавлении некоторого настраиваемого свойства, а затем позволить push-уведомлению проинформировать нашу систему о том, что было создано событие, которое необходимо синхронизировать с нашей системой.

  • Outlook для ПК: есть метод saveAsync, но обратный вызов выполняется, когда встреча сохраняется локально, а не на сервере, поэтому я не могу знать, когда именно было создано событие, и могу выполнить несколько вызовов Microsoft Graph для этого мероприятие.

Ответ на мой первый вопрос и / или любые советы по поводу моего варианта использования будут более чем приветствоваться.


person alek kowalczyk    schedule 31.03.2017    source источник


Ответы (2)


TL; DR; Да, можно прочитать настраиваемые свойства, установленные Office.js api loadCustomPropertiesAsync, с помощью REST API. Вам необходимо создать запрос вызова REST, который выглядит как

string addinManifestId = "<your manifest guid here>";//lower cases
string prop = @"String {00020329-0000-0000-C000-000000000046} Name"+ string.Format(" cecp-{0}", addinManifestId );
var url = $"<apiEndpoint>/messages/<youritemid>?$expand=SingleValueExtendedProperties($filter=PropertyId eq '{propertyname}')";

Больше информации

Документация доступна здесь https://msdn.microsoft.com/en-us/library/hh968549(v=exchg.80).aspx

У меня была аналогичная проблема, когда мне нужно было обработать "отправленную почту" для моей надстройки Keluro. Я реализовал что-то очень близкое к вашему подходу с помощью веб-перехватчика REST API. Насколько мне известно, это единственный способ обрабатывать отправленные предметы. Вы можете проголосовать за https://officespdev.uservoice.com/forums/224641-feature-requests-and-feedback/suggestions/10964871-add-itemsend-event-so-add-in-can-cancel-email

person Benoit Patra    schedule 31.03.2017

  1. Согласно MS-OXCEXT, совместимость документ о том, как надстройки хранят данные в Outlook, настраиваемые свойства хранятся в виде словаря JSON в расширенном свойстве MAPI (подробные сведения см. по этой ссылке). Это означает, что вы должны иметь доступ к ним через расширенные свойства Graph, вам просто нужно будет самостоятельно проанализировать значение.
  2. Следует использовать расширенный properties и в формате "{type} {guid} Name {name}".
  3. Не понимаю, почему бы и нет.
  4. Ответ не отрицательный, но я все равно отвечу на ваше продолжение :). Конечно, вы сможете это сделать, если используете REST API из своей надстройки.
person Jason Johnston    schedule 31.03.2017
comment
Спасибо за поддержку :) Я действительно близок к завершению нашей интеграции с O365, но у меня возникла проблема. В продолжение этого вопроса я написал об этом в отдельном вопросе здесь - person alek kowalczyk; 05.04.2017