AFAS GetConnector geeft "Invalid Index Field"

De volgende error verscheen voor een AFAS Profit omgeving bij het inladen van een custom GetConnector in Data Replicator 20.0.119:

 -2147180996: General message: Invalid Index field.
The remote server returned an error: (500) Internal Server Error. 

Wat kan ik hier aan doen?

De “Invalid Index Field” is een melding die als JSON vanuit de AFAS REST API terugkomt in combinatie met een HTTP 500 status (Internal Server Error):

{"errorNumber":-2147180996,"externalMessage":"General message: Invalid Index field","profitLogReference":"15A73ACC4C1FCDF7970427A3E8F71AF9"}

Het lijkt er op dat AFAS vastgelopen is op dit onderdeel. Advies is om de applicatiebeheerder van de AFAS omgeving de definitie van de GetConnector te laten checken en anders een ticket bij AFAS in te dienen.

Je draait op 20.0.119; die versie ondersteunt AFAS Profit 15 en 16. Had je een oudere versie gehad dan zou advies zijn geweest om eerst te upgraden.

Voor het aanmaken van een reproductiescenario richting AFAS Support over dit probleem met de AFAS REST API kun je deze tips gebruiken.

Aanvulling Invalid Index Field

AFAS Profit verwacht velden met speciale tekens in de naam door te krijgen in het formaat “[‘NAAM’]” (zoals bijvoorbeeld een ‘.’).

AFAS Profit 15 verplichte sortering

Vanaf AFAS Profit 15 wordt geëist dat de data altijd gesorteerd opgehaald wordt omdat anders rijen kunnen verdwijnen of rijen dubbel verschijnen (zie Ontbrekende en dubbele rijen bij ophalen gegevens uit AFAS Profit met GetConnector) wordt automatisch een orderbyfieldids toegevoegd op elk AFAS API verzoek naar een getConnector.

Een query op een connector POWERBI_Budget leidt dan tot een call zoals:

https://99999.rest.afas.online/profitrestservices/connectors/POWERBI_Budget?take=5000&orderbyfieldids=Jaar,Periode,Administratie,Volgnummer_verbijzondering,Budgetscenario,Grootboekrekening,Kenmerk_rekening,Budget_sub-afdeling,Budget_afdeling,[‘Cat._result._rek’],[‘Cat._balans_rek.’],[‘Cat._toelichting_balans’]

die na URL-encoding een foutmelding in JSON geeft zoals:

{"errorNumber":-2147180996,"externalMessage":"General message: Invalid Index field","profitLogReference":"D2FC93B64455970E68A2839C6A0936A9"}

De errorcode -2147180996 zie je vaker bij ANTA errors (AFAS Next Technology Architecture) en kun je hexadecimaal lezen als 80049E3C.

Blijkbaar is invalid index field geen server error, maar een fout in het API request. De HTTP-errorcode 500 had dus eigenlijk moeten luiden HTTP-errorcode 402:

The HyperText Transfer Protocol (HTTP) 400 Bad Request response status code indicates that the server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).

maar mogelijkerwijs is dat technisch lastig haalbaar.

Oplossing

Het juiste antwoord komt wel terug als in het orderbyfieldsids-filter de kolomnamen met speciale tekens niet meer ingepakt worden met blokhaken zoals met:

https://99999.rest.afas.online/profitrestservices/connectors/POWERBI_Budget?take=5000&orderbyfieldids=Jaar,Periode,Administratie,Volgnummer_verbijzondering,Budgetscenario,Grootboekrekening,Kenmerk_rekening,Budget_sub-afdeling,Budget_afdeling,Cat._result._rek,Cat._balans_rek.,Cat._toelichting_balans

Een dergelijke aanpassing is verwerkt in de BETA 20.1.343 of later. Merk op dat gezien het ontbreken van AFAS documentatie aanpassingen of correcties hierop buiten de support vallen.

Algemeen advies is om het gebruik van karakters in kolomnamen en tabelnamen van getConnectoren sowieso te beperken tot a…z en 0…9.