Получить события, у которых есть настраиваемое свойство, установленное надстройкой

Этот вопрос является продолжением вопроса Получить настраиваемый свойство, заданное в надстройке Outlook через Microsoft Graph.

Моя надстройка Outlook Office.js добавляет к событию некоторые настраиваемые свойства. Он работает должным образом, и я могу получить доступ к этим свойствам с помощью Microsoft Graph, выполнив следующий GET запрос:

/v1.0/me/events/{event-id}?$expand=SingleValueExtendedProperties($filter=id%20eq%20'String%20{00020329-0000-0000-C000-000000000046}%20Name%20cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af')

Но теперь я пытаюсь подписаться на push-уведомления, отправляя такое тело в конечную точку push-уведомлений (/v1.0/subscriptions):

  {
    changeType: "created,updated,deleted",
    notificationUrl: `[...my url...]`,
    resource: `/users/${userData.id}/events?$filter=singleValueExtendedProperties/any(ep%3A%20ep%2Fid%20eq%20'String%20{00020329-0000-0000-C000-000000000046}%20Name%20cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af')`,
    expirationDateTime: tomorrow,
    clientState: "SecretClientState"
  }

Но я получаю:

{
  "error": {
    "code": "ExtensionError",
    "message": "Operation: Create; Exception: [Status Code: BadRequest; Reason: Bad Request]",
    "innerError": {
      "request-id": "01dcece6-0103-4bef-8231-e9ab9480402a",
      "date": "2017-04-04T20:20:58"
    }
  }
}

Пытался установить ресурс в запросе без экранирования, но с тем же результатом, следующее, что я попробовал, - это функциональность $filter, поэтому запрос на получение в следующем формате с использованием проводника MS Graph:

/v1.0/me/events/?$filter=singleValueExtendedProperties/any(ep%3A%20ep%2Fid%20eq%20'String%20{00020329-0000-0000-C000-000000000046}%20Name%20cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af')

но получил следующую ошибку:

{
    "error": {
        "code": "ErrorInvalidUrlQueryFilter",
        "message": "The filter expression for $filter does not match to a single extended property and a value restriction.",
        "innerError": {
            "request-id": "aca7c8ed-6e30-4490-8feb-7f1d2aed6b88",
            "date": "2017-04-04T20:38:28"
        }
    }
}

Значит ли это, что мне нужно фильтровать по значению, а не только по id?

Это было бы проблемой, потому что мне нужны события, для которых задано свойство, но я не знаю заранее значения, я хочу прочитать его после получения push-уведомления.

Есть ли способ получить события, которые просто имеют настраиваемое свойство, установленное моей надстройкой, и подписаться на push-уведомления для событий, которые имеют это настраиваемое свойство?

РЕДАКТИРОВАТЬ:

Когда я меняю id на PropertyId, как предлагается в ответе, я получаю:

{
    "error": {
        "code": "BadRequest",
        "message": "Could not find a property named 'PropertyId' on type 'microsoft.graph.singleValueLegacyExtendedProperty'.",
        "innerError": {
            "request-id": "1d3db71e-6ee2-4680-9317-64687813c52a",
            "date": "2017-04-05T13:49:45"
        }
    }
}

РЕДАКТИРОВАТЬ-2:

Теперь, когда я добавляю фильтрацию по value, она работает:

/v1.0/me/events/?$filter=singleValueExtendedProperties/any(ep: ep/id eq 'String {00020329-0000-0000-C000-000000000046} Name cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af' and ep/value eq 'foo')

но мне не нужны все события с этим свойством, независимо от его ценности ...

РЕДАКТИРОВАТЬ-3

Не пытайтесь фильтровать по value, но используя оператор неравенства ne:

/v1.0/me/events/?$filter=singleValueExtendedProperties/any(ep: ep/id eq 'String {00020329-0000-0000-C000-000000000046} Name cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af' and ep/value ne 'Foo')

он кажется работает, но на этот раз похоже, что он просто игнорирует фильтр и возвращает все события с и без этого настраиваемого свойства, установленного из надстройки.


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


Ответы (2)


После нескольких попыток я нашел способ фильтровать события / сообщения, у которых есть настраиваемое свойство, независимо от его значения:

https://graph.microsoft.com/v1.0/me/events/?$filter=singleValueExtendedProperties/any(ep: ep/id eq 'String {00020329-0000-0000-C000-000000000046} Name cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af' and ep/value ne null)

с добавленной важной частью and ep/value ne null, тогда как что-то вроде and ep/value ne 'fooo' не сработало, оно просто вернуло все.

Вышеупомянутая фильтрация также работает для фильтрации событий, для которых мы хотим подписаться на push-события.

person alek kowalczyk    schedule 05.04.2017

Я считаю, что запрос фильтра должен быть

PropertyId экв ....

вместо Id eq ...

person Arun V    schedule 05.04.2017
comment
Это не решает мою проблему, после внесения этого изменения я получаю другую ошибку - обновил свой ответ полученным ответом. - person alek kowalczyk; 05.04.2017