Aus einem Skript eine Datei in den Speicher schreiben
Ziel
Eine benutzerdefinierte API eine Datei erzeugen lassen – einen CSV-Export, eine JSON-Übergabe für ein anderes System – und sie dort ablegen, wo ein externes System sie abholen kann.
Warum es das gibt
Die Plattform kennt drei Orte, an denen eine Datei liegen kann, und sie sind nicht austauschbar.
| Für | Beispiel | |
|---|---|---|
| Webressourcen | Dateien, die Teil der Anwendung sind | Ein Logo, ein Stylesheet |
| Datensatzdateien | Eine Datei, die zu einem Datensatz gehört | Das Foto eines Kontakts, ein unterschriebener Vertrag |
| Objektspeicher | Dateien, die zu keinem Datensatz gehören | Ein Monatsexport, eine Integrationsübergabe |
Die Datei eines Datensatzes hängt an einem Datensatz und reist mit ihm. Ein Export gehört zu keinem Datensatz – es gibt keine Zeile, an die er sich hängen ließe –, und genau dafür ist der Objektspeicher da.
Bevor Sie beginnen
Sie brauchen einen Bucket-Namen. Sie müssen den Bucket nicht anlegen: Der erste Schreibvorgang legt ihn an.
Bucket-Namen bestehen aus Kleinbuchstaben, Ziffern und Bindestrichen, 3–63 Zeichen. Sie werden, wie
bei S3, von allen Mandanten gemeinsam genutzt; ein schlichter Name wie exports ist daher womöglich
schon vergeben – setzen Sie etwas Eigenes davor, wie par-exports unten.
Was ein Skript tun kann
putFile(bucket, key, text) | Schreibt eine Datei. Antwortet true, oder false, wenn es nicht möglich war |
putFileAs(bucket, key, text, contentType) | Dasselbe, mit Angabe der Dateiart |
getFile(bucket, key) | Liest sie als Text zurück – die leere Zeichenfolge, wenn es keine gibt |
fileExists(bucket, key) | true oder false |
listFiles(bucket, prefix) | Die Dateien unter einem Präfix, jeweils mit key, size, contentType und uploadedAt |
deleteFile(bucket, key) | Entfernt eine Datei |
Der Schlüssel ist der Pfad der Datei im Bucket – claims/2026-09.csv. Schrägstriche darin sind
einfach Teil des Namens, werden im Speicher-Bildschirm aber als Ordner angezeigt; eine Gruppierung
danach lohnt sich also.
Schritte
-
Öffnen Sie Ihre Lösung, wählen Sie Benutzerdefinierte APIs und dann Neu aus.
-
Geben Sie ihr eine Route –
claims/export/{period}– und wählen Sie Post. -
Bauen Sie die Datei im Skript als Text auf und schreiben Sie sie:
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'); -
Wählen Sie Speichern aus und rufen Sie die API auf.
Drei typische Stolperfallen
length()braucht seine Klammern.claims.lengthist kein Fehler – es ist nichts, sodass eine davon abhängige Schleife nie läuft und Ihr Export aus einer Kopfzeile ohne Zeilen besteht. Das ist der eine Fehler hier, der sich nicht selbst meldet.- Sie können keine Zahl zu einer Zeichenfolge addieren.
'Total: ' + amountwird abgelehnt. Setzen Sie die Zahl stattdessen in eine Backtick-Vorlage –`Total: ${amount}`–, der einzige Weg, eine Zahl in Text umzuwandeln. - Geben Sie an, welche Art Datei es ist.
putFilespeichert sie als reinen Text, und ein Browser zeigt reinen Text im Tab an, statt ihn zu speichern. Verwenden SieputFileAsmittext/csv,application/jsonoder was es tatsächlich ist.
Prüfen, ob es funktioniert hat
Wechseln Sie zu Administration → Speicher, öffnen Sie den Bucket, und die Datei ist dort mit ihrer Größe und ihrem Typ. Laden Sie sie herunter und prüfen Sie den Inhalt.
Wofür das nicht gedacht ist
- Große Binärdateien. Die Datei eines Skripts ist Text, den es aufgebaut hat. Bilder, PDFs und Archive verarbeitet die Plattform selbst, die sie streamt.
- Eine Datei, die zu einem Datensatz gehört. Geben Sie der Tabelle stattdessen eine Datei- oder Bildspalte – sie wird mit den eigenen Berechtigungen des Datensatzes ausgeliefert, und das Löschen des Datensatzes nimmt die Datei mit.
- Jemandem einen Link geben. Diese Funktionen geben Ihrem Skript den Text; sie erzeugen keine URL. Ein Link, der ohne Anmeldung funktioniert, ist ein Schlüssel, den jeder weitergeben kann, daher ist er ein bewusster Schritt an anderer Stelle und nichts, was ein Skript nebenbei tut.
Fehlerbehebung
„Bucket wurde nicht gefunden.“ Sie lesen oder listen einen Bucket, der noch nicht existiert – nur Schreiben legt einen an. Schreiben Sie zuerst oder prüfen Sie die Schreibweise.
In der Datei steht nur die Kopfzeile. length ohne Klammern. Siehe oben.
„In diesem Ausdruck sind nur Zahlen oder Zeichenfolgen erlaubt.“ Sie haben eine Zahl zu einer Zeichenfolge addiert. Verwenden Sie eine Backtick-Vorlage.
„Dieser Lauf hat keinen Aufrufer.“ Das Skript ist ein asynchroner Plug-in-Schritt. Diese laufen, nachdem die Anfrage, die sie eingereiht hat, abgeschlossen ist; es gibt also niemanden, als der sie handeln könnten. Verwenden Sie einen synchronen Schritt oder eine benutzerdefinierte API.
Siehe auch
- Eine benutzerdefinierte API veröffentlichen
- Die Beispiellösung
custom-api-object-storage-export, die diese Seite als etwas enthält, das Sie importieren und ausführen können.