Помеченные сообщения через REST API Office 365?

Я ищу способ определить и установить статус «помечено» для электронной почты с помощью API сообщений REST Office 365. Я не вижу «Флаг» в списке свойств Сообщение REST, хотя я вижу его в списке Веб-службы Exchange.

Я попытался сделать вызов REST, добавив флаг к отфильтрованным свойствам, а также к свойствам SingleValueExtendedProperties и MultiValueExtendedProperties, например:

/folders/inbox/messages?$top=50&$select=Subject,...,Flag
/folders/inbox/messages?$top=50&$select=Subject,...,SingleValueExtendedProperties
/folders/inbox/messages?$top=50&$select=Subject,...,MultiValueExtendedProperties

все они вернулись с той или иной формой:

{"error":{"code":"RequestBroker-ParseUri","message":"Could not find a property named \\\'Flag\\\' on type \\\'Microsoft.OutlookServices.Message\\\'."}}

Любые предложения о том, как получить доступ к свойству Outlook «Флаг» через REST API?


person Jay    schedule 22.07.2015    source источник


Ответы (1)


ОБНОВЛЕНИЕ: теперь есть свойство Flag на Message на конечной точке /beta. Это рекомендуемый способ сделать это. Я оставлю здесь остальную информацию для исторических целей и для помощи людям, пытающимся установить другие расширенные свойства.

Теперь вы можете получить/установить статус флага намного проще. Объект Message теперь имеет свойство Flag типа FollowupFlag. (Если вы не видите его по этой ссылке, убедитесь, что вверху страницы выбрана версия beta).

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

{
  "Flag": {
    "FlagStatus": "Flagged"
  }
}

СТАРЫЙ МЕТОД (с использованием расширенных свойств)

Примечание. Недавно мы внесли изменение, чтобы упростить формат расширенных свойств. Это изменение сейчас распространяется на серверы, поэтому я добавил в этот ответ новый формат. Я оставил старый формат на тот случай, если кто-то получит доступ к почтовым ящикам, к которым еще не было применено обновление. Если вы используете старый формат и получаете сообщение об ошибке:

"Could not find a property named 'PropertyRef' on type 
'Microsoft.OutlookServices.SingleValueLegacyExtendedProperty'."

Вам нужно перейти на новый формат.

Что вам нужно сделать, так это включить параметр запроса $expand, чтобы расширить коллекцию SingleValueExtendedProperties, с подпараметром $filter, чтобы указать свойство, которое вы хотите включить. В этом случае вам нужен PidTagFlagStatus. Попробуйте такой запрос:

Новый формат:

api/beta/me/messages?$select=Subject,SingleValueExtendedProperties&$expand=SingleValueExtendedProperties($filter=PropertyId eq 'Integer 0x1090')

Старый формат:

api/beta/me/messages?$select=Subject,SingleValueExtendedProperties&$expand=SingleValueExtendedProperties($filter=(PropertyRef eq '0x1090' and Type eq Microsoft.OutlookServices.MapiPropertyType'Integer'))

Сообщения, которые вообще не помечены, просто не вернут это свойство. Сообщения, которые делают это, будут выглядеть примерно так:

Новый формат:

{
  "@odata.id": "https://outlook.office365.com/api/beta/Users('[email protected]')/Messages('AAMkAGQ4Yzc2NDkwLTYxYmItNDZmYS1iZjI1LTYyNmY4NTZkMjI1NgBGAAAAAADwPSus7EwaR6q1wNtgoqEMBwDpfBfj8UPUTqu4bEwGpnFMAAAAAAEgAADpfBfj8UPUTqu4bEwGpnFMAAAjCUJGAAA=')",
  "@odata.etag": "W/\"CQAAABYAAADpfBfj8UPUTqu4bEwGpnFMAAAjCzND\"",
  "Id": "AAMkAGQ4Yzc2NDkwLTYxYmItNDZmYS1iZjI1LTYyNmY4NTZkMjI1NgBGAAAAAADwPSus7EwaR6q1wNtgoqEMBwDpfBfj8UPUTqu4bEwGpnFMAAAAAAEgAADpfBfj8UPUTqu4bEwGpnFMAAAjCUJGAAA=",
  "Subject": "Test Flag",
  "[email protected]": "https://outlook.office365.com/api/beta/$metadata#Me/Messages('AAMkAGQ4Yzc2NDkwLTYxYmItNDZmYS1iZjI1LTYyNmY4NTZkMjI1NgBGAAAAAADwPSus7EwaR6q1wNtgoqEMBwDpfBfj8UPUTqu4bEwGpnFMAAAAAAEgAADpfBfj8UPUTqu4bEwGpnFMAAAjCUJGAAA%3D')/SingleValueExtendedProperties",
  "SingleValueExtendedProperties": [
    {
      "PropertyId": "Integer 0x1090",
      "Value": "2"
    }
  ]
}

