In Akte nach Feld ablegen
Nach der Freigabe legt das Skript eine Eingangsrechnung in die Akte ihres Lieferanten, die es über die Lieferantennummer findet. Fehlt die Nummer, benachrichtigt es die Buchhaltung, damit sie die Rechnung von Hand ablegt. Das Feld Lieferantennummer legt der Workflow selbst an. Ohne Skript geht es mit einer Karte: In die Lieferantenakte ablegen findet die Akte über ein eindeutiges Schlüsselfeld und legt eine fehlende an.
Der Workflow
Abschnitt betitelt „Der Workflow“Der Workflow startet für jedes Dokument vom Typ incoming-invoice. Seine Datei workflow.yaml:
$schema: 'https://docs.acriva.de/schemas/workflow.schema.json'format: 1schemaVersion: 4sdk: '1.0.0'key: file-by-fieldname: In Akte nach Feld ablegentemplate: customtrigger: documentType: incoming-invoicefields: - key: vendorNumber kind: text labelDe: Lieferantennummer labelEn: Vendor number documentTypes: - incoming-invoicestart: approvesteps: - kind: humanTask name: approve label: Freigabe taskKind: approve assignees: - when: null assignee: kind: costCenterResponsible fallback: kind: role role: Buchhaltung options: excludeRequester: true excludeActorsOfSteps: [] pickFile: false next: file onRejected: rejected - kind: script name: file label: In die Lieferantenakte ablegen script: file.ts hook: onApproved inputs: - kind: field key: vendorNumber type: text - kind: field key: invoiceNumber type: text returns: [] exits: [] next: approved - kind: end name: approved label: Freigegeben outcome: approved - kind: end name: rejected label: Zurückgewiesen outcome: rejectedDas Skript file.ts
Abschnitt betitelt „Das Skript file.ts“Hook: onApproved · Eingaben: vendorNumber, invoiceNumber · Rückgaben: keine
import { defineScript } from '@acriva/workflow-sdk';
export default defineScript({ hook: 'onApproved', run(ctx) { const { vendorNumber, invoiceNumber } = ctx.document.fields; const number = vendorNumber?.trim(); if (!number) { ctx.notify({ to: [{ role: 'Buchhaltung' }], text: `Die freigegebene Rechnung ${invoiceNumber ?? 'ohne Nummer'} hat keine Lieferantennummer. Bitte legen Sie sie von Hand in die Akte des Lieferanten.`, }); return; } // Already in the vendor's Akte, for example filed by hand: nothing to do. if (ctx.document.files.some((file) => file.type === 'vendor' && file.number === number)) return; ctx.fileInto({ type: 'vendor', number }); },});Was es tut
Abschnitt betitelt „Was es tut“Ein Test führt jeden dieser Fälle in der Sandbox aus und vergleicht das Ergebnis.
Eine Rechnung, die schon in der Akte liegt
Abschnitt betitelt „Eine Rechnung, die schon in der Akte liegt“- Eingabe:
vendorNumber70012,invoiceNumberRE-2026-1034, Ergebnis der letzten AufgabeApproved - Ausgang: der Standard-Nachfolger
- Änderungen: keine
Eine Rechnung ohne Lieferantennummer
Abschnitt betitelt „Eine Rechnung ohne Lieferantennummer“- Eingabe:
vendorNumbernull,invoiceNumberRE-2026-1035, Ergebnis der letzten AufgabeApproved - Ausgang: der Standard-Nachfolger
- Änderungen: Benachrichtigung an die Rolle
Buchhaltung: „Die freigegebene Rechnung RE-2026-1035 hat keine Lieferantennummer. Bitte legen Sie sie von Hand in die Akte des Lieferanten.“
Eine Rechnung mit Lieferantennummer
Abschnitt betitelt „Eine Rechnung mit Lieferantennummer“- Eingabe:
vendorNumber70012,invoiceNumberRE-2026-1033, Ergebnis der letzten AufgabeApproved - Ausgang: der Standard-Nachfolger
- Änderungen: Ablage in die Akte
vendor70012