Feld berechnen und deklarieren
Der Workflow legt für Eingangsrechnungen das Feld Skontobetrag an, und sein Skript berechnet es: 2 % des Bruttobetrags, auf den Cent gerundet. So ergänzen Sie mit einem programmierten Workflow ein Feld, das Ihre Dokumenttypen noch nicht haben, und füllen es zugleich.
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: computed-fieldname: Feld berechnen und deklarierentemplate: customtrigger: documentType: incoming-invoicefields: - key: discountAmount kind: money labelDe: Skontobetrag labelEn: Discount amount documentTypes: - incoming-invoicestart: computesteps: - kind: script name: compute label: Skontobetrag berechnen script: compute.ts hook: onDocumentArrived inputs: - kind: field key: totalGross type: money returns: [] exits: [] next: approve - 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: approved onRejected: rejected - kind: end name: approved label: Freigegeben outcome: approved - kind: end name: rejected label: Zurückgewiesen outcome: rejectedDas Skript compute.ts
Abschnitt betitelt „Das Skript compute.ts“Hook: onDocumentArrived · Eingaben: totalGross · Rückgaben: keine
import { defineScript, money } from '@acriva/workflow-sdk';
/** The early-payment discount, as a share of the gross total. */const DISCOUNT_RATE = 0.02;
export default defineScript({ hook: 'onDocumentArrived', run(ctx) { const total = ctx.document.fields.totalGross; // Without a gross total there is nothing to compute, and the field stays empty. if (total == null) return; // money.round rounds half away from zero to cents: 1.995 becomes 2.00. const discount = money.round(total * DISCOUNT_RATE); ctx.log('Discount', money.format(discount)); ctx.setField('discountAmount', discount); },});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 über 1.249,50 €
Abschnitt betitelt „Eine Rechnung über 1.249,50 €“- Eingabe:
totalGross1249.5 - Ausgang: der Standard-Nachfolger
- Änderungen: Feld
discountAmount=24.99
Eine Rechnung ohne Bruttobetrag
Abschnitt betitelt „Eine Rechnung ohne Bruttobetrag“- Eingabe:
totalGrossnull - Ausgang: der Standard-Nachfolger
- Änderungen: keine
Ein Betrag, der aufgerundet wird
Abschnitt betitelt „Ein Betrag, der aufgerundet wird“- Eingabe:
totalGross99.75 - Ausgang: der Standard-Nachfolger
- Änderungen: Feld
discountAmount=2