Jako vývojáři 4D jste se již možná setkali s potřebou vyvíjet aplikace bez grafického uživatelského rozhraní (GUI), jinak známé jako headless aplikace. Dříve to ve 4D nebylo zcela možné …. až do verze 4D v18! V tomto příspěvku na blogu si projdeme některé z nově dostupných možností, abyste mohli své aplikace vytvářet „bez hlavy“!
Proč vytvářet bezhlavé aplikace? Existuje několik případů použití, například simulace chování systému Windows v systému macOS nebo chování služby Windows bez použití správce služeb atd. Především se ale otevírají nové možnosti, jako je vývoj botů pomocí 4D.
Jak spustit aplikaci 4D v bezhlavém režimu?
Aplikaci 4D nyní můžete spustit v bezhlavém režimu prostřednictvím rozhraní příkazového řádku (CLI) s novým parametrem„headless„. K dispozici je pro všechny typy aplikací: 4D, 4D Server, samostatné, vzdálené a sloučené aplikace. V níže uvedených příkladech je aktuálním adresářem spustitelný adresář.
Příklady pro macOS (pokud je terminál umístěn ve složce „Contents/MacOS“ balíčku):
./4D\ Server –headless MyDatabase.4DLink ./“4D Server“ –headless MyDatabase.4DLink ./4D –headless MyDatabase.4DLink ./MyBuiltRemoteApp –headless |
Příklady pro Windows:
„4D Server.exe“ –headless MyDatabase.4DLink 4D.exe –headless MyDatabase.4DLink MyBuiltRemoteApp.exe –headless |
Přidali jsme nový atribut „headless“ do objektu vráceného funkcí Get application info příkazu. Díky němu je kódování mnohem jednodušší v závislosti na režimu provádění: s rozhraním nebo bez něj.
Poznámka: Když nyní spustíte aplikaci v servisním režimu v systémech Windows, automaticky se spustí jako aplikace bez hlavy. Zastavením služby se aplikace 4D ukončí správným způsobem (například pomocí akce „Quit“ v monitoru aktivity systému macOS).
Co se děje během spouštění?
Možná si říkáte: „Dobře, je to zábava, ale co se stane, když se měl zobrazit dialog?“. Abyste byli informováni o tom, co se děje za běhu, 4D při běhu v bezhlavém režimu automaticky aktivuje diagnostické protokoly. Protokoly zachycují všechna uživatelská rozhraní, která mohla být zobrazena, a zaznamenávají je pomocí značky [{applicationName}.HDLS].
Obecné chování je takové, že 4D zachytí příkazy, které se pokoušejí něco zobrazit, zaznamená varovnou událost s názvem příkazu a jeho řetězcem volání a akci zruší. Existuje několik zvláštních případů:
- Pokud není k dispozici žádná licence, 4D to zaznamená do systémového protokolu událostí a standardních toků a poté ukončí činnost.
- Pokud je třeba databázi převést, 4D to zaznamená do systémového protokolu událostí a standardních toků a poté ukončí činnost.
- Pokud nebyla nalezena žádná dostupná databáze nebo datový soubor, zaznamená to 4D do systémového protokolu událostí a standardních toků a ukončí se.
- Pokud je třeba zobrazit ladicí program, 4D zaznamená chybu a poté simuluje akci „přerušit“.
- Když se zobrazí výstraha, 4D zaznamená a poté simuluje akci „OK“.
- Když je vyvolán příkaz QUIT 4D, 4D zaznamená a poté simuluje akci „OK“.
- Když je třeba sloučenou aplikaci aktualizovat, vytvoří se protokol, provede se aktualizace a aplikace se znovu spustí v bezhlavém režimu.
Příklad:
Například příkaz ALERT provedený na serveru spuštěném jako služba v systému Windows již nezastaví provádění serveru. Systém 4D příkaz automaticky zachytí a zapíše varovný řádek do diagnostických protokolů. Vypadá to takto:
11 2019-07-11 18:53:52 [myTestDatabase Server.HDLS] WARN – (Alert: Test alert label)[{„type“: „projectMethod“, „name“: „myTestAlert“, „line“:2, „database“: „myTestDatabase“}] |
Tento systém byl vytvořen, aby vám pomohl zjistit, co se děje ve vašich bezhlavých aplikacích, a případně vylepšit váš kód.
POUŽITÍ STANDARDNÍCH PROUDŮ SYSTÉMU
Přidali jsme nový selektor, Into system standard outputs, do příkazu LOG EVENT příkazu, abyste mohli posílat text do standardních proudů stdout a stderr. Jak možná víte, příkaz LOG EVENT příkaz má volitelný parametr„importance„. V závislosti na důležitosti události tedy příkaz odešle text do proudu stdout pro Information message a Warning message, a do proudu stderr pro Error message.
Odesílání textu na výstup stdout:
LOG EVENT(Into system standard outputs; "Toto je text pro stdout";Information message)
Odeslání textu na stderr:
LOG EVENT(Into system standard outputs; "Toto je text pro stderr";Error message)
K získání informací generovaných systémem 4D a vaší aplikací můžete také použít přesměrování pro standardní systémové toky stdout a stderr. Ve výchozím nastavení jsou tyto proudy zpravidla směrovány do konzoly, výjimečně na obrazovku, v závislosti na nastavení systému. Standardní proudy můžete přesměrovat například do souborů pomocí následujících příkazových řádků.
macOS: V systému MacOS můžete použít následující příkazy:
.: ./4D –headless MyDatabase.4DLink 1>stdout.txt 2>stderr.txt |
4D –headless MyDatabase.4DLink 1>stdout.txt 2>stderr.txt |
Připomínka pro kombinace přesměrování datových toků:
- 1>outputFile: do souboru bude zapsán standardní výstupní proud namísto výchozího výstupu systému. Soubor se automaticky vytvoří při spuštění příkazu. Pokud již existuje, starý obsah se vymaže.
- 1>>outputFile: stejné chování jako u předchozí syntaxe s tím rozdílem, že pokud soubor již existuje, připojí se k obsahu proudu.
- 2>errorFile: do souboru bude zapsán standardní chybový proud namísto výchozího výstupu systému. Soubor je automaticky vytvořen při spuštění příkazu. Pokud již existuje, starý obsah se vymaže.
- 2>>errorFile: stejné chování jako předchozí syntaxe, s tím rozdílem, že pokud soubor již existuje, připojí se k obsahu proudu.
- 2>&1: proud chyb je sloučen s výstupním proudem.
- 1>&2: výstupní proud je sloučen s proudem chyb.
Poznámka: příkaz open je možné použít i pro spuštění balíčku 4D v systému MacOS, proudy budou generovány tímto příkazem, nikoli aplikací 4D!
Závěr
Tyto nové pokroky umožňují splnit systémové požadavky a také vytvářet nové možnosti, například boty. Je na vás, abyste je zkombinovali s kanály pro kontinuální integraci (CI) a kontinuální testování (CT) vaší softwarové továrny. Vaším jediným omezením je vaše představivost!