Gå til innhold

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