Interne jobber — masterordre¶
Masterordre-modulens sju batch-motorer kjører som planlagte interne jobber i Konti Connect, i den egne kategorien «Interne jobber». En intern jobb er en vanlig Konti Connect-integrasjon — med cron-schedule, manuell kjøring, kjøringshistorikk, kjørelås og overvåkning — men den kobler seg ikke mot et eksternt system med egne påloggingsdetaljer: den kjører ePortals egne motorer på tenantens data. (NXT-synk-jobben bruker tenantens eksisterende Visma Business NXT-oppsett for selve NXT-lesingen.)
Type: Interne planlagte jobber (ingen egen autentisering) Modul i ePortal: Konfigureres i Konti Connect; virker på Masterordre-modulen (moduleID 50) Karakteristisk: Jobbene er idempotente og deler kjørelås med de manuelle handlingene i masterordre-bildene — samme motor kjører aldri dobbelt
De sju jobbene¶
| Jobb (navn i Konti Connect) | TypeCode | Hva den gjør |
|---|---|---|
| Masterordre: NXT-synk | MasterOrderNxtSync |
Importerer nye/endrede masterordrer og leveringsobservasjoner fra Visma Business NXT inn i den lokale abonnementsprojeksjonen. Kjører i deltamodus med to sjekkpunkter (ordrer og observasjoner) og et arbeidsbudsjett per kjøring. |
| Masterordre: Datomotor | MasterOrderDateEngine |
Kjører datomotoren (Live) over de lokale leveringsobservasjonene, skriver det forklarbare sporet, og skriver deretter automatisk nye planlagte datoer for hver masterordre med minst én endret linje — uten bekreftelse (MO-151). |
| Masterordre: Ordreforslag | MasterOrderProposals |
Genererer ordreforslag for masterordrer som har nådd planlagt dato. Idempotent — maks ett åpent forslag per ordre; utsatte forslag som er forfalt gjenåpnes. |
| Masterordre: Auto-ordreforslag | MasterOrderOfferAutoSend |
Konverterer forfalte ordreforslag i auto-modus til tilbud/ordreforslag og sender dem (auto-konverter + auto-utsend). |
| Masterordre: Påminnelser | MasterOrderOfferReminders |
Sender purringer på ubesvarte tilbud (med karenstid og maks antall), utløper forfalte tilbud og rydder utløpte aksept-tokens. |
| Visma Business NXT: serienummer | VismaBusinessNXT_SerialNumbers |
Leser serienummerrader fra Visma Business NXT inn i korrelasjonstabellen (wv_ExtCache_NxtSerialUnit) og binder dem til instrumenter i instrumentregisteret (MO-143 S4a/S4b). Bakfyller først tilbudslinje-kartet fra uavklarte fullførte tilbudsoverføringer (roterer rettferdig via en varig markør, avgrenset til halvparten av arbeidsbudsjettet; ferdig kartlagte ordrer leses aldri på nytt), slik at også tilbudsfødte ordrer bindes. Deltamodus med eget vannmerke per selskap og en periodisk full avstemming mot kilden. |
| Masterordre: NXT-overføring (kø) | MasterOrderNxtTransferDrain |
Drenerer køen av tilbud→NXT-salgsordreoverføringer (eldste først, avgrenset av MaxBatch). Køede rader kommer fra aksept-bryteren og manuelle handlinger. Idempotent via overførings-ledgeren, og styrt av funksjonsbryteren Subscription.OfferNxtTransfer.Enabled (av som standard — avslått bryter gir advarsel i kjøringsloggen, aldri feil). |
Jobbene opprettes per tenant av administrator i Konti Connect → Integrasjoner («Ny integrasjon» → velg type under «Interne jobber») — de opprettes ikke automatisk ved oppgradering.
Avhengighet og anbefalt kjøreplan¶
De tre nattlige jobbene bygger på hverandre og bør kjøres i rekkefølge:
flowchart LR
A["NXT-synk<br/>(nattlig, f.eks. 03:00)"] --> B["Datomotor<br/>(nattlig, f.eks. 04:00)"]
B --> C["Ordreforslag<br/>(nattlig, f.eks. 04:30)"]
C -.-> D["Auto-ordreforslag<br/>(faste dager i måneden)"]
E["Påminnelser<br/>(daglig)"]
F["NXT-overføring (kø)<br/>(hvert 15.–30. min i arbeidstiden)"]
| Jobb | Anbefalt kadens | Kommentar |
|---|---|---|
| NXT-synk | Nattlig, f.eks. kl. 03:00 | Først — datomotoren leser observasjonene den skriver |
| Datomotor | Nattlig, f.eks. kl. 04:00 | Etter NXT-synk |
| Ordreforslag | Nattlig, f.eks. kl. 04:30 | Etter datomotoren; kan i tillegg kjøres oftere på dagtid |
| Auto-ordreforslag | Faste dager i måneden via cron | F.eks. den 1. og 15. kl. 06:00: 0 0 6 1,15 * ? |
| Påminnelser | Daglig | Purring/utløp/opprydding |
| NXT-overføring (kø) | Hyppig, f.eks. hvert 15.–30. min i arbeidstiden | Kø-drenering — uavhengig av natt-kjeden; korte, avgrensede kjøringer så aksepterte tilbud raskt blir NXT-ordrer |
| Serienummer-synk | F.eks. hvert 30.–60. min i arbeidstiden | Uavhengig av natt-kjeden; binder serienumre til instrumenter etter hvert som NXT leverer |
Rekkefølgen håndheves ikke hardt: datomotor- og ordreforslag-jobben har en
ferskhetsvakt (UpstreamFreshnessHours, standard 26 timer) som legger en
advarsel i kjøringsloggen når forrige vellykkede oppstrøms-kjøring
(henholdsvis NXT-synk og datomotor) er eldre enn terskelen — kjøringen
stoppes aldri av vakten.
Konfigurasjonsnøkler¶
Konfigurasjonsmalen fylles ut automatisk når du velger jobbtypen i integrasjonseditoren. Nøklene per jobb:
Masterordre: NXT-synk¶
| Nøkkel | Standard | Hva den betyr |
|---|---|---|
SyncOrders |
true |
Go-live-bryteren. true = importer/oppdater masterordrer fra NXT (test-/migreringsfasen). false = kun leveringsobservasjoner (etter go-live, når ePortal er master for ordrene). Se runbook-steget under. |
SyncObservations |
true |
Synk leveringsobservasjoner |
RunEnrich |
true |
Etterfyll blanke hodefelter/linjepriser på importerte ordrer |
MaxOrders |
25 |
Øvre grense for antall ordrer i en avgrenset (første) kjøring |
MaxPagesPerRun |
40 |
Arbeidsbudsjett: maks antall NXT-sider per kjøring |
MaxRuntimeSeconds |
120 |
Arbeidsbudsjett: maks kjøretid per kjøring |
ObservationBackfillMonths |
0 |
0 = delta (normal drift). > 0 = engangs tilbakefylling så mange måneder bakover — tung, kjøres manuelt |
RunAsUserId |
0 |
Systemaktør-id i endringsloggen (0 = system) |
DebugLogging |
false |
Detaljert logging, kun for feilsøking |
Masterordre: Datomotor¶
| Nøkkel | Standard | Hva den betyr |
|---|---|---|
UpstreamFreshnessHours |
26 |
Ferskhetsvakt: advarsel i kjøringsloggen når forrige vellykkede NXT-synk er eldre enn dette (blokkerer aldri) |
RunAsUserId |
0 |
Systemaktør-id i endringsloggen (0 = system) |
DebugLogging |
false |
Detaljert logging |
Masterordre: Ordreforslag¶
| Nøkkel | Standard | Hva den betyr |
|---|---|---|
UpstreamFreshnessHours |
26 |
Ferskhetsvakt: advarsel når forrige vellykkede datomotor-kjøring er eldre enn dette (blokkerer aldri) |
DebugLogging |
false |
Detaljert logging |
Masterordre: Auto-ordreforslag og Masterordre: Påminnelser¶
| Nøkkel | Standard | Hva den betyr |
|---|---|---|
RunAsUserId |
0 |
Systemaktør-id i endringsloggen |
DebugLogging |
false |
Detaljert logging |
Selve brev-oppførselen (karenstid, maks purringer, avsender, maler) styres av pipeline-konfigurasjonen, ikke av jobb-konfigurasjonen.
Visma Business NXT: serienummer¶
| Nøkkel | Standard | Hva den betyr |
|---|---|---|
CompanyNo |
(påkrevd) | NXT-selskapsnummeret serienumrene leses for. Vannmerket er partisjonert per selskap. Jobben bruker tenantens aktive Visma Business NXT-integrasjon for selve påloggingen — ingen egen ClientId. |
MaxPagesPerRun |
40 |
Arbeidsbudsjett: maks antall NXT-sider per kjøring. Bakfyllet av tilbudslinje-kartet får halvparten (heltallsdelt), håndhevet per ordre: en ordre slippes bare til når minst én side gjenstår av bakfyllets halvdel, og tilbakelesingen dens er hardt begrenset til det som gjenstår — trenger ordren mer, feiler den lukket og prøves igjen senere. Sidene bakfyllet bruker trekkes fra kjøringens felles budsjett, så serienummer-fasene beholder alltid minst den andre halvdelen. Med MaxPagesPerRun satt til 1 blir bakfyllets andel 0 sider — det slipper ingen ordrer til, og serienummer-fasene beholder hele budsjettet |
MaxRuntimeSeconds |
120 |
Arbeidsbudsjett: kjøretidsgrensen sjekkes ved trygge grenser (mellom ordrer i bakfyllet, før avstemmingen og mellom ordrelinjer i bindingen) - en pågående lesing eller linje avbrytes aldri midt i. Bakfyllet får maks halvparten av tiden. Resten fortsetter ved neste kjøring |
ReconcileEveryNRuns |
10 |
Hvor mange fullførte delta-kjøringer det går mellom hver fulle avstemming mot kilden |
DebugLogging |
false |
Detaljert logging, kun for feilsøking |
Hver kjøring starter med et bakfyll av tilbudslinje-kartet
(wv_Subscription_OfferLineNxtLine): uavklarte fullførte tilbud→NXT-overføringer
— ordrer som fortsatt har ukoblede linjer eller en åpen tvetydig sak — leses
tilbake fra NXT og entydige produktlinjer kobles automatisk til
tilbudslinjene sine, slik at også tilbudsfødte ordrelinjer kan bindes til
instrumenter i samme kjøring. Ferdig kartlagte ordrer leses aldri på nytt.
Bakfyllet er avgrenset: det får maks halvparten av side- og
kjøretidsbudsjettet (MaxPagesPerRun/MaxRuntimeSeconds), håndhevet per
ordre — hver ordres tilbakelesing er hardt begrenset til det som gjenstår
av halvdelen — og sidene det bruker trekkes fra kjøringens felles
sidebudsjett. Rekker det ikke over hele restanselisten, stopper det ved en
trygg ordregrense — serienummer-fasene kjører uansett videre med resten av
budsjettet. Neste kjøring fortsetter fra en varig markør
(sjekkpunktet OfferLineBackfillCursor, ordre-ID-en til den sist forsøkte
overføringen): restanselisten leses i avgrensede sider etter markøren, og
når enden er nådd starter rotasjonen forfra (maks én runde per kjøring).
Dermed prøves alle uavklarte ordrer på nytt over tid, samtidig som en varig
åpen tvetydig sak tidlig i listen aldri kan sluke budsjettet og sperre
senere ukoblede ordrer. Steget er feilisolert — feiler bakfyllet,
logges en advarsel og serienummer-synken fortsetter som normalt; kartet
repareres ved neste kjøring. Et tidsavbrudd mot NXT behandles som en vanlig
ordrefeil: sidene som ble brukt telles mot budsjettet og markøren flyttes
forbi ordren, slik at gjentatte tidsavbrudd aldri leser de samme ordrene om
igjen. Ordrer med tvetydige produktlinjer (samme
produkt flere ganger) kobles aldri automatisk: de registreres som varige
tvetydige saker (AmbiguousOrder) og avklares manuelt med handlingen
Koble linjer på NXT-serienummer-siden (se
instrumentregisteret).
Jobben husker fremdriften i tre sjekkpunkter: vannmerket
LastSerialSyncTimestamp (rå NXT-tidsstempel med 5 minutters
replay-vindu), telleren RunsSinceReconcile og bakfyll-markøren
OfferLineBackfillCursor. Første kjøring (og
avstemmingen) leser serienumrene ordre-for-ordre for et samlet lokalt
ordresett: de importfødte masterordrene som har instrumenter, ordrene fra
fullførte tilbudsoverføringer og ordrene som allerede finnes i
tilbudslinje-kartet; deretter tar delta-lesingen over. Avstemmingen markerer rader
som er borte fra kilden (MissingAtSourceSince); en rad som er borte to
avstemminger på rad settes til RemovedAtSource — men en rad som er
bundet til et instrument mistes aldri automatisk: den beholder bindingen
og varsles i kjøringsloggen.
Uavklarte rader i portalen: siden NXT-serienummer under Abonnement
(modul 50) viser alle uavklarte rader - og bundne rader som er borte fra
kilden. Tabellen er skrivebeskyttet, med ett unntak: rader med årsak
AmbiguousOrder har handlingen Koble linjer, som åpner den manuelle
koblingsvisningen (tilbudslinjer mot NXT-ordrelinjer, én kobling om gangen,
skrevet under samme lås som synkjobben og logget i endringsloggen på
tilbudet). Siden ligger ikke i noen standardmeny: en administrator
aktiverer den per kunde via Menyadministrasjon (velg ruten
«NXT-serienummer» under Abonnement (modul 50)). Se
instrumentregisteret.
Operatorspørring (Systemadministrasjon → SQL-editor, mot klientdomenet) er den dokumenterte reserven for den samme mengden:
SELECT NxtCompanyNo, NxtOrderNo, NxtLineNo, NxtSequenceNo, SerialNo, ProductNo,
BindState, UnbindReason, ServiceObjectId, FirstSeenAt, LastSeenAt, MissingAtSourceSince
FROM dbo.wv_ExtCache_NxtSerialUnit
WHERE BindState <> 'Bound' OR MissingAtSourceSince IS NOT NULL
ORDER BY NxtOrderNo, NxtLineNo, NxtSequenceNo;
Et serienummer et menneske har skrevet inn manuelt overskrives aldri av
jobben: en uenighet blir stående som en varig konflikt
(ManualValueDisagrees) til en operatør avgjør den — rett verdien i NXT,
rediger instrumentets serienummer, eller tøm det manuelle serienummeret for å
gi eierskapet tilbake til synken.
Masterordre: NXT-overføring (kø)¶
| Nøkkel | Standard | Hva den betyr |
|---|---|---|
MaxBatch |
25 |
Øvre grense for antall køede overføringer per kjøring (må være > 0). Resten blir stående i køen til neste kjøring |
DebugLogging |
false |
Detaljert logging, kun for feilsøking |
Jobben drenerer køen av tilbud→NXT-salgsordreoverføringer. Køede rader
oppstår når et tilbud aksepteres (aksept-bryteren legger overføringen i kø i
stedet for å kalle NXT i selve forespørselen) eller via manuelle handlinger.
Overføringen er idempotent via overførings-ledgeren — en ny kjøring skaper
aldri en ny NXT-ordre for et allerede overført tilbud. Hele funksjonen styres
av funksjonsbryteren Subscription.OfferNxtTransfer.Enabled (av som
standard): er den av, logger jobben en advarsel («Funksjonen er avslått …») og
hopper over radene — kjøringen regnes fortsatt som vellykket.
Delta og sjekkpunkter (NXT-synk)¶
NXT-synk-jobben husker hvor den kom i forrige kjøring via to sjekkpunkter:
ett for ordre-importen (LastOrderSyncTimestamp) og ett for
observasjons-synken (LastObservationSyncTimestamp).
- Normal kjøring: kun ordrer/observasjoner endret etter sjekkpunktet hentes fra NXT — nattkjøringen er derfor rask uansett datamengde.
- Budsjettstopp: treffer kjøringen arbeidsbudsjettet
(
MaxPagesPerRun/MaxRuntimeSeconds), stopper den kontrollert, lagrer fremdriften den har fått skrevet, og fortsetter fra sjekkpunktet ved neste kjøring. Kjøringen regnes fortsatt som vellykket — kjøringsloggen viser en advarsel om at den fortsetter neste gang. - Ingen duplikater: observasjoner settes inn «kun én gang» (nøkkel per NXT-transaksjon), så en overlappende eller gjentatt kjøring skaper aldri doble observasjoner.
- Første kjøring (uten sjekkpunkter) er avgrenset av
MaxOrders; historikk lenger tilbake hentes ved behov medObservationBackfillMonthssom en manuell engangskjøring.
Tørrkjøring («dry-run») i integrasjonseditoren validerer konfigurasjonen og viser jobbens gjeldende sjekkpunkter uten å kjøre noe.
Manuell kjøring, kjørelås og kjøringshistorikk¶
- Kjør nå: enhver av jobbene kan startes manuelt fra Konti Connect — se Kjøre manuelt.
- Delt kjørelås: de manuelle handlingene i masterordre-bildene (kjør NXT-import, evaluer datomotor, generer ordreforslag, kjør tilbudspipeline) deler kjørelås med de planlagte jobbene. Starter du en manuell kjøring mens den planlagte kjører (eller omvendt), avvises den med en «kjører allerede»-melding — prøv igjen om litt.
- Kjøringshistorikk: hver kjøring logges med status, antall behandlede/vellykkede rader, per-steg-logg (norsk løpende logg) og utløser (manuell / planlagt / API) — se Lese kjøringslogg.
- Overvåkning: kjøringene inngår i Konti-admins integrasjonsmonitor på tvers av tenants (med varsling og kvittering/demping av alarmer). Se også Overvåkning og gjenoppretting.
Go-live-runbook: slå av ordre-import (SyncOrders=false)¶
Frem til go-live er Visma Business NXT master for masterordrene, og NXT-synk importerer/oppdaterer ordrer. Ved go-live overtar ePortal som master for ordrene — da skal ordre-importen slås av, mens observasjons-synken fortsetter:
- Åpne Konti Connect → Integrasjoner → Masterordre: NXT-synk → Rediger.
- Sett
SyncOrderstilfalsei konfigurasjonen. LaSyncObservationsstå påtrue. - Lagre. Neste kjøring henter kun leveringsobservasjoner (delta).
- Verifiser i kjøringsloggen at neste kjøring er grønn og bare rapporterer observasjons-steget.
Dette er et bevisst manuelt runbook-steg — bryteren endres aldri automatisk.
Vanlige problemer¶
| Problem | Årsak / løsning |
|---|---|
| «Kjører allerede»-melding ved manuell kjøring | Den planlagte jobben (eller en annen manuell kjøring) holder kjørelåsen. Vent til den er ferdig og prøv igjen. |
| Advarsel om gammel oppstrøms-kjøring i loggen | NXT-synk (eller datomotoren) har ikke kjørt vellykket innenfor UpstreamFreshnessHours. Sjekk oppstrøms-jobbens kjøringshistorikk; kjøringen er ikke stoppet. |
| Kjøringen stopper med «fortsetter neste kjøring» | Arbeidsbudsjettet (MaxPagesPerRun/MaxRuntimeSeconds) ble brukt opp. Normalt ved store endringsmengder — neste kjøring fortsetter fra sjekkpunktet. Øk budsjettet ved behov. |
| Jobben har aldri kjørt | Sjekk at integrasjonen er aktiv, at cron-uttrykket er gyldig, og at typen ble opprettet under kategorien «Interne jobber». |
| Ordrer oppdateres ikke lenger fra NXT | SyncOrders står på false (go-live-modus). Det er tilsiktet etter go-live — se runbook-steget over. |
| Advarsel i serienummer-synken om at en linje ble hoppet over pga. radlås | To skrivere traff samme ordrelinje samtidig (f.eks. planlagt kjøring og en manuell handling). Ingen endringer ble skrevet for linjen; neste kjøring tar den automatisk. |
| Advarselen «Funksjonen er avslått (Subscription.OfferNxtTransfer.Enabled)» i kø-dreneringens logg | Funksjonsbryteren for tilbud→NXT-overføring er av (standard). Slå den på i systemkonfigurasjonen når overføringen skal aktiveres — kjøringen er ikke feilet, radene blir stående i køen. |