Itgeneor311 Could not determine last financial period of last completed year | Loading incremental

Bij

select
*
from ExactOnlineREST.Incremental.XXXXXIncremental@eol

krijg ik de volgende foutmelding:

Exclamation itgeneor311: Could not determine last financial period of last completed year.

Dit gebeurt bij TransactionLines / Accounts incremental.
Het klopt dat de gebruikte administraties geen duidelijk vorig jaar hebben omdat ze dit jaar zijn aangemaakt. In onderstaande topic begreep ik dat het probleem van deze foutmelding zou zijn opgelost? Boekjaar 2020 bestaat al wel.

Verwijzing:

Update geplaatst van 20.1.339 naar 20.1.441.

Nieuwe melding voor elke partitie die aangeroepen wordt:

Cannot insert the value NULL into column ‘d8ac2207b0034c5a3c11330a93978e’, table ‘DATABASENAME.dbo.dcd_gr9f9’; column does not allow nulls. INSERT fails.
The statement has been terminated.
Could not load data for table partition version ‘42,261 - Seeding v3 (table 13 - ExactOnlineREST.Incremental.TransactionLinesIncremental, partition 39 - 12345678)’.

Heb het eerst getest in een andere database (en andere SQL user) met hetzelfde SQL bestand, toen werkte het wel.

Edit:
Omslachtige oplossing:

  • Volledig nieuwe database aanmaken met nieuwe gebruiker.
  • Oude database weggooien.

Foutmeldingen van de vorm

Cannot insert the value NULL into column ‘…’, table ‘…’; column does not allow nulls.

komen uit SQL Server. Met Data Replicator wordt op SQL Server de BulkCopy-functionaliteit (bcp) gebruikt. Deze laadt via een API batches van rijen.

Oorzaak

Waarschijnlijk is een upgrade geplaatst vanaf een 20.1 versie waarin nog voorlopige versies zaten van de *Incremental tabellen. Hierin was een ontwerpfout gemaakt door alle velden van de Exact Online sync REST API’s mee te nemen, terwijl die deels incorrect zijn. Zie voor uitleg: Verzoek finetunen incremental tabellen Exact Online - #2 door guido.leenders.

Een deel van die inmiddels weer weggehaalde velden waren verplicht. De Invantive Data Replicator haalt echter nooit overtollige velden weg; het risico op geautomatiseerd dataverlies is te groot.

Het bijladen van gegevens zonder de vervallen velden leidt tot de foutmelding.

De foutmelding is echter niet bijzonder intuïtief; de interpretatie vereist uitgebreide kennis van het gekozen replicatieconcept met afwijkende kolom- en tabelnamen voor de opslaglaag.

Verbeterde Foutmelding

Voor een verbeterd gebruiksgemak is vanaf 20.1.484 de foutmelding komende vanuit de SQL Server driver herschreven naar:

itgenspr092
Data to insert contains NULL values for column ‘…’ while the column does not allow NULLs. Please make sure all values are not NULL.

Als SQL Server binnen Data Replicator gebruikt wordt als backing database, dan wordt bovendien een vertaling gemaakt van de (cryptische) tabel- en kolomnamen gebruikt voor de opslag naar de logische namen van het bronplatform zoals Loket of NMBRS.

De nieuwe foutmeldingen in dit specifieke scenario op SQL Server zijn in geval van verplichte velden die overtollig zijn t.o.v. de bron in de feitendatabase:

itgendci235
Could not load data for table partition version ‘…’ since the column ‘…’ has been defined as NOT NULL in the database table ‘…’, but has no associated source in the facts database.
Please make sure that the following superfluous fields in the table ‘…’ are evaluated for necessity: …

en in het geval van velden in de backing database die wel gekoppeld zijn aan de bron in de feitendatabase:

itgendci236
Could not load data for table partition version ‘…’ since the column ‘…’ has been defined as NOT NULL in the database table ‘…’, but contains no longer a value in ‘…’ for some rows in the facts database.
Please make sure that the NOT NULL property of ‘…’ in ‘…’ is evaluated for necessity.

De standaardfoutmelding:

itgendch493: Could not load data for table partition version ‘…’.

zal in alle overige gevallen getoond blijven worden.

Oplossing

De gekozen oplossing voor het weghalen van het repository is een van de mogelijke scenario’s. Met de nieuwe release had ook volstaan kunnen worden met enkel het weghalen van de overtollige velden na controle of dat geen zelf-geïntroduceerde velden zijn.