Skripte: Fehler beheben
Der Editor und die Prüfung beim Veröffentlichen melden jedes Problem eines Skripts mit einem Code von ACR-S001 an. Mehr erfahren an einer Markierung im Editor führt zum Eintrag des Codes auf dieser Seite. Ein Fehler verhindert das Veröffentlichen, eine Warnung nicht.
Die Codes der Prüfung
Abschnitt betitelt „Die Codes der Prüfung“ACR-S001
Abschnitt betitelt „ACR-S001“Das Skript lässt sich nicht lesen: Prüfen Sie die Syntax an dieser Stelle. Fehler.
Der Code ist kein gültiges TypeScript, etwa wegen einer fehlenden Klammer oder eines Anführungszeichens, das nicht geschlossen wird. Die Meldung nennt die Stelle und die Beschreibung von TypeScript. Oft liegt die Ursache eine Zeile davor.
ACR-S002
Abschnitt betitelt „ACR-S002“Das Skript muss defineScript(…) als Standardexport exportieren. Fehler.
Jede Skriptdatei exportiert genau ein defineScript(…) mit export default. Schreiben Sie export default defineScript({ hook: …, run(ctx) { … } }); und importieren Sie defineScript aus '@acriva/workflow-sdk'.
ACR-S003
Abschnitt betitelt „ACR-S003“Typfehler: Der Wert passt nicht zu dem Typ, den das SDK oder die Typen des Arbeitsbereichs hier erwarten. Fehler.
Die Meldung von TypeScript dahinter sagt, was nicht passt. Die häufigsten Fälle stehen unter Häufige Typfehler. Auch // @ts-nocheck ist dieser Fehler, weil es die Prüfung des ganzen Skripts abschalten würde.
ACR-S004
Abschnitt betitelt „ACR-S004“Ein Skript darf nur ‘@acriva/workflow-sdk’ importieren. Fehler.
Ein Skript importiert nichts außer dem SDK, auch keine andere Skriptdatei und keine Bibliothek. Auch /// <reference …> ist nicht erlaubt. Was Sie mehrfach brauchen, schreiben Sie als Funktion in dieselbe Datei.
ACR-S005
Abschnitt betitelt „ACR-S005“Der Hook im Code ist nicht der Hook des Schritts. Fehler.
hook in defineScript muss der Hook sein, den der Skript-Schritt im Designer nennt. Gleichen Sie beides an.
ACR-S006
Abschnitt betitelt „ACR-S006“Dieser Rückgabewert ist am Schritt nicht deklariert oder hat einen anderen Typ. Fehler.
Ein Skript gibt nur die Rückgaben zurück, die sein Schritt deklariert, mit deren Typ. Deklarieren Sie die Rückgabe am Schritt, oder passen Sie outputs im Code an den Schritt an.
ACR-S007
Abschnitt betitelt „ACR-S007“Dieser Hook erlaubt diese Änderung nicht. Ein Skript vor einer Freigabe liest nur und darf einen Hinweis hinzufügen. Fehler.
An beforeApproval darf ein Skript nur ctx.hint aufrufen; setField, addTag, fileInto, notify, branch und result gibt es dort nicht. Welcher Hook was erlaubt, steht unter Hooks.
ACR-S008
Abschnitt betitelt „ACR-S008“Dieser Wert gehört nicht zu den deklarierten Werten der Verzweigung, kein Ausgang nimmt ihn. Fehler.
ctx.branch nimmt nur einen der Werte der festen Auswahl, die der Schritt als Ausgänge hat. Prüfen Sie die Schreibweise, oder ergänzen Sie den Wert am Schritt.
ACR-S009
Abschnitt betitelt „ACR-S009“Dieses Feld ist nicht als Eingabe des Schritts deklariert. Fehler.
Ein Skript liest nur die Felder, die sein Schritt als Eingabe nennt. Fügen Sie das Feld den Eingaben des Schritts hinzu.
ACR-S010
Abschnitt betitelt „ACR-S010“Ein Skript kann dieses Feld nicht setzen: Es ist nicht deklariert, oder Finanzen liest es für eine Rechnung. Fehler.
Ein Skript setzt nur Felder des Dokumenttyps, die es setzen darf. Die Felder, die Finanzen für eine Eingangsrechnung liest (etwa Beträge und Lieferant), setzt kein Skript. Nach einer Freigabe setzt es nur ein leeres Feld, das der Workflow deklariert.
ACR-S011
Abschnitt betitelt „ACR-S011“Diese Schleife hat keine erkennbare Grenze. Ein Skript endet, wenn es seine Laufzeit verbraucht hat. Warnung.
Die Warnung kommt bei while (true) und jeder while-Schleife mit einer festen Bedingung, bei jeder do … while-Schleife und bei einer for-Schleife ohne Bedingung oder ohne Schritt: Sie können ewig laufen. Ein Skript, das seine Rechenzeit verbraucht, scheitert mit limit-engine-time. Geben Sie der Schleife eine feste Grenze, oder laufen Sie über eine Liste (for (const x of liste)).
ACR-S012
Abschnitt betitelt „ACR-S012“‘fetch’ ist in Skripten nicht erlaubt. Nutzen Sie eine Datenquelle (ctx.sources). Fehler.
Skripte haben kein Netzwerk. Externe Daten liest ein Skript über eine Datenquelle, die Ihr Arbeitsbereich eingerichtet hat: await ctx.sources.get('erp', { query: { … } }). Die Schnellkorrektur Datenquelle verwenden markiert den Aufruf, den Sie durch ctx.sources.get ersetzen.
ACR-S013
Abschnitt betitelt „ACR-S013“Skripte haben keinen Netzwerkzugriff. Nutzen Sie eine Datenquelle (ctx.sources). Fehler.
Das gilt für XMLHttpRequest, WebSocket und jeden anderen Weg ins Netzwerk. Lesen Sie externe Daten über eine Datenquelle wie unter ACR-S012.
ACR-S014
Abschnitt betitelt „ACR-S014“Skripte können zur Laufzeit keinen Code erzeugen (eval, Function). Fehler.
eval, new Function(…) und ähnliche Wege, Code aus Text zu erzeugen, gibt es in Skripten nicht. Schreiben Sie den Code direkt.
ACR-S015
Abschnitt betitelt „ACR-S015“Skripte haben keine Timer. Ein Workflow wartet mit einem Zeitgeber-Schritt. Fehler.
setTimeout, setInterval und ähnliche gibt es nicht. Soll der Workflow warten, setzen Sie einen Schritt Zeitgeber davor oder dahinter; ein Skript am Hook onTimer läuft nach einer Frist.
ACR-S016
Abschnitt betitelt „ACR-S016“Skripte können keine Module laden (require, import()). Importieren Sie aus ‘@acriva/workflow-sdk’. Fehler.
require(…) und import(…) laden nichts. Importieren Sie oben in der Datei aus '@acriva/workflow-sdk'.
ACR-S017
Abschnitt betitelt „ACR-S017“Diese Variable wird nie verwendet. Warnung.
Entfernen Sie die Variable, oder beginnen Sie ihren Namen mit _, wenn sie bleiben soll.
ACR-S018
Abschnitt betitelt „ACR-S018“Das Skript ist größer als 64 KB. Fehler.
Ein Skript hat höchstens 64 KB. Teilen Sie die Arbeit auf mehrere Skript-Schritte auf, oder legen Sie große feste Listen in eine Datentabelle.
ACR-S019
Abschnitt betitelt „ACR-S019“Diese SDK-Version wird nicht unterstützt. Fehler.
Das Skript nennt eine Version des SDK, die diese Version von Acriva nicht kennt. Speichern Sie das Skript mit der aktuellen SDK-Version, die der Editor anzeigt.
ACR-S020
Abschnitt betitelt „ACR-S020“Diese Datenquelle ist nicht als Eingabe des Schritts deklariert. Fehler.
Ein Skript ruft nur die Datenquellen auf, die sein Schritt als Eingabe nennt. Fügen Sie die Datenquelle den Eingaben des Schritts hinzu.
ACR-S021
Abschnitt betitelt „ACR-S021“Diese Datentabelle ist nicht als Eingabe des Schritts deklariert. Fehler.
Ein Skript liest nur die Datentabellen, die sein Schritt als Eingabe nennt. Fügen Sie die Datentabelle den Eingaben des Schritts hinzu. Ein Lauf, der eine nicht deklarierte Datentabelle liest, scheitert mit table-not-declared.
ACR-S022
Abschnitt betitelt „ACR-S022“Die Prüfung konnte nicht abgeschlossen werden, weil sie länger als 10 Sekunden dauerte oder nicht genug Speicher hatte. Vereinfachen Sie die Typen des Skripts und prüfen Sie es erneut. Fehler.
Die Prüfung eines Skripts hat 10 Sekunden. Sehr verschachtelte oder rekursive Typen können länger brauchen. Ersetzen Sie selbst geschriebene komplizierte Typen durch einfachere, und speichern Sie das Skript erneut.
Häufige Typfehler
Abschnitt betitelt „Häufige Typfehler“Type 'string' is not assignable to type 'Money'(odernumber): Ein Betrag ist eine Zahl, kein Text. Lesen Sie einen Text mitmoney.parse('1.249,50 €'), dasnullzurückgibt, wenn der Text kein Betrag ist.Property '…' does not exist on type 'Readonly<DocumentFields>': Das Feld gibt es nicht, oder der Schritt nennt es nicht als Eingabe. Prüfen Sie die Schreibweise mit der Vervollständigung, und fügen Sie das Feld den Eingaben hinzu.'…' is possibly 'null': Ein Feld, das nicht Pflicht ist, kann leer sein. Prüfen Sie es vorher:const betrag = ctx.document.fields.bruttobetrag; if (betrag == null) return;.Argument of type '"…"' is not assignable to parameter of type …beiaddTag,fileIntoodernotify: Das Schlagwort, den Akten-Typ oder die Rolle gibt es im Arbeitsbereich nicht. Die Vervollständigung zeigt, welche es gibt.Property 'setField' does not exist on type 'ScriptContext': Das Skript steht am HookbeforeApproval, der nur liest (siehe ACR-S007).- Ein Tag mit einem Zeitpunkt verglichen: Felder vom Typ Datum sind Tage (
'2026-10-14'),ctx.now()ist ein Zeitpunkt. Vergleichen Sie Tage mitctx.today(), und rechnen Sie mitdate.addDaysunddate.daysBetween.
Grenzen überschritten
Abschnitt betitelt „Grenzen überschritten“Überschreitet ein Skript eine Grenze, oder scheitert es auf andere Weise, scheitert sein Lauf: Acriva wendet seine Änderungen nicht an (lehnt es eine einzelne Änderung ab, bleiben die davor angewendeten), der Workflow geht zum Ausgang für Fehler des Schritts oder, ohne einen, zum Standard-Nachfolger, und der Lauf zeigt seinen Code. Der Testlauf zeigt denselben Code, ohne etwas zu ändern.
| Code | Bedeutung | Was hilft |
|---|---|---|
script-exception |
Das Skript hat eine Ausnahme geworfen; die Meldung des Skripts und die Stelle stehen dabei. | Fangen Sie den Fall ab, etwa ein leeres Feld. |
script-syntax |
Der Code lässt sich nicht ausführen. | Prüfen Sie das Skript im Editor; die Prüfung nennt die Stelle. |
script-import |
Das Skript hat versucht, ein Modul zu laden. | Siehe ACR-S016. |
script-never-settled |
run hat weder etwas zurückgegeben noch eine Ausnahme geworfen, etwa ein Promise, das nie fertig wird. |
Geben Sie aus run zurück oder warten Sie mit await nur auf ctx.sources und ctx.tables. |
limit-engine-time |
Mehr als 2 Sekunden Rechenzeit. | Begrenzen Sie Schleifen (ACR-S011), und rechnen Sie Großes nicht im Skript. |
limit-wall-clock |
Der Lauf hat insgesamt mehr als 45 Sekunden gedauert. | Rufen Sie weniger oder schnellere Datenquellen auf. |
limit-memory |
Mehr als 64 MB Speicher. | Halten Sie keine großen Listen oder Texte im Speicher. |
limit-statements, limit-recursion |
Zu viele Anweisungen oder zu tiefe Rekursion. | Schreiben Sie eine Rekursion als Schleife. |
limit-regex |
Ein regulärer Ausdruck brauchte länger als 250 Millisekunden. | Vereinfachen Sie den Ausdruck, etwa ohne verschachtelte Wiederholungen wie (a+)+. |
limit-result, limit-log |
Die Rückgaben und Änderungen sind größer als 256 KB, oder die Konsole hat mehr als 1.000 Zeilen oder 64 KB. | Schreiben Sie weniger mit ctx.log, und geben Sie weniger zurück. |
limit-table-lookups |
Mehr als 50 Abfragen an Datentabellen. | Fragen Sie mit ctx.tables.query mehrere Zeilen auf einmal ab. |
table-not-declared |
Eine Datentabelle, die der Schritt nicht als Eingabe nennt. | Siehe ACR-S021. |
effect-refused |
Acriva hat eine Änderung abgelehnt: ein Wert, der nicht zum Feld passt, ein nicht deklarierter Ausgang, eine überschrittene Größe. | Prüfen Sie die Werte, die das Skript setzt, gegen die Felder, und die Ausgänge gegen den Schritt. |
reference-unresolved |
Ein Feld, ein Schlagwort, eine Akte, ein Mitglied oder eine Rolle, die das Skript nennt, gibt es nicht mehr. | Passen Sie das Skript an, und veröffentlichen Sie neu. |
limit-concurrency |
Die 20 gleichzeitigen Läufe Ihres Arbeitsbereichs waren die ganze Zeit belegt. | Der Schritt geht wie bei jedem gescheiterten Lauf weiter; vermeiden Sie viele lange Läufe gleichzeitig, etwa mit langsamen Datenquellen. |
runner-lost, runner-unreachable |
Die Sandbox ist während des Laufs abgestürzt oder war nicht erreichbar. | Meist ein vorübergehendes Problem; prüfen Sie das Skript auf zu viel Speicher oder Rechenzeit. |
quarantined |
Das Skript hat die Sandbox dreimal zum Absturz gebracht und ist für Ihren Arbeitsbereich gesperrt. | Beheben Sie die Ursache, und veröffentlichen Sie eine neue Version. |
sdk-version-unsupported |
Die Sandbox kennt die SDK-Version des Skripts nicht. | Siehe ACR-S019. |
Eine Datenquelle, die nicht antwortet oder ihr Limit erreicht, beendet den Lauf nicht: ctx.sources.get gibt dann { ok: false, error } zurück, und das Skript entscheidet, was es tut.
Probleme beim Veröffentlichen
Abschnitt betitelt „Probleme beim Veröffentlichen“- Ein Skript hat einen Fehler. Die App nennt jedes Skript mit seinen Meldungen; beheben Sie sie im Editor und veröffentlichen Sie erneut.
- Ein Skript-Schritt nennt eine Datei, die der Entwurf nicht hat. Legen Sie das Skript an, oder wählen Sie am Schritt eine andere Datei.
- Die Skripte verwenden verschiedene SDK-Versionen. Alle Skripte einer Version verwenden eine SDK-Version. Speichern Sie jedes Skript mit derselben SDK-Version.
- Die Prüfung ist gerade nicht erreichbar. Acriva veröffentlicht nie ein Skript ohne Prüfung. Versuchen Sie es nach einigen Minuten erneut.
- Zu viele Prüfungen. Eine Person kann 30 Prüfungen in der Minute anstoßen, Speichern und Veröffentlichen eingeschlossen. Warten Sie kurz.