Фильтрация нескольких возможных значений с помощью ExtendedProperties и REST API Office 365
Я пытаюсь получить список писем с указанием их InternetMessageID.
Для одного данного InternetMessageID я могу получить соответствующую почту, следуя синтаксису, приведенному в документации Outlook
"https://outlook.office365.com/api/beta/me/messages?$filter=SingleValueExtendedProperties/any(ep: ep/PropertyId eq 'String 0x1035' and ep/Value eq '<12.FF.36768.EE3E3365@twitter.com>' )";
Теперь позвольте мне сказать, что я хочу получить две почты с одним и тем же запросом, но мне не удалось получить успешный синтаксис.
Например
"https://outlook.office365.com/api/beta/me/messages?$filter=SingleValueExtendedProperties/any(ep: ep/PropertyId eq 'String 0x1035' and (ep/Value eq '<12.FF.36768.EE3E3365@twitter.com>' or ep/value eq 'anothermailid@toto.com'))";
не работает. BadRequest возвращается с сообщением
The filter expression for $filter does not match to a single extended property and a value restriction.
Я пробовал много комбинаций группировки, а также тест с $expand
утверждение, как предлагается в этом вопросе. Есть ли способ выполнять такие запросы с помощью Outlook Web Api Graph API?
1 ответ
Я только что попробовал это, и я получаю более информативное сообщение об ошибке:
{
"error": {
"code": "ErrorInvalidUrlQueryFilter",
"message": "The filter expression for $filter on property ExtendedProperty only allows
[and] and [eq] operators. The equality can only be specified between
'PropertyId' and a constant or 'Value' and a constant (for example:
PropertyId eq 'value')."
}
}
ОБНОВЛЕНИЕ: Проверено моей командой инженеров, и эта ошибка относится к тому, что находится внутри ЛЮБОГО утверждения. Вы не можете использовать ИЛИ там. Таким образом, чтобы это работало, вам нужно два отдельных оператора ANY, соединенных OR:
https://outlook.office.com/api/beta/me/messages?$filter=
SingleValueExtendedProperties/any(ep: ep/PropertyId eq 'String 0x1035'
and ep/Value eq 'someid@somedomain') or
SingleValueExtendedProperties/any(ep: ep/PropertyId eq 'String 0x1035'
and ep/Value eq 'otherid@otherdomain')