Itgenoda061: "Filtering on these fields is not supported: Created" bij ophalen AccountsBulk

Bij het incrementeel ophalen van AccountsBulk treedt een foutmelding op:

itgenoda061:
Filtering on these fields is not supported: Created.

Dit ophalen gebeurt met de OData URL:

https://bridge-online.cloud/ACME/odata4/ExactOnlineREST.CRM.AccountsBulk@eol?%24filter=Created+ge+2020-09-15T02%3A07%3A49Z+and+Created+lt+2021-09-15T02%3A07%3A49Z

wat vertaald wordt in het SQL-statement:

select t.*
from   ExactOnlineREST.CRM.AccountsBulk@eol t
where  (([Created] >= :w1) and ([Created] < :w2))

met de volgende bindparameterwaarden:

  • w1 = 9/15/2020 2:07:49 AM (datetime)
  • w2 = 9/15/2021 2:07:49 AM (datetime)

De reden van de foutmelding lijkt te zijn de “mandatory filtering” die Exact Online heeft ingevoerd. Alhoewel Created een efficiënte manier is om het API-calls sterk te verminderen - los van een eventueel ontbrekende index op de Exact Online database - lijkt het er op dat ook hier niet meer op gefilterd kan worden.

Het is niet duidelijk of dit een design- of implementatiebug in de Exact Online implementatie van mandatory filtering is of een keuze om het gebruik van AccountsIncremental op basis van de Sync API te verhogen.

In de Invantive SQL engine zal in ieder geval de foutmelding itgenoda061 verbijzonderd worden naar een Exact Online-specifieke code.

Daarnaast overwegen we een optimalisatie die de volgende constructie:

column >= CONSTANT and column < CONSTANT

herschrijft naar false, zodat er helemaal geen API-aanroep gedaan wordt.

Voor het specifieke probleem hebben we nog geen idee hoe dit gerealiseerd moet worden anders dan afstappen van deze aanpak of brute force alle pagina’s in alle administraties op te halen.

Wat is het alternatief om data op te halen in batches?

Aangezien de $skip option disabled is er geen normale pagination mogelijk
En $orderBy wordt ignored waardoor er geen cursor based pagination mogelijk is.

Date ranges zijn daarom de enige mogelijkheid