Naar hoofdinhoud gaan

Een bestand naar opslag schrijven vanuit een script

Doel​

Laat een aangepaste API een bestand maken — een CSV-export, een JSON-bestand voor een ander systeem — en het ergens neerzetten waar een extern systeem het kan ophalen.

Waarom dit bestaat​

Het platform heeft drie plekken waar een bestand kan staan, en die zijn niet uitwisselbaar.

VoorVoorbeeld
WebresourcesBestanden die deel uitmaken van de applicatieEen logo, een stylesheet
RecordbestandenEen bestand dat bij één record hoortDe foto van een contactpersoon, een ondertekend contract
ObjectopslagBestanden die bij geen enkel record horenEen maandelijkse export, een bestand voor een integratie

Het bestand van een record is aan een record gekoppeld en reist ermee mee. Een export hoort bij niemands record — er is geen rij om hem aan te hangen — en daarvoor is objectopslag.

Voordat je begint​

Je hebt een bucketnaam nodig. Je hoeft de bucket niet te maken: de eerste schrijfactie maakt hem aan.

Bucketnamen bestaan uit kleine letters, cijfers en koppeltekens, 3–63 tekens. Ze worden gedeeld over alle tenants, net als bij S3, dus een gewone naam als exports kan al bezet zijn — zet er iets van jezelf voor, zoals par-exports hieronder.

Wat een script kan doen​

putFile(bucket, key, text)Schrijft een bestand. Antwoordt true, of false als het niet lukte
putFileAs(bucket, key, text, contentType)Hetzelfde, met de vermelding wat voor bestand het is
getFile(bucket, key)Leest het terug als tekst — de lege tekenreeks als het er niet is
fileExists(bucket, key)true of false
listFiles(bucket, prefix)De bestanden onder een voorvoegsel, elk met key, size, contentType en uploadedAt
deleteFile(bucket, key)Verwijdert er een

De sleutel is het pad van het bestand binnen de bucket — claims/2026-09.csv. Schuine strepen zijn gewoon deel van de naam, maar ze lezen als mappen in het opslagscherm, dus het loont om ermee te groeperen.

Stappen​

  1. Open je oplossing en kies Aangepaste API's, daarna Nieuw.

  2. Geef hem een route — claims/export/{period} — en kies Post.

  3. Bouw in het script het bestand op als tekst en schrijf het weg:

    var claims = runQuery({ entity: 'par_claim', select: ['par_name', 'par_amount'] });

    var csv: string = 'reference,amount\n';
    for (var i: int = 0; i < claims.length(); i++) {
    csv = csv + `${claims[i].par_name},${claims[i].par_amount}` + '\n';
    }

    putFileAs('par-exports', 'claims/' + getInput('period') + '.csv', csv, 'text/csv');
  4. Kies Opslaan en roep hem aan.

Drie dingen waar mensen over struikelen​

  • length() heeft zijn haakjes nodig. claims.length is geen fout — het is niets, dus een lus die daarop controleert, wordt nooit uitgevoerd en je export bestaat uit een kopregel en geen rijen. Dit is de enige fout hier die zichzelf niet aankondigt.
  • Je kunt geen getal bij een tekenreeks optellen. 'Total: ' + amount wordt geweigerd. Zet het getal in plaats daarvan in een sjabloon met backticks — `Total: ${amount}` — dat is de enige manier om er tekst van te maken.
  • Zeg wat voor bestand het is. putFile slaat het op als platte tekst, en een browser toont platte tekst in het tabblad in plaats van het op te slaan. Gebruik putFileAs met text/csv, application/json of wat het echt is.

Controleer of het werkte​

Ga naar Beheer → Opslag, open de bucket, en het bestand staat er met zijn grootte en type. Download het en controleer de inhoud.

Waar dit niet voor is​

  • Grote binaire bestanden. Het bestand van een script is tekst die het heeft opgebouwd. Afbeeldingen, pdf's en archieven worden door het platform zelf afgehandeld, dat ze streamt.
  • Een bestand dat bij een record hoort. Zet in plaats daarvan een kolom van het type Bestand of Afbeelding op de tabel — die wordt geserveerd onder de eigen machtigingen van het record, en als je het record verwijdert, gaat het bestand mee.
  • Iemand een link geven. Deze functies geven je script de tekst; ze maken geen URL aan. Een link die werkt zonder aanmelden, is een sleutel die iedereen kan doorgeven, dus dat is een bewuste stap elders, niet iets wat een script terloops doet.

Problemen oplossen​

"Bucket was not found." Je leest of somt een bucket op die nog niet bestaat — alleen schrijven maakt er een aan. Schrijf eerst, of controleer de spelling.

Er staat niets in het bestand behalve de kopregel. length zonder de haakjes. Zie hierboven.

"Only numbers or strings are allowed in this expression." Je hebt een getal bij een tekenreeks opgeteld. Gebruik een sjabloon met backticks.

"This run has no caller." Het script is een asynchrone plug-instap. Die draaien nadat de aanvraag die ze in de wachtrij zette, is afgerond, dus er is niemand namens wie ze kunnen handelen. Gebruik een synchrone stap, of een aangepaste API.

Zie ook​

  • Een aangepaste API publiceren
  • De voorbeeldoplossing custom-api-object-storage-export, die deze pagina is als iets wat je kunt importeren en uitvoeren.