Net-Base Ajakiri

22.04.2026

Windows teenused Delphi abil moderniseerimine: arhitektuur, käitamine ja migratsioon riskideta

Paljud Delphi-Windows-teenused töötavad aastaid stabiilselt – kuni operatsioonisüsteem, turvanõuded või andmebaasid muutuvad. See artikkel näitab, kuidas moderniseerida Windows-teenuseid Delphi abil: alates logimisest ja konfiguratsioonist kuni teenuse kõvendamise ja 64‑bitini...

22.04.2026

Paljudes ettevõtetes töötavad Windows-teenused (Windows Services) taustal kui tehnilised protsessimootorid: need toovad andmeid, kirjutavad olekut andmebaasidesse, genereerivad dokumente, saadavad faile, töötlevad järjekordi või sünkroonivad ERP-i, DMS-iga või väliste partneritega. Sageli loodi need teenused aastaid tagasi Delphi abil – usaldusväärsed, tõhusad, kuid täna uute raamistike tingimustes: rangemad turvanõuded, muudetud andmebaasid, uued Windows-versioonid, lõppseadmete kaitse, pilveühendused ja kõrgemad ootused monitooringule.

Windows-teenuste moderniseerimine koos Delphi-ga tähendab seega harva „kõike uuesti kirjutada“. Praktikas on tegemist kontrollitud sammudega, mis parandavad oluliselt käitamist ja hooldust: robustne konfiguratsioon, taasesitatav juurutus, jälgitavad logid, vähendatud sõltuvused, turvalised identiteedid ning arhitektuur, mis kapseldab liidesed ja andmejuurdepääsu puhtalt. See artikkel vaatleb teemat IT-juhtimise, administratsiooni ja tehniliste projektivastutajate vaatenurgast – riskid, käitusekogemused ja planeeritav migratsioon silmas pidades.

Miks Delphi-Windows-teenuseid täna tuleb moderniseerida

Üks Delphi-teenus võib mitu aastat stabiilselt töötada, ilma et selle kood oleks „halb“. Moderniseerimisvajadus tekib sageli keskkonna- ja käitustingimuste tõttu:

  • Turvanõuded: hardening, least privilege, ebaturvaliste protokollide keelamine, rangemad auditeerimisnõuded.
  • Platvormivahetus: 32‑bit kuni 64‑bit, uued Windows-versioonid, uus serveririistvara, virtualiseerimine või muudetud draiverid.
  • Andmebaasi- ja draiverivahetus: vananenud juurdepääsumeetodite asendamine (nt BDE) kaasaegsemate andmejuurdepääsukihtide kasuks nagu BDE-asendamine natiivse liidestusega; üleminek SQL Serverile, PostgreSQL-ile või MariaDB-le.
  • Operatiivsed nõuded: puhas rollout, rollback, teenused mitmes keskkonnas (Dev/Test/Prod), konfiguratsioonihaldus.
  • Integratsioon: REST-APId, SSO, sõnumijärjekorrad, faili-liidesed valideerimise ja kinnitusmehhanismiga.
  • Läbipaistvus: monitooring, meetrikad, struktureeritud logid, selged veapildid, mitte „ei tööta“.

Tüüpiline on nende tegurite kombinatsioon: teenus töötab, kuid muudatused muutuvad riskantseks. Just siis tasub moderniseerimine ära – mitte enese eesmärgina, vaid meetmepaketina käitusohutuse ja muudetavuse parandamiseks.

Seisukorra ülevaade: mida üks Windows-teenus igapäevaselt tegelikult peab täitma

