Exact Online extra velden van artikelen niet zichtbaar in ItemsIncremental

Bij het exporteren van Exact Online-tabellen met Invantive via REST-interface missen we data.

Van de geëxporteerde tabel Incremental.ItemsIncremental blijkt dat de kolommen met de extra tekstvelden geen waarden bevatten, terwijl die in Exact Online wel zijn aangemaakt en gevuld.
In de export gaat het om de velden “Vrije tekstveld 1”, “Vrije tekstveld 2”, …

In Exact Online zijn die wel aangemaakt en gevuld, zie screendump:

Is er misschien een andere tabel die we hiervoor zouden moeten benaderen?

Of is er een andere manier om de waarden van deze extra tekstvelden te exporteren?

De vrije velden hebben nogal wat implementaties gekend, die niet altijd gepaard gingen met een hoge mate van technische en operationele volwassenheid. In Exact Online Premium zal hier naar verluidt weer een nieuwe poging in gewaagd worden.

Paar algemene waarschuwingen:

  • Het is onbekend in hoeverre het ophalen van vrije veldwaardes via de Exact Online REST-API’s momenteel stabiel is en stabiel blijft.
  • Het algemeen advies is daarom om vrije velden zo weinig mogelijk te gebruiken.
  • Invantive SQL maakt ophalen extra velden over meerdere administraties eenvoudig, maar let op: de betekenis van een extra veld met een uniek nummer kan per Exact Online administratie anders zijn.

Meer informatie over de extra velden is ook te vinden in Inlezen extra velden van Exact Online artikelen.

In een voorbeeld Exact Online-administratie staan meerdere extra velden, waarbij FreeItem10 een vrije tekstuele waarde heeft gekregen:

De volgende query achter de bovenstaande vraag laat geen informatie zien over het extra veld en dat is ook wat verwacht wordt:

select division
,      id
,      code
,      freetextfield_10
from   itemsincremental@eol
where  division = DIVISIECODE
and    code = '20220225-0'

Via de REST-tabellen kan de waarde van het extra veld wel opgevraagd worden via de tabelfunctie ItemExtraFields:

select division
,      itemid
,      number
,      description
,      value
from   itemextrafields@eol
       ( DIVISIECODE
       , to_guid('791215f8-5dfb-4e0a-873e-4b24b189c5dd') /* ID van het artikel. */
       , trunc(sysdate) /* Wijzigingen van vandaag en later. */
       )

met als resultaat:

De oorspronkelijke Exact Online-tabelfunctie had nogal wat beperkingen, maar de volledige lijst kan nu ook opgevraagd worden met maar 1 API-call per 60 vrije veldwaardes:

select ief.division
,      ief.itemid
,      ief.number
,      ief.description
,      ief.value
from   ExactOnlineREST..ItemExtraFields
       ( division => null
       , itemId => null
       , modified => to_date('19700101', 'YYYYMMDD')
       ) ief

met als resultaat:

De aanbevolen aanpak voor extra velden en hun waardes is echter het gebruik van de XML-tabel voor artikelen. Die heeft veel minder API-calls nodig dan ItemExtraFields, plus heeft zich jarenlang bewezen als stabiel en betrouwbaar:

select division_code
,      code_attr
,      description
,      itemextrafields_extrafield10
from   exactonlinexml..items
where  division_code = DIVISIECODE
and    code_attr = '20220225-0'

met als resultaat:

Met ingang van versie 22.0.474 zal het opgeven van modified niet meer nodig zijn als alle waardes opgehaald moeten worden. De volgende query loopt dan over alle administraties en artikelen heen:

select *
from   ItemExtraFields@eol

Dit maakt deze tabelfunctie ook zichtbaar voor Power BI en Tableau-gebruikers via Invantive Cloud.

Bedankt - hier gaan we verder mee.

We hebben in de applicatie die werkt een module toegevoegd.
Als we deze module uitvoeren met de verschillende oplossingen zoals hierboven gesuggereerd krijgen we telkens dezelfde foutmelding:

An error occured - 6039f62b-b6a5-4581-9892-dde8a53925b0
itgencmr118: The number of columns from a scalar SQL statement must be exactly one instead of 5.

Teven kan ik niet vinden hoe ik deze specifieke module (code XXBFXIF2CSV) kan aanroepen van buiten af, wat zou de URL moeten zijn?

Advies is om ondersteuning van een SQL consultant te vragen met stukje uitleg.

Solved. Dacht dat alleen de SQL query voldoende was maar een module heeft meer nodig. En zoeken op het forum leerde mij hoe de URL te krijgen naar een specifieke module.

1 like