Старый формат:

{
  "@odata.id": "https://outlook.office365.com/api/beta/Users('[email protected]')/Messages('AAMkAGQ4Yzc2NDkwLTYxYmItNDZmYS1iZjI1LTYyNmY4NTZkMjI1NgBGAAAAAADwPSus7EwaR6q1wNtgoqEMBwDpfBfj8UPUTqu4bEwGpnFMAAAAAAEgAADpfBfj8UPUTqu4bEwGpnFMAAAjCUJGAAA=')",
  "@odata.etag": "W/\"CQAAABYAAADpfBfj8UPUTqu4bEwGpnFMAAAjCzND\"",
  "Id": "AAMkAGQ4Yzc2NDkwLTYxYmItNDZmYS1iZjI1LTYyNmY4NTZkMjI1NgBGAAAAAADwPSus7EwaR6q1wNtgoqEMBwDpfBfj8UPUTqu4bEwGpnFMAAAAAAEgAADpfBfj8UPUTqu4bEwGpnFMAAAjCUJGAAA=",
  "Subject": "Test Flag",
  "[email protected]": "https://outlook.office365.com/api/beta/$metadata#Me/Messages('AAMkAGQ4Yzc2NDkwLTYxYmItNDZmYS1iZjI1LTYyNmY4NTZkMjI1NgBGAAAAAADwPSus7EwaR6q1wNtgoqEMBwDpfBfj8UPUTqu4bEwGpnFMAAAAAAEgAADpfBfj8UPUTqu4bEwGpnFMAAAjCUJGAAA%3D')/SingleValueExtendedProperties",
  "SingleValueExtendedProperties": [
    {
      "PropertyRef": "0x1090",
      "Type": "Integer",
      "Value": "2"
    }
  ]
}

Установить флаг так же просто, как отправить PATCH к сообщению с этим свойством в коллекции SingleValueExtendedProperties:

Новый формат:

PATCH https://outlook.office365.com/api/beta/me/messages/{id}

{
  "SingleValueExtendedProperties": [
    {
      "PropertyId": "Integer 0x1090",
      "Value": "2"
    }
  ]
}

Старый формат:

PATCH https://outlook.office365.com/api/beta/me/messages/{id}

{
  "SingleValueExtendedProperties": [
    {
      "PropertyRef": "0x1090",
      "Type": "Integer",
      "Value": "2"
    }
  ]
}

Наконец, согласно MS-OXOFLAG, значение 2 означает, что помечено для продолжения, а 1 означает, что пометка завершена.

person Jason Johnston    schedule 22.07.2015
comment
Спасибо за подробности. Могу ли я также сделать сестринский призыв «установить флаг»? Например. если я использую бета-конечную точку, могу ли я ИСПРАВИТЬ значение флага? - person Jay; 23.07.2015
comment
Этот ответ отлично работал для меня до сегодняшнего дня. Похоже, Microsoft могла что-то изменить. Теперь я получаю сообщение об ошибке, когда пытаюсь прочитать или установить эти значения. - person James; 04.10.2015
comment
Да, ты прав. Произошло изменение, которое внедряется в формат расширенных свойств. Я обновлю свой ответ в новом формате. - person Jason Johnston; 05.10.2015
comment
Спасибо за своевременный ответ. Есть ли способ получить предварительное уведомление о критических изменениях? Трудно представить себе создание продукта, который использует эти API в текущем состоянии изменений. - person Jay; 05.10.2015
comment
Полностью понимаю. Это изменение было развернуто без предварительного уведомления разработчиков документации, что вызвало некоторую путаницу. Имейте также в виду, что это конечная точка beta, поэтому здесь все может измениться немного быстрее, чем в конечной точке 1.0. - person Jason Johnston; 05.10.2015