In versie 20.2 van de Query Tool én de Datahub blijft het tweede deel van deze nieuwe query draaien. Na 120 seconden is er nog geen resultaat terwijl er voorheen na zeker 15 seconden al resultaat was.
Wat kan ik hieraan veranderen zodat de query wel gegevens ophaalt?
create or replace table avoidmandatoryfilterbug@inmemorystorage
as
select *
from exactonlinerest..SalesOrders@eol sor
where sor.DeliveryStatus = 12
create or replace table sor@inmemorystorage
as
select sor.* prefix with 'sor_'
, ads.* prefix with 'ads_'
, con.* prefix with 'con_'
from avoidmandatoryfilterbug@inmemorystorage sor
join exactonlinerest..addresses@eol ads
on ads.id = sor.deliveryaddress
join exactonlinerest..Contacts@eol con
on con.account = sor.Invoiceto
where sor.DeliveryDate between trunc(sysdate)-40 and trunc(sysdate)
--and sor.DeliveryStatus = 12
and sor.warehousecode = 1
order
by sor.ordernumber
Ik bedoel het eerste deel van de query (dus het stuk met avoidmandatoryfilterbug).
Wat ik wel zie is als ik bijvoorbeeld een top 100 rechtstreeks op de salesorder tabel opvraag krijg ik die nagenoeg direct. Maar zodra ik de where clausule toevoeg komt er geen resultaat.
De nieuwe implementatie van filtering op Exact Online (“mandatory filtering”) maakt het efficient gebruik van een aantal veelgebruikte filters onmogelijk. Hierdoor is het soms nodig om queries die voorheen met enkele API-calls klaar waren te herschrijven.
Generieke oplossing is om een recente 20.2 release te gebruiken zoals 20.2.21 of nieuwer, en daarna de query om te schrijven naar het gebruik van de *Incremental tabellen. Deze zijn gebaseerd op de Exact Online Sync API’s, waarbij alle logica onder de motorkap verwerkt is.
Typisch zijn per tabel nog maar twee API-calls nodig.
De query blijft op hoofdlijnen hetzelfde, maar een aantal kolommen zijn afgeleid en zullen niet meer in het resultaat verschijnen. Bijvoorbeeld AccountName in SalesOrderLinesIncremental ontbreekt en moet via een join opgehaald worden uit AccountsIncremental.
Merk op dat transacties met LineNumber gelijk aan 0 staat voor de kop (Sales Order). De rest staat voor de regels binnen de kop.