Het beschreven probleem is onbekend.
De genoemde API documentatie geeft wel aan dat de sortering anders kan zijn door de overgang van client-code naar databaseserver afhandeling, maar niet dat de API dan verkeerde uitkomsten teruggeeft. Ik zou ook verwachten dat een financieel systeem dan een error zou geven als sortering verplicht is; je bent anders niet aantoonbaar in-control als je niet geborgd hebt dat de gegevens consistent, volledig en herleidbaar zijn.
Invantive SQL maakt gebruik van skip
en take
met JSON berichten (documentatie). De gegevens worden dus in pagina’s opgehaald, zodat je al gegevens kunt verwerken terwijl niet alles opgehaald is.
Je kunt de daadwerkelijk uitgewisselde AFAS API calls terugzien in bijvoorbeeld het scherm Session I/Os op Invantive Cloud of met de volgende query direct na uitvoering van je SQL statements:
select *
from sessionios@datadictionary
Suggestie is om als eerste de standaard page size van Invantive SQL nogmaals te proberen. De standaard paginagroot op AFAS API die Invantive SQL gebruikt is 100. Die 100 was ooit ook de grootst mogelijke waarde; hogere waardes werden silently teruggezet op 100, maar ik kan dit zo vlot niet in de documentatie van AFAS zelf terugvinden anders dan dat als je de take
niet meegeeft, dat alleen de eerste 100 regels teruggeven worden.
Wat ik wel lees in de documentatie, is het vetgedrukte:
Skip/Take
URL/connectors/GetConnectorName?skip=0&take=20
The Skip/Take operator offers the option of getting data in bits. If the operator is not included, the first 100 lines will always be returned. If you set both skip and take to '-1’, all lines will be retrieved (we do not recommend this!).
Always use skip/take in combination with sorting. The sorting may otherwise change during the retrieval of the data.
Er is geen versie-informatie zichtbaar of dit een recente wijziging is, maar het beschreven gedrag lijkt wel aan te sluiten bij je ervaringen.
Probeer svp eerst met de standaard page size en laat je ervaring weten.
Ik zal intern navragen of er meer over bekend is qua mogelijke oorzaken.
Als workaround kun je de volgende twee opties uitproberen.
Via SQL:
select *
from range(100,0)@datadictionary
join TABEL
on debiteur_nummer like lpad(to_char(rge.value), 2, '0'))
Via PSQL:
create or replace table doel@inmemorystorage
as
select *
from TABEL
where 1 = 0
begin
for i in 0..99
loop
insert into doel@inmemorystorage
( ...
)
select ...
from TABEL
where debiteur_nummer like lpad(to_char(i), 2, '0'))
;
end loop;
end;
Aanvulling: ook in een ander stuk documentatie staat dat een sortering meegegeven moet worden naar AFAS tegenwoordig:
Gebruik altijd een sortering bij het uitvoeren van een opdracht met skip/take. Sorteer bij voorkeur op een uniek veld, zoals factuurnummer of medewerkercode, of een combinatie van velden.
N.a.v. deze laatste opmerking genereert Invantive SQL een sortering naar beste eer en geweten in de laatste 20.0 en 20.1 BETA releases.