Itgenoda061 Bad Request Recursion reached allowed limit

De volgende URL:

https://bridge-online.cloud/acme-exact-online/odata4/ExactOnlineREST.Financial.JournalStatusByFinancialPeriod@eol?$filter=Division%20eq%20DIVISIONCODE%20and%20JournalDescription%20eq%20%27inkoop%27%20and%20%28Year%20eq%202023%20and%20Period%20eq%2012%20or%20Year%20eq%202022%20and%20Period%20eq%202%20or%20Year%20eq%202021%20and%20Period%20eq%202%20or%20Year%20eq%202022%20and%20Period%20eq%203%20or%20Year%20eq%202022%20and%20Period%20eq%204%20or%20Year%20eq%202022%20and%20Period%20eq%205%20or%20Year%20eq%202022%20and%20Period%20eq%206%20or%20Year%20eq%202022%20and%20Period%20eq%207%20or%20Year%20eq%202022%20and%20Period%20eq%208%20or%20Year%20eq%202022%20and%20Period%20eq%209%20or%20Year%20eq%202022%20and%20Period%20eq%2010%20or%20Year%20eq%202022%20and%20Period%20eq%2011%20or%20Year%20eq%202022%20and%20Period%20eq%2012%20or%20Year%20eq%202021%20and%20Period%20eq%203%20or%20Year%20eq%202021%20and%20Period%20eq%204%20or%20Year%20eq%202021%20and%20Period%20eq%205%20or%20Year%20eq%202021%20and%20Period%20eq%206%20or%20Year%20eq%202021%20and%20Period%20eq%207%20or%20Year%20eq%202021%20and%20Period%20eq%208%20or%20Year%20eq%202021%20and%20Period%20eq%209%20or%20Year%20eq%202021%20and%20Period%20eq%2010%20or%20Year%20eq%202021%20and%20Period%20eq%2011%20or%20Year%20eq%202021%20and%20Period%20eq%2012%29&$select=Period%2CStatusDescription%2CYear

leidt tot het volgende SQL-statement:

select t.[Period], t.[StatusDescription], t.[Year]
from   ExactOnlineREST.Financial.JournalStatusByFinancialPeriod@eol t
where  ((([Division] = :w1) and ([JournalDescription] = :w2)) and (((((((((((((((((((((((([Year] = :w3) and ([Period] = :w4)) or (([Year] = :w5) and ([Period] = :w6))) or (([Year] = :w7) and ([Period] = :w8))) or (([Year] = :w9) and ([Period] = :w10))) or (([Year] = :w11) and ([Period] = :w12))) or (([Year] = :w13) and ([Period] = :w14))) or (([Year] = :w15) and ([Period] = :w16))) or (([Year] = :w17) and ([Period] = :w18))) or (([Year] = :w19) and ([Period] = :w20))) or (([Year] = :w21) and ([Period] = :w22))) or (([Year] = :w23) and ([Period] = :w24))) or (([Year] = :w25) and ([Period] = :w26))) or (([Year] = :w27) and ([Period] = :w28))) or (([Year] = :w29) and ([Period] = :w30))) or (([Year] = :w31) and ([Period] = :w32))) or (([Year] = :w33) and ([Period] = :w34))) or (([Year] = :w35) and ([Period] = :w36))) or (([Year] = :w37) and ([Period] = :w38))) or (([Year] = :w39) and ([Period] = :w40))) or (([Year] = :w41) and ([Period] = :w42))) or (([Year] = :w43) and ([Period] = :w44))) or (([Year] = :w45) and ([Period] = :w46))) or (([Year] = :w47) and ([Period] = :w48))))

Dit leidt tot de Exact Online API URL:

https://start.exactonline.nl/api/v1/DIVISIONCODE/read/financial/JournalStatusByFinancialPeriod?$select=*&$filter=((Year eq 2021 and Period eq 12) or ((Year eq 2021 and Period eq 11) or ((Year eq 2021 and Period eq 10) or ((Year eq 2021 and Period eq 9) or ((Year eq 2021 and Period eq 8) or ((Year eq 2021 and Period eq 7) or ((Year eq 2021 and Period eq 6) or ((Year eq 2021 and Period eq 5) or ((Year eq 2021 and Period eq 4) or ((Year eq 2021 and Period eq 3) or ((Year eq 2022 and Period eq 12) or ((Year eq 2022 and Period eq 11) or ((Year eq 2022 and Period eq 10) or ((Year eq 2022 and Period eq 9) or ((Year eq 2022 and Period eq 8) or ((Year eq 2022 and Period eq 7) or ((Year eq 2022 and Period eq 6) or ((Year eq 2022 and Period eq 5) or ((Year eq 2022 and Period eq 4) or ((Year eq 2022 and Period eq 3) or ((Year eq 2021 and Period eq 2) or ((Year eq 2023 and Period eq 12) or (Year eq 2022 and Period eq 2))))))))))))))))))))))) and JournalDescription eq 'inkoop'

De criteria zijn dus:

  • jaar 2021 periode 2 t/m 12
  • jaar 2022 periode 2 t/m 12
  • jaar 2023 periode 12
  • dagboekomschrijving “inkoop”

En die geeft op de Exact Online API-server de foutmelding:

{ "error": 
  { "code": ""
  , "message": 
    { "lang": ""
    , "value": "Recursion reached allowed limit."
    }
  }
}

De foutmelding “Recursion reached allowed limit” is waarschijnlijk afkomstig uit de enigszins gedateerde OData-versie die Exact Online gebruikt behorende bij de methode CreateDeepRecursion_General zoals aangeroepen op Reference Source.

Volgens de internal class ExpressionParser in Microsoft’s RequestQueryParser .cs is de limit 100 (RecursionLimit).

Waarschijnlijk bouwt de OData3-parser een boom op met een grote diepte, waarbij elke or leidt tot tenminste twee nieuwe niveau’s, wat ongeveer op 100 niveau’s uitkomt.

Voorlopig worden geen verbeteringen doorgevoerd om dergelijke complexe queries op Exact Online te kunnen uitvoeren.

Advies is om een eenvoudiger query te gebruiken, bijvoorbeeld door query-folding te voorkomen in dit geval.