Microsoft Graph: невозможно фильтровать по двоичному файлу singleValueExtendedProperty

Я пытаюсь получить событие из grapi API на основе бинарного расширенного свойства, для которого у меня уже есть значение. Я получил это значение из того же API, поэтому я знаю, что событие с этим значением существует. Я также знаю, что идентификатор свойства правильный, так как я использовал его с .Expand() для получения значения.

var value = "BAAAAIIA4AB0xbcQGoLgCAAAAAAwMvfBFvzUAQAAAAAAAAAAEAAAAEZ53uCfQ51AhtRf+FNQjOk=";
var cleanGlobalObjectIdPropertyId = "Binary {6ed8da90-450b-101b-98da-00aa003f1305} Id 0x23";

var events = await client.Users["[email protected]"].Events.Request()
    .Filter($"singleValueExtendedProperties/Any(ep: ep/id eq '{cleanGlobalObjectIdPropertyId}' and ep/value eq '{value}')")
    .GetAsync();

Это ошибка, которую я получаю:

Microsoft.Graph.ServiceException: Код: ErrorInvalidUrlQueryFilter

Сообщение: Выражение фильтра для $filter не соответствует ни одному расширенному свойству и ограничению значения.

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


person meum    schedule 26.04.2019    source источник
comment
Получение той же ошибки по аналогичному запросу. Вы уже нашли решение?   -  person Lev Sivashov    schedule 21.11.2019
comment
Можно ли вообще выполнить поиск по бинарным singleValueExtendedProperties?   -  person Dmytro    schedule 15.01.2020


Ответы (1)


Я тоже столкнулся с этой проблемой. Но я пытаюсь найти /messages по свойству mapi SearchKey. Я думал использовать что-то вроде:

https://graph.microsoft.com/v1.0/me/messages?$filter=singleValueExtendedProperties%2FAny(ep%3A%20ep%2Fid%20eq%20'Binary%200x300B'%20and%20ep%2Fvalue%20eq%20'yxum+DwfxUy13C4qs5R6ig==')

Согласно https://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part2-url-conventions/odata-v4.0-errata03-os-part2-url-conventions-complete.html#_Toc453752358

«Шесть операторов сравнения можно использовать со всеми примитивными значениями, кроме типов Edm.Binary, Edm.Stream и Edm.Geo».

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

ОБНОВЛЕНИЕ: Итак, я наконец понял это. Допустим, я получил значение singleValueExtendedProperty как:

{
    "id": "Binary 0x300b",
    "value": "yxum+DwfxUy13C4qs5R6ig=="
}

И я хотел найти сообщение по значению этого свойства. Проблема здесь в том, что «+» должен быть закодирован, если он существует. Также значение должно быть приведено к Edm.Binary. Правильный запрос выглядит так:

https://graph.microsoft.com/v1.0/me/messages?$filter=singleValueExtendedProperties%2FAny(ep%3A%20ep%2Fid%20eq%20'Binary%200x300B'%20and%20cast(%20ep%2Fvalue,Edm.Binary)%20eq%20binary'yxum%2BDwfxUy13C4qs5R6ig==')
person Dmytro    schedule 16.01.2020