...
Vanuit het bouwblok waarmee je data op kan halen zijn twee onderdelen beschikbaar waar informatie uitgehaald kan worden. Dit kan bijvoorbeeld een bepaalde response header zijn, maar ook een property uit de response body.
Deze twee onderdelen zijn:
response → Type is System.Net.WebResponse (https://learn.microsoft.com/en-us/dotnet/api/system.net.webresponse?view=net-8.0)HttpWebResponse
responseResult → Type is dynamic
In de invoervelden van het type waarde of berekening kunnen deze onderdelen vervolgens gebruikt worden (in het berekeningen gedeelte). Voorbeelden hiervan zijn response.Headers["Content-Type"]
(hierbij wordt een specifieke header uit de response uitgelezen) en responseResult.total_items
(dit is de property ‘total_items’ in de response body).
Info | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Om op basis van een HTTP response statuscode (https://developer.mozilla.org/en-US/docs/Web/HTTP/Status ) te bepalen of er nog een iteratie plaats moet vinden kan de volgende check gebruikt worden:
Vervang hierin de 206 voor de statuscode waar je op wil controleren Of:
Of:
. |
Voorbeeld Mailchimp data ophalen in delen.
...
Het resultaat van de twee bovenstaande berekeningen is dat de query parameter ‘offset’ steeds opgehoogd wordt, totdat het aantal opgehaalde regels gelijk is aan total_items. Per API zal deze property mogelijk anders heten. Zorg dat je op regel 6 (responseResult.total_items
) de waarde aanpast naar de property in de response die het aantal regels aangeeft.
Voorbeeld Microsoft Graph data ophalen in delen
De API voor Microsoft Graph is gebaseerd op oData. Volgens deze specificatie maken de gebruik van het veld nextLink welke door de API wordt teruggegeven. Bijvoorbeeld, een GET aanroep naar https://graph.microsoft.com/v1.0/users?$select=id levert het volgende resultaat op:
Code Block | ||
---|---|---|
| ||
{ "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(id,accountEnabled,userPrincipalName,displayName,givenName,surname,jobTitle,department,employeeId,country,mailNickname,officeLocation,employeeHireDate)", "@odata.nextLink": "https://graph.microsoft.com/v1.0/users?$select=id&$skiptoken=XXNwdAoAAQAAAAAAAAAAFAAAAOzGH40ct9VKhf-XVbvCR2sBAAAAAAAAAAAAAAAAAAAXMS4yLjg0MC4xMTM1NTYuMS40LjIzMzEGAAAAAAABss7PEK4rL02gO0454kK0NwF0AAAAAQIAAAA", "value": [ { "id": "xxb637c3-d48a-4892-8826-5e9560b17ed7", "accountEnabled": false, "userPrincipalName": "x", "displayName": "y", "givenName": null, "surname": null, "jobTitle": null, "department": null, "employeeId": null, "country": null, "mailNickname": "z", "officeLocation": null, "employeeHireDate": null } ] } |
Dit resultaat geeft de nextLink terug: https://graph.microsoft.com/v1.0/users?$select=id&$skiptoken=XXNwdAoAAQAAAAAAAAAAFAAAAOzGH40ct9VKhf-XVbvCR2sBAAAAAAAAAAAAAAAAAAAXMS4yLjg0MC4xMTM1NTYuMS40LjIzMzEGAAAAAAABss7PEK4rL02gO0454kK0NwF0AAAAAQIAAAA . Deze URL verwijst naar de volgende pagina met resultaten.
In U-Turn kunnen we niet exact deze URL overnemen in het URL veld. De query parameter “$select“ zou dan namelijk voor een tweede keer toegevoegd gaan worden. We kunnen wel de skiptoken eruit nemen en deze aan de query parameters toevoegen.
...
In de query parameters voegen we toe:
Code Block | ||
---|---|---|
| ||
if 'skiptoken' not in locals():
skiptoken = ''
skiptoken |
...
En in het script voor het ophalen in delen:
Code Block | ||
---|---|---|
| ||
def get_query_parameter(url, parameter_name):
query_start = url.find('?')
if query_start == -1:
return None
query_string = url[query_start + 1:]
parameters = query_string.split('&')
for param in parameters:
key_value = param.split('=')
if len(key_value) == 2 and key_value[0] == parameter_name:
return key_value[1]
return None
doPage = False
nextLink = str(responseResult['@odata.nextLink'])
skiptoken = ''
if nextLink != None and nextLink!='' :
if 'https://graph.microsoft.com/v1.0/users' in nextLink:
skiptoken = get_query_parameter(nextLink, '$skiptoken')
if skiptoken != None and skiptoken!='' :
doPage = True
doPage |
Voorbeeld Exact Online data ophalen in delen
De API voor Exact Online is gebaseerd op oData 2.0. ExactOnline maakt gebruik van het veld __next welke door de API wordt teruggegeven.
In de query parameters voegen we toe:
Code Block | ||
---|---|---|
| ||
if 'next_url' not in locals():
next_url = "/" + Exact_Online_Division + "/crm/Accounts?$inlinecount=allpages&$select=ID,Code,Name&$filter=Status+eq+'C'+and+IsSales+eq+true"
else:
# Vervang de url uit de applicatie hier anders staat dit dubbel
next_url = str(next_url)
next_url = next_url.replace('https://start.exactonline.nl/api/v1', '')
next_url |
En in het script voor het ophalen in delen:
Code Block | ||
---|---|---|
| ||
next_url = responseResult.d.__next
count_products = responseResult.d.__count
if 'count' not in locals():
if count_products != None:
count = int(count_products)
else:
count = 0
resultIteration = False
if next_url != None:
pagesize = 60 (Exact Online) count = count - 60
if count < 0:
resultIteration = False
else:
resultIteration = True
resultIteration |