MS Graph API - Combining And/Or into Filter

654 Views Asked by At

I'm trying to use the OData $filter query parameter with the calendarView endpoint in MS Graph. It seems to work fine until I combine AND with OR. Does anyone know the proper syntax?

Private Sub buildQuery()
    m_webQuery = "https://graph.microsoft.com/v1.0/me/calendars/calendar/calendarView"
    m_webQuery = m_webQuery & "?$select=subject,organizer, start,end"
    m_webQuery = m_webQuery & "&startDateTime=" & Format$(m_projectStart, "yyyy-mm-dd")
    m_webQuery = m_webQuery & "&endDateTime=" & Format$(m_projectStart + 365, "yyyy-mm-dd")
    m_webQuery = m_webQuery & "&$filter= (contains(subject,'PTO') or contains(subject,'OOO')) and organizer/emailAddress/name eq 'John Doe'"
    m_webQuery = m_webQuery & "&$orderby=organizer/emailAddress/name"
    m_webQuery = m_webQuery & "&$top=500"
End Sub

The filter failing to produce correct results

m_webQuery = m_webQuery & "&$filter= contains(subject,'PTO') or contains(subject,'OOO') and organizer/emailAddress/name eq 'Joe Smith'"

The result should be any event containing PTO or OOO in the subject where the organizer is John Doe

I've tried combining using parans but no avail.

1

There are 1 best solutions below

0
user2250152 On

From the testing it's not possible to combine filtering by organizer/emailAddress/name together with filtering by any other property.

So either

m_webQuery = m_webQuery & "&$filter= contains(subject,'PTO') or contains(subject,'OOO')"

or

m_webQuery = m_webQuery & "&$filter=organizer/emailAddress/name eq 'John Doe'"

will work.

Only solution is to use one of the filter above for server side filtering and then apply the other filter on the client.