Enne tehniliste meetmete otsustamist peaks IT koos ärivaldkonna ja käitluse osapooltega selgitama, mida teenus tegelikult teeb. Kasvavates süsteemides on see sageli vaid osaliselt dokumenteeritud. Pragmaatiline seisukorra ülevaade hõlmab:

  • Trigger: Kas teenus töötab pidevalt, ajapõhiselt või sündmusepõhiselt (nt faili saabumine, järjekord, andmebaasi olek)?
  • Liidesed: andmebaasid, failijagamised, SFTP/FTPS, HTTP/REST, SMTP, ERP-Connector, COM/Office-automatiseerimine (teenuse kontekstis kriitiline).
  • Veateed: Mis juhtub ajapiirangu, andmebaasi lukustuse, kehtetute andmete või võrgu katkestuse korral?
  • Kõrvalmõjud: Kas teenus genereerib faile, meile, kandeid, olekumuutusi? Kas on idempotentsus (korduv käivitamine ilma topeltmõjuta)?
  • Tööaken: Kas peab töötama 24/7? Kas on hooldusaknad? Kuidas teenus reageerib peatamisel/käivitamisel?
  • Sõltuvused: Millised Windows-rollid/funktsioonid, millised TLS-versioonid, millised sertifikaadid, millised registri-/failiõigused?
  • Tulemus ei ole nõuete dokument, vaid usaldusväärne kaart: kus on riskid, kus on võimalik kiireid parandusi ja kus tuleb erialaselt eriti ettevaatlik olla (nt broneerimisloogika või regulatsiooniliselt olulised protsessid).

    Windows Services mit Delphi modernisieren: sihtarhitektuur hooldatava käitamise jaoks

    Praktiline sihtarhitektuur eraldab tehnilise kest (Windows- ja Linux-Services) äriloogikast. Käitamise ja hoolduse jaoks on otsustav, et teenus ei ole „kõik-ühes“, vaid ainult host selgelt määratletud mootori jaoks.

    Teenuse-hosti ja töötlemiskerni eraldamine

    Windows-teenus haldab käivitamist/peatamist, heartbeat’e, signaalide käsitlemist ja vajadusel ajastajaid. Töötlemiskern kapseldab:

    • Ärilised sammud (nt import, valideerimine, olekuvahetus)
    • Andmejuurdepääs (andmebaasi-adapterid, transaktsioonid)
    • Integratsioonid (REST-Client, SFTP, Mail)
    • Vea käsitlemine ja taastekäivitamine

    See eraldus tasub kohe: testid muutuvad lihtsamaks, migratsioon (nt Linux-daemonile või konteiner-hostile) muutub üldse mõeldavaks ning käituses saab selgelt eristada: „Teenuse töötab, kuid tööülesanne ebaõnnestub“ versus „Teenus ei käivitu“.

    Konfiguratsioonikiht asemel „väärtused koodis“

    Paljudes vanades teenustes on teed, URL-id, timeout’id või kliendi parameetrid kõvasti koodis või jagatud registrikannetes. Moderniseerimine tähendab: ühtne konfiguratsiooniallikas (nt INI/JSON koos kaitstud secret’idega) selgete vaikeväärtustega, valideerimisega käivitamisel ja jälgitavate ülekirjutustega iga keskkonna jaoks.

    Oluline administraatoritele: konfiguratsioon peab olema paigaldatav (paketiga), kontrollitav (enne käivitust) ja võrreldav (Dev/Test/Prod). Secret’ide (paroolid, tokenid) jaoks soovitatav eraldi secret-haldus, nt läbi Windows Credential Manageri või tsentraliseeritud Vault-kontseptsiooni, mitte selges tekstis failides.

    Käitamine ja stabiilsus: logimine, monitooring ja „kasulikud“ veateated

    Kui teenust moderniseeritakse, on logimine sageli suurim mõjur – mitte arendajamugavuse tõttu, vaid intsidentide kiirema käsitlemise huvides. Delphi-teenus ei tohi vealisel juhul piirata end ainult Eventlog-kirje „Viga 1″ kirjutamisega.

    Struktureeritud logimine ja korrelatsioon

    Struktureeritud logimine tähendab: iga asjakohane tegevus kirjutab sündmuse koos kontekstiga (aeg, klient, töö-ID, andmeallikas, sihtsüsteem, kestus). Ideaalis on olemas korrelatsioon (nt Run-ID), mis ühendab ühe töö läbiviimise kõik logiread. See aitab, kui mitu tööd töötavad paralleelselt või mitu teenust koostööd teevad.

    Käitamise jaoks oluline: logid peavad jõudma sinna, kus neid saab analüüsida – Windows Eventlog, keskne logikogumik või failid rotatsiooniga. Otsustav on kokkulepe: millised logitasemed (Info/Warn/Error) on tootmises aktiivsed? Kui kaua logisid säilitatakse? Mis sisaldab isikuandmeid ja peab olema vähendatud või maskeeritud?

    Mõõdikud kõhutunde asemel

    Monitooringu jaoks on kasulikud lihtsad mõõdikud: töödeldud andmekogumite arv, läbimiselamised, järjekorra pikkused, veamäärad, viimane edukas käivitamine. Isegi ilma „Cloud-Native“ ümberkujunduseta võib teenus selliseid näitajaid pakkuda, näiteks Eventlogi, staatustabeli andmebaasis või väikese lokaalse staatus-endpointi (nt ainult lokaalselt kättesaadav) kaudu.

    Tähtis on käitlusloogika: teenus, mis „jookseb“, aga ei ole 8 tunni jooksul midagi töötlenud, on praktiliselt rikutud. Monitooring peab seetõttu kontrollima ärilisi elusmärke, mitte ainult protsessi olekuid.

    Turvalisus ja identiteedid: teenusekontod, õigused ja rünnetepindade vähendamine

    Windows-teenuseid käideti varem tihti kohalike administraatoriõigustega, „sest muidu ei tööta“. Tänases keskkonnas ei ole see paljudes olukordades enam aktsepteeritav — ja põhjusega. Moderniseerimine hõlmab seetõttu selget turvapoliitikat.

    Vähimate õiguste põhimõte praktikas

    Vähimate õiguste põhimõte tähendab: teenus jookseb pühendatud teenusekontoga (kohalik või domeeni), millel on ainult need õigused, mis on tema ülesande täitmiseks vajalikud. Konkreetsemalt:

    • Failisüsteemi õigused ainult vajalikele kaustadele (sisend, töötlemine, arhiivid, logid).
    • Võrguõigused ainult sihtsüsteemidele (tulemüüri reeglid, proxy, DNS).
    • Andmebaasiõigused minimaalsed (nt ainult Stored Procedures/tabelid, mitte DDL-õigused).
    • Pole interaktiivset sisselogimist, pole kohalikke administraatoriõigusi.

    See vähendab kompromiteeritud teenuse mõju oluliselt. Samas sunnib see ka puhtale dokumentatsioonile: millised ressursid on tegelikult vajalikud?

    TLS, sertifikaadid ja turvalised protokollid

    Paljud moderniseerimisprojektid ei ebaõnnestu Delphi-koodi pärast, vaid vananenud protokollide või sertifikaadiahelate tõttu. Kui teenus täna kasutab REST, on TLS-versioonid, cipher-suite’id ja sertifikaatide valideerimine keskse tähtsusega. IT jaoks on oluline: sertifikaadid peavad olema uuendatavad (lõppkuupäevad), trust-store peab olema konsistentne ning veateated peavad selgelt näitama põhjuse (handshake, nime mittevastavus, aegunud ahel) — ilma tundlikke andmeid logimata.

    Andmejuurdepääsu moderniseerimine: draiverid, transaktsioonid ja migratsioonirajad

    Tavapärane moderniseerimise ajend on andmejuurdepääs. Delphi-maastikes kohtab erinevaid põlvkondi: otseseid andmebaasiühendusi, vanu andmebaasikomponente või ajalooliselt tekkinud abstraktsioone. Käitluse vaates loevad stabiilsus, draiverite hooldus, 64‑bit tugi ja selged veamustrid.

    Pärandist üles FireDAC: miks see operatiivselt oluline on

    BDE-Ablosung mit nativer Anbindung on kaasaegne andmejuurdepääsu kiht Delphi-keskkonnas, mis toetab mitut andmebaasi ja tagab ühtse käitumise ühenduste, parameetrite, transaktsioonide ja veakoodide osas. Ettevõtte jaoks ei ole nii oluline nimi kui mõju:

    • 64‑bitiga ühilduv ja seega sobivam tänastele Windows-serverimaastikele.
    • Puhas ühendusehaldus (pooling, timeouts, taasühendamise strateegiad).
    • Rohkem andmebaase (nt SQL Server, PostgreSQL, MariaDB) ilma teenuse loogikat täielikult ümber kirjutamata.
    • Planeeritav migratsioon, sest andmejuurdepääsu saab sammhaaval adapterite taha kapseldada.

    Tähtis: andmejuurdepääsu ümbertegemine ei tähenda ainult „komponentide vahetamist“. Räägitakse andmetüüpidest (nt kuupäev/kellaaeg, detsimaal), SQL-dialektidest, sorteerimisest/collation’ist, transaktsioonide isolatsioonist ja lukustuskäitumisest. Need aspektid on käitluse ja jõudluse seisukohalt tihti määravamad kui konkreetne koodimuudatus.

    Transaktsioonid ja idempotentsus kui kaitse topelttöötluse vastu

    Paljud teenused töötlevad andmeid partiitöötlusena. Kui protsessi keskel juhtub viga, tekib vanemates süsteemides sageli ebamäärane olek: osaliselt salvestatud, osaliselt mitte. Moderniseerimisel tuleks siin kehtestada kaks juhtjoont:

    • Transaktsioonid: funktsionaalselt seotud sammud lõpetatakse atomaarsetena või keritakse täielikult tagasi.
    • Idempotentsus: vea korral uuesti käivitamine ei too kaasa topeltkandeid ega duplikaatfaile. Tüüpilised on unikaalsed töö‑IDd, seisundimasinad ja „exactly once“‑sarnased mustrid rakendustasandil.

    Otsustajatele oluline: need meetmed vähendavad äriprotsessi häireid ja lühendavad tugiaega, kuna vead muutuvad reprodutseeritavaks ning nähtavaks ja neid saab puhastada.

    Teenuse või ajastatud ülesanne? Selge otsustuskava

    Kõik taustülesanded ei pea olema Windows‑teenused. Mõnikord on planeeritud ülesanne (Windows Task Scheduler) ettevõtte jaoks sobivam. Valikul on mõju õigustele, käivituskäitumisele ja hooldusele.

    Millal Windows‑teenus on mõistlik

    • Sündmuspõhine töötlemine (Queue, Socket, Watcher) või väga lühikesed reageerimisajad.
    • Pidev töö koos kontrollitud taaskäivituskäitumisega.
    • Mitu paralleelset tööprotsessi või püsivad ühendused.
    • Integratsioon Windows‑teenuse järelvalve ja taastamise (recovery) valikutega.

    Millal ajastatud ülesanne sobib paremini

    • Selged intervallitööd (nt iga 15 minuti järel), mis iga kord töötavad lühikest aega.
    • Lihtne juurutamine/veaotsing, vähem „always-on“ keerukust.
    • Selged väljundkoodid ja kordusloogika ajastaja kaudu.

    Moderniseerimine võib tähendada ka seda, et osa funktsionaalsusest eraldatakse teenusest ja käivitatakse ülesandena, samal ajal kui teenus jääb alles üksnes sinna, kus see on valdkondlikult vajalik. See vähendab pidevat koormust ja alandab operatsioonide keerukust.

    Paigaldus- ja uuendusstrateegia: reprodutseeritav, tagasikeritav, auditeeritav

    Paljudes pärandkeskkondades kopeeritakse Delphi‑teenuseid käsitsi ja taaskäivitatakse „ainult korraks“. See on tootmiskeskkondades riskantne. Moodne lähenemine hõlmab:

    • Paketiseerimine: määratletud komplekt binaarist, konfiguratsiooniskeemist, vajaduse korral migratsiooniskriptidest ja release‑märkusest.
    • Versioonihaldus: selge teenuseversioon ja build‑identiteet, mis on logis nähtav.
    • Tagasikerimine: vea korral naasmine eelmisele versioonile ilma pika seisakuajata.
    • Konfiguratsiooni drifti vältimine: sama struktuur kõigis keskkondades, erinevused ainult dokumenteeritud parameetrite kaudu.

    Windows‑teenuste puhul on oluline ka see, kuidas uuendused rakendatakse jooksvalt töötavate tööde ajal. Hea tava on kontrollitud peatus koos „sujuva lõpetamisega“ (graceful shutdown): teenus ei võta enam vastu uusi töid, lõpetab jooksvad üksused korrektselt ja seejärel peatub. See väldib pooleliolevaid andmeolekuid.

    Liidestuste moderniseerimine: REST, failid ja tugevad integratsioonimustrid

    Paljud Delphi‑teenused on integratsiooni sõlmpunktid. Seetõttu tähendab moderniseerimine tihti liideste äriliselt tugevamaks muutmist ilma põhiprotsessi destabiliseerimata.

    REST‑API järelpaigaldus – selge töö- ja käitlusvastutusega

    REST‑API (HTTP‑põhine liides) võimaldab pärandprotsesse portaalide, teiste teenuste või välistest partnerite poolt kontrollitult käivitada. Operatsiooni ja turbe mõttes on sellel neli otsustavat aspekti:

    • Autentimine (nt token‑põhine) ja selged rollid/õigused.
    • Taotluspiirangud (Rate Limits) ja kaitse väärkasutuse eest.
  • Endpunktide versioonimine, et uuendused püsiksid ühilduvad.
  • Jälgitavus Request-ID-de, audit-logide ja määratletud veateadete kaudu.
  • Oluline: Eine REST-Schnittstelle ist nicht automatisch „modern“. Sie ist nur dann ein Gewinn, wenn sie betrieblich beherrschbar ist und klare Verträge (Request/Response, Statuscodes, Timeouts) hat.

    Failipõhised liidesed: valideerimine, kinnitus, arhiveerimine

    Failipõhine integratsioon on jätkuvalt levinud: CSV, XML, JSON, PDF, EDI-formaadid. Moderniseerimine peaks neid liideseid professionaalsemaks muutma:

    • Inbound: atomaarne vastuvõtmine (nt ainult pärast täielikku üleslaadimist), formaadi valideerimine, skeemi kontroll, vigaste failide karantiinikaust.
    • Outbound: unikaalsed failinimed, ajutised kirjutusfailid, alles lõpus „finalisieren“, korralik arhiveerimine.
    • Quittung: tehniline ja funktsionaalne Ack/Nack (nt olekufail või DB-staatus), nii et vead ei jääks „vaikseks“.

    See vähendab tüüpilisi käitusprobleeme: topelt sisse loetud failid, ebaselged seisundid võrguühenduse katkestuste korral ja puuduvad tõendid, millal mis töödeldud sai.

    64‑Bit, Unicode ja platvormiküsimused: moderniseerimine ilma üllatusteta

    Paljud teenused pärinevad ajast, mil 32‑Bit oli standard. Üleminek 64‑Bitile on tihti vajalik (Treiber, Datenbankclients, Windows-Standardisierung). See on aga rohkem kui lihtsalt ümberkompileerimine: pointerite suurused, kolmanda osapoole teegid, COM-sõltuvused ja mälueeldused võivad mõjutatud olla.

    Unicode on sama olulise tähtsusega: kui teenus on ajalooliselt kasutanud ANSI-stringe, võivad erimärgid, teed või rahvusvahelised andmed töötlemisel järsku probleeme tekitada. Moderniseerimisel tuleks seetõttu sihipäraselt kontrollida:

    • Stringide töötlemine failinimedes, CSV/EDI, HTTP-päistes ja andmebaasi väljade puhul.
    • Järjekindel tähemärkide kodeering (UTF‑8/UTF‑16) liidestel.
    • Kolmanda osapoole komponentide ühilduvus teenuse kontekstis.

    IT-planeerimiseks oluline: neid teemasid on kõige parem varakult testida – staging-keskkonnas realistlike andmete ja reaalsete äärmusjuhtudega.

    Järk-järguline moderniseerimine statt Big Bang: ein belastbares Vorgehensmodell

    Suurim risk teenuste moderniseerimisel ei ole tehnika, vaid töö katkestamine. Astmeline lähenemine vähendab riske ja toob kiireid parandusi:

    1. Transparenz schaffen: logimine, versiooniteave, käivitamis-/peatamise käitumine, lihtsad tervisekontrollid.
    2. Konfiguration und Secrets ordnen: selged parameetrid, valideerimine, eraldatud Secrets.
    3. Datenzugriff kapseln: adapter-/repository-kiht, tehingud, selged veakoodid.
    4. Schnittstellen härten: Aegumised (Timeouts), korduskatsetused (Retries) koos backoff-mehhanismiga, kinnitused, idempotentsus.
    5. Deployment professionalisieren: paketimine, rollback, automatiseeritud installi-/uuendussammud.
    6. Optional: Architektur erweitern (REST, Queue, Worker-Pool), wenn Betrieb und Kern stabil sind.

    See mudel on teadlikult üles ehitatud nii, et juba esimesed sammud toovad mõõdetavat kasu: vähem „Black Box“, vähem manuaalseid sekkumisi, selgem põhjusanalüüs. Alles selle järel tasub arendust suunata uute liideste või suuremate platvormimuudatuste poole.

    Tüüpilised käituse komistuskivid – ja kuidas neid vältida

    Mõned probleemid korduvad moderniseerimisprojektides sõltumata konkreetsest äriprotsessist:

  • „Teenus ei käivitu“ pärast värskendust: puuduvad õigused, muudetud teed, VC-runtimide või DB-kliendi mitteinstallimine. Vastumeetmed: installatsioonikontrollnimekiri, preflight-kontrollid käivitamisel, selged veateated.
  • Külmumine krahhi asemel: deadlockid, blokeerivad võrgukutsed, puuduvad ajapiirangud. Vastumeetmed: järjekindlad ajapiirangud, Watchdog/Heartbeat, niiditöötlus (threading) selgete katkestusreeglitega.
  • Vaiksed andmevead: valed andmetüübid, ümardused, Collation-erinevused. Vastumeetmed: valideerimine, testid reaalsete andmetega, selged konverteerimisreeglid.
  • Liiga palju sündmuslogis: logitulv ilma signaalita. Vastumeetmed: mõistlikud logitasemed, agregatsioon, korrelatsioon ja selged, tegevust nõudvad teated.
  • Ebaselge vastutus: kes reageerib alarmidele, kes haldab sertifikaate, kes kinnitab õigusi? Vastumeetmed: operatsioonidokumentatsioon koos vastutusalade ja runbookidega.
  • Moderniseerimine on edukas, kui need teemad ei ilmu tagantjärele, vaid võetakse tehnilisse plaani kindlate nõuetena.

    Einordnung in die Gesamtmodernisierung: Desktop, Portale und Services zusammendenken

    Windows-Services ei seisa tavaliselt isoleeritult. Sageli on need ühine nimetaja Delphi-töölauarakenduste, andmebaasi ja uute veebiportaalide vahel. Sellises maastikus tasub sihtarhitektuuri laiemalt mõelda: teenused kui stabiilne tuum, selged REST- või andmelepingud väljapoole ning klientide otsese juurdepääsu järkjärguline asendamine.

    Kui teete oma maastikus paralleelselt töölaua moderniseerimist või veebiportaalide töid, tuleks integratsioonipunktid varakult selgeks teha: milline loogika kuulub teenusesse, milline kliendi poolele, milline portaalile? Millised andmed töödeldakse süntrooniliselt ja millised asünkroonselt? Sellised otsused säästavad hiljem kulukaid kõveraid teid.

    Fazit: Modernisierung, die Betrieb entlastet und Änderungen wieder planbar macht

    Delphi-Windows-Services on paljudes ettevõtetes protsessilähedaste tarkvaralahenduste kandev osa. Nende väärtus peitub stabiilses äriloogikas – riskid tekivad sageli opereerimise läbipaistmatusest, turvastandarditest, andmejuurdepääsust ja mittereprodutseeritavatest juurutustest. Kes soovib Windows Services koos Delphi moderniseerida, ei peaks alustama suurte arhitektuursete lammutustega, vaid samme tegema nii, et operatsioon koheselt paraneb: hea logimine, selge konfiguratsioon, vähimate õiguste põhimõte, robustsed ajapiirangud, puhtad transaktsioonid ja uuendusi võimaldav juurutus.

    Järkjärgulise lähenemisega on moderniseerimine võimalik ilma Big Bangita: esmalt stabiliseerida ja mõõdetavalt läbipaistvamaks teha, siis sihipäraselt migreerida (64‑Bit, FireDAC, REST) ning lõpuks arhitektuuri nii paigutada, et uued nõuded ei ole enam risk, vaid tavapärane planeeritav muudatus.

    Kui soovite oma teenusemaastikku struktureeritult hinnata ja tuletada usaldusväärne moderniseerimise teekaart, räägime teie raamtingimustest ja opereerimise eesmärkidest:

    Fachliches Umfeldis mängivad olulist rolli ka Delphi Windows Service ja Service-migratsioon, kui integratsioonid, andmevood ja edasiarendus peavad puhtalt koosmängima.

    Projekt oder Modernisierungsvorhaben mit Net-Base besprechen.

    Jaga postitust

    Jaga seda postitust otse

    LinkedIn, X, XING, Facebook, WhatsApp und E-Mail sind sofort verfügbar. Für Instagram bereiten wir Link und Kurztext direkt vor.

    e-post

    Instagram avatakse uues vahekaardis. Link ja lühitekst kopeeritakse eelnevalt lõikepuhvrisse.