ConnectMonitor-tjenesten¶
Hva den er¶
ConnectMonitor er en lokal konsollapplikasjon (løsningen
KnapphusConnectMonitor.sln, repo Knapphus Connect Monitor, historisk
prosjektnavn jhlfactolink2vb) som kjører batch-synkronisering mellom Visma
Business og eksterne systemer. Den deler forretningslaget
JHL_VismaBusinessInterface (jhlVismaAPI) med Connect API, og går direkte
mot Visma-databasen (connection string VismaSQL) samt VBS for ordre-/bilagsskriving.
Hver jobb startes med et kommandolinjeflagg; planleggingen ligger i Windows Task Scheduler med én oppgave per flagg.
Helhetsbilde og avhengigheter¶
Overordnet kobler ConnectMonitor mange eksterne systemer mot Visma Business. Jobbene trigges av Task Scheduler (én oppgave per flagg); skriving til Visma går gjennom VBS-laget (jhlVismaAPI).
flowchart TB
TS[Windows Task Scheduler] --> CM
CM["ConnectMonitor-konsoll<br/>~47 jobber / flagg"]
CM --> VBS[jhlVismaAPI / VBS] --> VISMA[(Visma Business)]
FACTO[FacToLink] --> CM
DH[CO DataHost] <--> CM
AMILI[Amili] <--> CM
ST1[St1 / Circle K / Shell] --> CM
ENERGI[EnergiApp / Birks] --> CM
BC[Gassnett / Business Central] --> CM
SOOLO[Soolo / NorTrace] --> CM
GEO[GeoNorge] --> CM
EG[(EG Retail Azure-DB)] --> CM
LOGOS[Logos Connect CSV] --> CM
HM[Handyman] <--> CM
PLN[Microsoft Planner] <--> CM
CM --> BANK[Bank / Blocfil]
CM --> VARSEL[E-post / SMS-varsler]
classDef sys fill:#f8d7da,stroke:#b53b46
class CM,VBS sys
Samme retning på pilene som i jobbene: rene inn-kilder (FacToLink, St1, EnergiApp, Gassnett, Soolo, GeoNorge, EG, Logos) mater Visma, mens DataHost, Amili, Handyman og Planner går begge veier. Forretningskall mot Visma går alltid via VBS-laget.
Løsningsstruktur (prosjektbibliotek)¶
Konsollen er bare orkestreringen. Hver integrasjon lever i sitt eget
prosjektbibliotek i samme solution (KnapphusConnectMonitor.sln), og
forretningslaget mot Visma er et eget repo (jhlVismaAPI). Tabellen viser
hvilket bibliotek som betjener hvilke jobber.
| Prosjekt | Rolle | Brukes av | Ekstern kilde / auth |
|---|---|---|---|
jhlfactolink2vb.console |
Hovedprogram, flaggparsing, orkestrering | alle flagg | — |
jhlCommon |
Felles SQL + GlobalVariables (vannmerker, namespaces) |
alle jobber | VismaSQL |
jhlVismaAPI / JHL_VismaBusinessInterface (eget repo) |
Visma-forretningslag: ordre, bilag, lager, EG Retail (EGAccountingController) |
bilag/ordre-jobber, EG | VBS (SOAP, sertifikat) |
jhlCoDataHost |
CO DataHost-API: fakturaer, priser, leveranser, betalinger | -d -c -b -u -v -k --*CoHostDeliveries --AutoloadTruckFromDH |
DataHost REST (Basic) |
AmiliApiClient |
Amili regnskaps-/faktureringsplattform | --Amili* |
Amili REST (OAuth2) |
GassnettAPI |
Gassmålere via Business Central | -a -x -y |
BC REST (OAuth2) |
jhlEnergiAppOrders |
EnergiApp/Birks ordrer + kunder | -e -z |
EnergiApp REST (Basic) |
jhlGeoNorge |
Adresse-/GPS-oppslag | -g |
GeoNorge REST (ingen) |
jhlHandymanAPI |
Handyman (FDV/service) | --Handyman* |
Handyman REST (API-key) |
SemineAPI |
Semine faktura (Handyman-materiell) | --HandymanSemineSync |
Semine REST (OAuth2) |
LogosConnect |
Parser for Logos drivstoffkort | --LogosConnectOrders |
CSV-fil |
jhlst1invoice (InvoiceReader) |
St1-fakturaimport | -i |
IMAP + CSV |
St1FuelpriceScrape (ekstern assembly) |
Skraping av drivstoffpriser (St1/Circle K/Shell) | -p -k --pricealert |
Web-skraping |
jhlfactolink2vb (eldre) |
FacToLink SOAP-wrapper | -f -o -r -w |
FacToLink SOAP |
Døde / ubrukte prosjekter
LandaxAPI (tom Class1), jhlAmili (erstattet av AmiliApiClient) og
jhlAutoOrder (logikken ligger i ctrlGasMetering) er ikke i bruk —
ikke bygg videre på dem.
Jobbkatalog¶
Tjenesten har ~50 kommandolinjeflagg i Helpers/Options.cs. Tabellene under
viser alle som er aktivt koblet opp i Program.cs, gruppert etter familie.
Flagg uten enkeltbokstav skrives med fullt navn (--Navn).
Økonomi → Visma-bilag
| Flagg | Jobb | Side |
|---|---|---|
-f (+-o) |
FacToLink innbetalinger (med OCR) | Økonomi-synk |
-r |
FacToLink rentenotaer | Økonomi-synk |
-i |
St1-fakturaer (CSV) | Økonomi-synk |
--AmiliInvoiceSync · --AmiliPaymentSync · --AmiliInterestSync · --AmiliBlocSync |
Amili kunder/fakturaer/innbetalinger/renter/Blocfil | Amili-synk |
Automatstasjoner (CO DataHost)
| Flagg | Jobb | Side |
|---|---|---|
-d |
DataHost-fakturaer | Automatstasjoner |
-c |
DataHost kortsalg | Automatstasjoner |
-b |
Vareuttak til automater (bilag) | Automatstasjoner |
Ordreinngang
| Flagg | Jobb | Side |
|---|---|---|
-e |
EnergiApp-ordrer | Ordreinngang |
-a |
AutoOrder gass (GasNet) | Ordreinngang |
-x / -y |
GasNet målerstand-varsel / purring | Ordreinngang |
Tankmåling og peiling
| Flagg | Jobb | Side |
|---|---|---|
--StockGetEOM |
Henting av peiletall (Soolo/NorTrace + DataHost), månedsslutt | Tankmåling og peiling |
--StockAdjustment |
Lagerjustering mot ERP | Tankmåling og peiling |
-h |
Soolo autoordre ved lavt nivå | Tankmåling og peiling |
-n |
NorTrace tanknivå-varsling (e-post) | Grunndata og varsling |
Automatiske og eksterne ordrekilder
| Flagg | Jobb | Side |
|---|---|---|
-z |
Nye kunder → EnergiApp/Birks | Ordrekilder |
--CustomerAutoOrder |
Auto-bulkordrer fra kundeliste | Ordrekilder |
--AutoloadTruckFromDH |
Bil-autoload fra DataHost | Ordrekilder |
--ConnectCustomerOrder |
Eksterne Connect-kundeordrer | Ordrekilder |
--LogosConnectOrders |
Logos Connect drivstoffkort (CSV) | Ordrekilder |
-m |
Fullfør uferdige ordrer | Ordrekilder |
DataHost-synk og -kontroll
| Flagg | Jobb | Side |
|---|---|---|
-u |
Kundesynk Visma → DataHost | DataHost-synk |
-v |
Kundekontroll DataHost | DataHost-synk |
--custCoHostDeliveries |
Kundeleveranser → DataHost-tank | DataHost-synk |
--internalCoHostDeliveries |
Interne leveranser → DataHost-tank | DataHost-synk |
Prisimport
| Flagg | Jobb | Side |
|---|---|---|
-p (+--pricealert) |
St1-prisskraping + Visma-priser + prisvarsel | Prisimport |
-k |
Prislisteoppdatering (St1 → DataHost) | Prisimport |
Interne kostoverføringer og fakturakontroll
| Flagg | Jobb | Side |
|---|---|---|
-q |
Kostoverføring (ulikt selskap på bil/tank) | Kostoverføringer og kontroll |
-j |
Kostoverføring «KET INTERN» | Kostoverføringer og kontroll |
-s |
Intern lager-til-lager-kostoverføring | Kostoverføringer og kontroll |
-w |
Transaksjonskontroll FacToLink + DataHost → FreeInf3 | Kostoverføringer og kontroll |
-l |
Depotlasting/kvitteringer (e-post) → FreeInf3 | Kostoverføringer og kontroll |
EG Retail-import
| Flagg | Jobb | Side |
|---|---|---|
--egImport / --egDateImport |
Rapportlinjer fra EG Retail (kassesystem) | EG Retail |
--egWasteReport |
Svinnrapport | EG Retail |
--egStockAdjustment / --egInventoryAdjustment |
Lager-/inventarjustering | EG Retail |
Eksterne integrasjoner
| Flagg | Jobb | Side |
|---|---|---|
--HandymanOrderSync / --HandymanCustomerSync / --HandymanSemineSync |
Handyman (FDV/service) | Handyman |
--azurePlanner / --azurePlannerSyncBack |
Avvik ↔ Microsoft Planner | Microsoft Planner |
Grunndata og varsling
| Flagg | Jobb | Side |
|---|---|---|
-g |
GeoNorge-geokoding | Grunndata og varsling |
Deaktivert / test
| Flagg | Status |
|---|---|
-t |
Intern test — kallet er kommentert ut |
--AmiliCustomerSync |
Kjøring deaktivert; kundesynk skjer inne i --AmiliInvoiceSync |
RunDataHostStock / RunDataHostAddStock |
Eldre DataHost tanknivå-/AddStock-jobb — kommentert ut i Program.cs |
Kjøres flere flagg i samme kjøring, har Program.cs en fast rekkefølge
(GeoNorge → DataHost → FacToLink → renter → St1-faktura → automatoverføring →
EnergiApp → St1-pris → GasNet → AutoOrder → NorTrace osv.). I praksis settes de
fleste jobbene opp som egne Task Scheduler-oppgaver med hvert sitt flagg.
Vannmerker i StrFVar¶
Hver jobb husker hvor langt den kom i Visma-tabellen StrFVar. Det er her du
«spoler tilbake» eller feilsøker en jobb:
NmSp |
VarNm |
Val1 |
Val2 |
|---|---|---|---|
Factolink |
SistInnlest |
Sist innleste dato (yyyyMMdd) |
— |
Factolink |
SistInnlest_Rentenota |
Sist innleste dato | — |
DataHost |
SistInnlest |
Høyeste innleste fakturanr | Forrige verdi (backup) |
ConnectMonitor |
EnergiAppOrdre |
Sist sjekket (yyyyMMddHHmm) |
Siste ordre-ID |
ConnectMonitor |
OverføringAutomat |
Sist kjørt (dato/klokke) | Antall uttak |
St1Priser |
SistInnlest |
Sist sjekket (yyyyMMdd) |
Retry-teller (varsler ved 3) |
Amili |
OCR_Amili |
Sist importerte innbetalingsdato | — |
Amili |
Rente_Dato |
Sist importerte rente-/gebyrdato | — |
Amili-jobbene har flere StrFVar-nøkler under NmSp='Amili' (serie, bankkonto,
forfallsdager) — se Amili-synk.
Idempotens og rekjøring¶
| Jobb | Duplikatvern | Rekjøring etter feil |
|---|---|---|
FacToLink (-f/-r) |
Datovannmerke — oppdateres kun ved vellykket bilag | Trygt: samme datointervall prøves på nytt |
DataHost-faktura (-d) |
Henter kun fakturanr > vannmerket | ⚠️ Vannmerket oppdateres selv om bilaget feiler — sett Val1 tilbake (bruk Val2) før rekjøring |
St1-faktura (-i) |
Filbasert — filer arkiveres etter innlesing | Ikke rekjør samme fil uten å sjekke bilagene |
Automatoverføring (-b) |
FreeInf2.Val5 0→1 per rad |
Trygt: behandlede rader hoppes over |
EnergiApp (-e) |
Ordre-ID-sjekk mot Ord.DelAd3 (LIKE) + ID > vannmerke |
Trygt |
GeoNorge (-g) |
Oppdaterer kun aktører med tom PictFNm |
Trygt |
GasNet/AutoOrder (-a) |
Kvartalslogikk, ingen hard duplikatsperre | Kontroller ordrer før rekjøring samme kvartal |
NorTrace (-n) / GasNet-varsel (-x/-y) |
Ingen — sender ved hver kjøring | Ikke rekjør uten grunn (dobbel utsending) |
Felles infrastruktur¶
| Del | Detalj |
|---|---|
| Konfigurasjon | App.config i konsollprosjektet: VismaSQL-connection string, VBSURL/VBClient/VBSUser/VBSPwd, samt nøkler per jobb (se komponentsidene) |
| SQL-hjelper | jhlCommon/SQL.cs: GetVismaProducts() (PROD der Inf4 <> ''), GetVismaDepartmentsForTanks() (R10 der Inf <> ''), GetVismaDepartmentsForSt1(), m.fl. |
| Logging | NLog → jhlConnectLog.txt (nivå Info+) på tjenermaskinen |
| E-post | Services/Email.cs via SMTP-relay (no-reply@knapphus.no); feil- og rapportmottakere i NotifyEmail |
| Opsjonsparsing | Helpers/Options.cs (CommandLine Parser) |
Hardkodede forutsetninger (viktig for overtakelse)¶
| Antakelse | Hvor |
|---|---|
GasNet-jobbene (-a/-x/-y) er låst til selskap 368 (Nærenergi) |
Program.cs kallene …(368) |
| Gassprodukter: 1010 = nettleie, 1011 = forbruk | AutoOrder-jobben |
| Omregning: m³ × 2,5 og kWh ÷ 12,8 (til kg propan) | AutoOrder-jobben |
| NorTrace-varsling: filter «well connection mongstad», fast mottaker | -n-jobben |
SQL-variant velges av VBClient (341 vs. andre) |
Automatoverføring |
(Verifisert i Program.cs (linje ~33–1956), Helpers/Options.cs,
jhlCommon/SQL.cs i
Knapphus Connect Monitor.)
Relaterte sider¶
- Økonomi: Økonomi-synk · Amili-synk · Kostoverføringer og kontroll
- DataHost/automat: Automatstasjoner · DataHost-synk
- Ordre: Ordreinngang · Ordrekilder
- Lager: Tankmåling og peiling · EG Retail
- Øvrig: Grunndata og varsling · Handyman · Microsoft Planner
- Drift og overvåking