Naar hoofdinhoud gaan

Een oplossingsscript schrijven

Doel​

Een stuk logica één keer schrijven — "valt deze onkostenpost boven de goedkeuringslimiet", "maak een kenmerk op zoals deze klant het schrijft" — en het aanroepen vanuit elke bedrijfsregel en opdracht die het nodig heeft, in plaats van dezelfde regels in elk ervan te plakken.

Vereisten​

  • Je bent aangemeld als maker, met een oplossing en een omgeving geselecteerd.

Stappen​

  1. Open je oplossing en kies Scripts.

  2. Selecteer Nieuw. De ontwerper opent met al een klein voorbeeld erin.

  3. Geef het een weergavenaam. Het modulepad vult zich in terwijl je typt — dat is de naam die andere scripts importeren, en die kan na het opslaan niet meer worden gewijzigd.

  4. Schrijf je hulpfunctie en exporteer haar:

    func isOverLimit(amount: int, limit: int): bool {
    return amount > limit;
    }

    export isOverLimit;
  5. Selecteer Opslaan.

Onder het naamvak toont de ontwerper de exacte regel om te kopiëren: import 'par_expense_helpers';

Het aanroepen vanuit een bedrijfsregel​

Je hoeft het modulepad niet te onthouden. Open in de ontwerper voor bedrijfsregels het deelvenster Oplossingsscripts rechts: dat toont elk script in de omgeving, en Importeren schrijft de regel voor je bovenaan je bedrijfsregel. Een script dat de regel al importeert, wordt gemarkeerd als Geïmporteerd in plaats van twee keer te worden aangeboden.

Heeft de omgeving nog geen scripts, dan zegt het deelvenster dat en biedt het Nieuw script aan, dat de scriptontwerper in een nieuw tabblad opent — je niet-opgeslagen regel blijft waar hij is.

De regel die het schrijft, is dezelfde die je zelf zou typen. Alles wat het script exporteert, is dan beschikbaar alsof je het daar zelf had geschreven:

import 'par_expense_helpers';

setVisible('par_approval', isOverLimit(getValue('par_amount'), 100));

Je kunt ook één naam importeren, als je liever expliciet bent over wat je gebruikt:

import isOverLimit from 'par_expense_helpers';

Dezelfde import werkt in het script van een opdracht. Een script hoort bij de oplossing, niet bij een tabel, dus een regel op Invoice kan een hulpfunctie aanroepen die voor Expense is geschreven.

export is niet optioneel​

Een script stelt alleen beschikbaar wat het exporteert. Een hulpfunctie die je vergeet te exporteren, is onzichtbaar voor alles wat het script importeert — daarom weigert de ontwerper een script op te slaan dat niets exporteert, en zegt hij dat ook. Die weigering is bewust: zonder haar zou het script zonder problemen worden opgeslagen en zou de fout ergens heel anders terechtkomen, als "function not found" in een regel waar je niet naar keek.

Je kunt meerdere namen uit één script exporteren:

export isOverLimit, formatReference;

Wat er meereist, en wat er gebeurt als het niet meereist​

Een script is een oplossingsonderdeel. Het wordt met zijn oplossing geëxporteerd en vóór de regels die het importeren geïnstalleerd, zodat een pakket altijd in een werkende volgorde aankomt.

Importeert een regel een script dat de omgeving niet heeft — omdat het is verwijderd, of omdat de oplossing die het leverde niet is geïmporteerd — dan mislukt de regel met de naam erbij, zowel in de editor terwijl je hem schrijft als tijdens het uitvoeren. Niets mislukt stilletjes.

Problemen oplossen​

"Script … exports nothing." Voeg een export-regel toe met de functies die je wilt delen.

"BS Lang script is invalid: line …" De broncode kan niet worden geparsed. De editor onderstreept het probleem en de lijst met problemen eronder noemt elk ervan; selecteer een rij om naar de regel te springen.

Een regel zegt dat mijn functie niet is gevonden. Drie dingen om te controleren, in deze volgorde: de regel heeft de import-regel; het modulepad erin komt exact overeen met dat van het script; en het script exporteert die functie met die naam. Het deelvenster Oplossingsscripts schrijft de eerste twee voor je.

Het deelvenster is leeg, maar ik weet dat er scripts zijn. De lijst is die van de omgeving, dus een script dat in een ander browsertabblad is opgeslagen, verschijnt nadat je de regel opnieuw opent.

Ik kan een script niet hernoemen. Klopt — het modulepad is wat elke importerende regel noemt, dus het hernoemen zou ze allemaal tegelijk en stilletjes breken. Maak een nieuw script en faseer het oude uit.

Gerelateerd​