Hvad er Rule Engine?
Rule Engine giver dig mulighed for at opsætte JavaScript-regler der automatisk kører, når bestemte hændelser sker i systemet – f.eks. når en ny ordre modtages, eller når et produkt importeres. Reglerne skrives direkte i en editor (samme editor som VS Code) med fuld autokomplettering og fejlkontrol.
Kun én regel pr. type kan være aktiv ad gangen. Når du aktiverer en regel, deaktiveres andre regler af samme type automatisk.
Tilgængelige regeltyper
| Regeltype | Trigger | Beskrivelse | Returværdi |
|---|---|---|---|
| Subsite Assignment | Ny ordre modtages | Tildel en subsite til ordren baseret på ordredata | number (subsite ID) |
| Order Modification | Ny ordre modtages | Modificer ordrefelter (adresser, noter, valuta, fragt, mm.) | Order (det modificerede ordre-objekt) |
| Sticker Assignment | Ny ordre modtages | Tildel stickers til ordren | string eller string[] (sticker identifiers) |
| Return Shipment Provider | Returlabel oprettes | Vælg fragtleverandør til returlabels | string (shipper identifier) |
| Auto Print Choose | Autoprint udløses | Vælg printer eller printstation for autoprint | { printStationId?: number, printerId?: string } |
| Product Import Modify | Produkt importeres | Modificer produktfelter under import | Product (det modificerede produkt-objekt) |
| Product Import Filter | Produkt importeres | Filtrer produkter fra under import | boolean (true = importer, false = spring over) |
Sådan opretter du en regel
- Gå til Rule Engine i menuen (kræver Rule Engine-rettighed)
- Klik Opret regel
- Udfyld:
- Navn – et beskrivende navn (f.eks. “SKI-ordrer til Offentligt Udbud”)
- Type – vælg den regeltype du ønsker
- Aktiv – sæt flueben for at aktivere reglen
- Enable Log – sæt flueben for at logge alle kørsler (anbefalet i testfasen)
- Skriv dit JavaScript i editoren
- Test scriptet inden du gemmer (fold “Test Script”-panelet ud)
- Klik Gem
Editor og Reference Card
Når du vælger en regeltype, viser editoren automatisk et Reference Card med alle tilgængelige variabler og deres typer. Du får også fuld TypeScript-autokomplettering – prøv at skrive order. og se de tilgængelige felter.
Tilgængelige funktioner
| Funktion | Beskrivelse |
|---|---|
log("besked") | Skriver en besked til ordrens transaktionslog – nyttig til debugging og sporbarhed |
return <værdi> | Returnerer resultatet af reglen – hvad du returnerer afhænger af regeltypen |
Ordre-objekt (tilgængeligt i de fleste regeltyper)
De vigtigste felter på order:
| Felt | Type | Beskrivelse |
|---|---|---|
order.orderID | number | Ordre-ID |
order.reference | string | Ordrereference |
order.subSite | number | Nuværende subsite-ID |
order.currency | string | Valutakode |
order.status | string | Ordrestatus |
order.cargoMethod | string | Fragtmetode |
order.note | string | Kundenote |
order.internalNote | string | Intern note |
order.deliveryNote | string | Leveringsnote |
order.address | Address | Faktureringsadresse |
order.deliveryAddress | Address | Leveringsadresse |
order.lines | OrderLine[] | Ordrelinjer |
order.extra | Record | Ekstra felter |
Addressfelter: name, street, city, zip, mail, phone, companyNumber, companyName, country, ean, street2, state
OrderLinefelter: lineID, title, price, itemNumber, amount, amountDelivered, note, extra, uom
Test af regler
Før du gemmer en regel, kan du teste den:
- Fold “Test Script”-panelet ud nederst på siden
- Indtast et Order ID (eller de felter regeltypen kræver)
- Klik Test Script
- Resultatet vises med:
- Input Context – de data din regel modtog (det faktiske ordre-objekt)
- Output Result – hvad din regel returnerede, inkl. eventuelle
log()-beskeder
Testen kører scriptet mod rigtige data, men anvender ikke ændringerne – så det er sikkert at teste med produktionsordrer.
Logning
Når Enable Log er slået til, logges alle kørsler med succes/fejl-status, eksekveringstid og kontekst. Se loggen via Logs-knappen i regellisten, eller i transaktionsloggen på den enkelte regel.
Eksempel 1: Subsite Assignment – SKI-ordrer til Offentligt Udbud
Scenarie: Alle ordrer hvor referencen indeholder “SKI-” skal automatisk tildeles subsite 4 (“Offentligt Udbud”).
Opsætning:
- Navn:
SKI-ordrer til Offentligt Udbud - Type:
Subsite Assignment - Aktiv: Ja
- Enable Log: Ja (til test)
Script:
// =============================================================
// Subsite Assignment: SKI-ordrer til Offentligt Udbud
// =============================================================
// Hvis ordrens reference indeholder "SKI-", tildel subsite 4
// (Offentligt Udbud). Ellers returner null for at beholde
// den nuværende subsite uændret.
// =============================================================
// Hent referencen fra ordren og normaliser til uppercase for sikker sammenligning
var reference = (order.reference || "").toUpperCase();
// Tjek om referencen indeholder SKI-præfikset
if (reference.includes("SKI-")) {
// Log til transaktionsloggen så det er synligt på ordren
log("Reference indeholder SKI- (" + order.reference + ") - tildeler subsite 4 (Offentligt Udbud)");
// Returner subsite-ID 4 for at tildele "Offentligt Udbud"
return 4;
}
// Ingen SKI-reference fundet - returner null for at lade subsite være uændret
return null;
Sådan tester du:
- Find en ordre med en SKI-reference (f.eks. ordre med reference “SKI-2024-00412”)
- Fold “Test Script”-panelet ud og indtast ordrens ID
- Klik “Test Script”
- Forventet resultat:
4(i Output Result) - Test også med en ordre uden SKI-reference – forventet resultat:
null
Resultat: Når en ny ordre modtages med reference “SKI-2024-00412”, sættes dens subsite automatisk til 4. Ændringen logges i ordrens transaktionslog.
Eksempel 2: Order Modification – Kontaktperson og kemikalie-advarsel
Scenarie: To automatiske ændringer på indgående ordrer:
- Hvis leveringsadressen har et firmanavn, kopier faktureringsadressens navn over som kontaktperson på leveringsadressen
- Hvis ordrelinjerne indeholder produkter med “kemikalie” i titlen, sæt en intern note som advarsel
Opsætning:
- Navn:
Firmakontakt + Kemikalie-advarsel - Type:
Order Modification - Aktiv: Ja
- Enable Log: Ja (til test)
Script:
// =============================================================
// Order Modification: Firmakontakt og kemikalie-advarsel
// =============================================================
// Regel 1: Hvis leveringsadressen har et firmanavn (companyName),
// kopiér faktureringsadressens navn til leveringsadressens
// kontaktperson-felt (name), så pakkeshops og fragtmænd
// ved hvem pakken er til.
//
// Regel 2: Hvis én eller flere ordrelinjer har "kemikalie" i titlen,
// sæt en intern note der advarer lagerpersonalet om at
// bruge udstyr og ekstra indpakning.
// =============================================================
var modified = false;
// ---------------------------------------------------------------
// Regel 1: Kopier billing-navn til delivery kontaktperson
// ---------------------------------------------------------------
// Tjek om leveringsadressen har et firmanavn - det indikerer en
// virksomhedslevering, hvor kontaktpersonen ofte mangler
var hasDeliveryCompany = order.deliveryAddress
&& order.deliveryAddress.companyName
&& order.deliveryAddress.companyName.trim() !== "";
if (hasDeliveryCompany) {
// Hent faktureringsadressens navn - det er typisk kontaktpersonen
var billingName = (order.address && order.address.name) ? order.address.name.trim() : "";
if (billingName !== "") {
// Sæt kontaktpersonen på leveringsadressen til billing-navnet
order.deliveryAddress.name = billingName;
log("Delivery har firma (" + order.deliveryAddress.companyName + ") - sætter kontaktperson: " + billingName);
modified = true;
}
}
// ---------------------------------------------------------------
// Regel 2: Kemikalie-advarsel i intern note
// ---------------------------------------------------------------
// Gennemgå alle ordrelinjer og tjek om nogen indeholder "kemikalie"
var hasChemicals = false;
var chemicalTitles = [];
for (var i = 0; i < order.lines.length; i++) {
var title = (order.lines[i].title || "").toLowerCase();
// Søg efter "kemikalie" i produkttitlen
if (title.includes("kemikalie")) {
hasChemicals = true;
chemicalTitles.push(order.lines[i].title);
}
}
if (hasChemicals) {
// Sæt intern note med tydelig advarsel til lagerpersonalet
order.internalNote = "FARLIG: Husk udstyr og ekstra indpakning";
log("Kemikalier fundet i " + chemicalTitles.length + " linje(r): " + chemicalTitles.join(", "));
modified = true;
}
// ---------------------------------------------------------------
// Returner det modificerede ordre-objekt
// ---------------------------------------------------------------
// Order Modification forventer at vi returnerer hele ordre-objektet.
// Systemet sammenligner automatisk med originalen og anvender kun
// de felter der faktisk er ændret.
return order;
Sådan tester du:
Test regel 1 (kontaktperson):
- Find en ordre hvor leveringsadressen har et firmanavn men mangler kontaktperson
- Indtast ordrens ID og klik “Test Script”
- I Output Result: tjek at
deliveryAddress.namenu har billing-adressen navn
Test regel 2 (kemikalie):
- Find en ordre med en produktlinje der indeholder “kemikalie” i titlen
- Indtast ordrens ID og klik “Test Script”
- I Output Result: tjek at
internalNoteer sat til “FARLIG: Husk udstyr og ekstra indpakning” - I log-output: tjek at de fundne kemikalie-titler er listet
Resultat: Når en ny ordre modtages:
- Har leveringsadressen et firmanavn? Billing-kontaktpersonen kopieres automatisk over
- Indeholder ordrelinjerne kemikalier? Intern note sættes med en advarsel til lageret
- Alle ændringer logges i ordrens transaktionslog med detaljerede log-beskeder
Gode råd
- Test altid med rigtige ordrer før du aktiverer en regel
- Brug
log()til at skrive beskeder der ender i ordrens transaktionslog – det gør fejlsøgning nemt - Returner
nullfra Subsite Assignment og Sticker Assignment for at “gøre ingenting” - Enable Log i testfasen, så du kan se alle kørsler og evt. fejl under Logs
- Kun én aktiv regel pr. type – har du brug for flere betingelser, kombiner dem i ét script (som i Eksempel 2)
- Scriptet har en timeout på 5 sekunder – hold logikken simpel og undgå tunge loops
- Editoren viser syntaksfejl i realtid – du kan ikke gemme et script med errors