FileConnector (REST/JSON)
Profit Connector voor het uploaden en downloaden van bestanden.
Inhoud |
Bestand ophalen uit Profit
Je hebt de GUID en de originele bestandsnaam van de bijlage nodig, deze kun je ophalen met een GetConnector. Daarna roep je de FileConnector aan en haal je het bestand op.
Je kunt de FileConnector alleen gebruiken voor het ophalen van bestanden als de SubjectConnector in de app connector geactiveerd is.
Guid en bestandsnaam opvragen via GetConnector:
- Ga naar: Algemeen / Uitvoer / Beheer / GetConnector.
- Voeg een GetConnector toe op basis van de gegevensverzameling Bestanden bij dossier.
- De gegevensverzameling bevat standaard de velden Bijlage (GUID) en Naam (bestandsnaam).
Bestand ophalen met de connector:
- Roep de Profit REST Services aan.
- Aanroep:
<endpoint>/fileconnector/{GUID}/{filename}
Voorbeeld:
<endpoint>/fileconnector/F64BB8E942BBC5E94FC747904E19FE1B/Invoice3734.pdf
Let op:
Je vindt alle eindpoints voor connectoren op de centrale pagina URL's van REST Services.
De bestandsnaam moet de originele naam zijn die je uit Profit hebt opgehaald. Je mag dus niet zelf een naam verzinnen. Zie ook hieronder bij 'Spaties en speciale tekens'.
- Je slaat het bestand op op één van de volgende manieren:
- Base64-string
- Originele bestandsindeling met de originele bestandsnaam (Binary)
Error handling
HTTP 404: Als een bestand niet bestaat of je geen rechten hebt op een bestand krijg je een HTTP 404 File not found error. Controleer of het bestand bestaat. Als het bestand bestaat pas dan de autorisatie aan. De oorzaak hiervan zal zijn dat de gebruikersgroep geen rechten heeft op het gegevensfilter van de dossieritems. Zie voor meer informatie: Dossier autoriseren via gegevensfilters.
Spaties en speciale tekens:
Voor de aanroep op de webservice moeten vreemde tekens encoded (zogenaamd escape/escaping) worden op basis van de tabel op de pagina https://www.w3schools.com/tags/ref_urlencode.asp.
Bij vreemde tekens gecodeerd volgens de URL encoding tabel, vervang je het teken % door een underscore _
Voorbeeld:
Het & teken is in de ASCII-tabel %26
In de aanroep wordt dit: _26
Let op:
Uitzondering: de underscore in een bestands_naam vervang je door _5f.
Het bestand Filename_underscore.pdf wordt in de aanroep:
https://12345.rest.afas.online/ProfitRestServices/fileconnector/840C2D084F71330648EA2485657DB7AE/Filename_5funderscore.pdf
Extra voorbeelden:
- Bestandsnaam met & % tekens.pdf
https://12345.rest.afas.online/ProfitRestServices/fileconnector/8AE0F5394A3D7C25E207FBBF8A9C4DE2/Bestandsnaam%20met%20_26%20_25%20tekens.pdf
- Visual C# Object Programming (VCO) 06-12-2018.pdf wordt:
https://12345.rest.afas.online/ProfitRestServices/fileconnector/779AC137450599F32BB0E960C492ABF7/Visual%20C_23%20Object%20Programming%20_28VCO_29%2006-12-2018.pdf
- Visual Basic ++ Plusteken.pdf wordt:
https://12345.rest.afas.online/ProfitRestServices/fileconnector/D96C3F814F3C121A4117B8B0716B6CBE/Visual%20Basic%20_2B_2B%20Plusteken.pdf
Bestand uploaden naar Profit
Je kunt de FileConnector alleen gebruiken voor het uploaden van bestanden als de juiste UpdateConnector in de app connector geactiveerd is. Gebruik een geschikte UpdateConnector, zoals KnSubject.
Je kunt dit proces niet testen via AFAS Connect. Gebruik de onderstaande voorbeeldcode om je eigen toepassing te bouwen.
$posturl = 'https://12345.rest.afas.online/ProfitRestServices/fileconnector/KnSubject/IMG_20200706_173801.jpg'
#locatie bestand input
$FilePath = "C:\temp\IMG_20200706_173801.jpg"
#Load file
$fileBytes = [System.IO.File]::ReadAllBytes($FilePath);
#hash file
$fileEnc = [System.Text.Encoding]::GetEncoding('UTF-8').GetString($fileBytes);
#set boundary
$boundary = [System.Guid]::NewGuid().ToString();
#set linefeed as variable
$LF = "`r`n";
#Create content for request
$bodyLines = (
"--$boundary",
"Content-Disposition: form-data; name=`"file`"; filename=`"temp.txt`"",
"Content-Type: application/octet-stream$LF",
$fileEnc,
"--$boundary--$LF"
) -join $LF
#Set security requirements
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;
#Execute request
$Result = Invoke-RestMethod -Uri $posturl -Headers $Headers -Method Post -ContentType "multipart/form-data; boundary=`"$boundary`"" -Body $bodyLines