Zum Inhalt springen

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.

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.

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'.

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.

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.

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.

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.

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.

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.

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.

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.

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)).

‘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.

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.

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.

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.

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'.

Diese Variable wird nie verwendet. Warnung.

Entfernen Sie die Variable, oder beginnen Sie ihren Namen mit _, wenn sie bleiben soll.

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.

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.

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.

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.

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.

  • Type 'string' is not assignable to type 'Money' (oder number): Ein Betrag ist eine Zahl, kein Text. Lesen Sie einen Text mit money.parse('1.249,50 €'), das null zurü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 … bei addTag, fileInto oder notify: 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 Hook beforeApproval, 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 mit ctx.today(), und rechnen Sie mit date.addDays und date.daysBetween.

Ü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.

  • 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.