Knihovna NCrontab slouží pouze k analýze cronových výrazů a není sama o sobě plánovačem úloh. Tento nástroj vám umožňuje pracovat s cronovými výrazy, které jsou běžně používány k naplánování úloh v Unixových systémech, ale v tomto případě je aplikována na prostředí C# a .NET.
Začněme tím, že vytvoříme projekt, který využívá knihovnu NCrontab pro generování naplánovaných událostí na základě výrazu. Postup je následující:
Nejdříve vytvoříme nový projekt typu Console Application v C# a přidáme závislost na knihovnu NCrontab. Poté otevřeme soubor Program.cs, kde můžeme provést následující úpravy.
Generování a analýza cronového výrazu
Pro příklad si vybereme časový interval pro rok 2023. Definujeme startovní a koncový čas, jak je uvedeno v následujícím kódu:
Tento kód definuje cronový výraz, který udává, že události budou probíhat každých 30 sekund. Můžete si povšimnout, že mezi jednotlivými poli v rámci výrazu jsou mezerami oddělené komponenty pro sekundy, minuty, hodiny, dny v měsíci, měsíce a dny v týdnu.
Pochopení syntaxe cronových výrazů
Cronové výrazy se skládají z několika částí, přičemž každá část je definována specifickým časovým intervalem. Výraz 0,30 * * * * * znamená:
-
Sekundy: 0 a 30 (každých 30 sekund)
-
Minuty: každou minutu
-
Hodiny: každou hodinu
-
Dny v měsíci: každý den
-
Měsíce: každý měsíc
-
Dny v týdnu: každý den v týdnu
Výstup je zobrazen s každým časovým intervalem, na který byl naplánován úkol. Tímto způsobem je možné snadno vytvořit plánování pro jakýkoliv časový interval.
Je důležité mít na paměti, že výstup zahrnuje pouze "následující" události. Začátek výpočtu (v našem případě 1. leden 2023) není zahrnut mezi výstupy, pokud neodpovídá nastavené frekvenci výrazu.
Příklad s jiným výrazem
Pokud chceme změnit cronový výraz, například na 0 0 */4 * * *, znamená to, že úloha bude vykonána každé 4 hodiny v rámci celého dne:
Tento výraz vyvolá události každé 4 hodiny, jak je vidět v následujícím výstupu:
Důležité je si uvědomit, že výstup nezahrnuje počáteční čas (v našem případě 1. leden 2023, 00:00:00), protože by to nebylo "následující" vyvolání události.
Praktické využití
Pro testování různých výrazu a různých časových intervalů si můžete upravit jednotlivé komponenty výrazu a tím simulovat různé scénáře plánování. Tento přístup vám umožní nejen testovat různé výrazy v rámci časového rozmezí, ale také se seznámit s dynamikou časového plánování v reálných podmínkách.
Kromě toho je užitečné si ověřit, že každý cronový výraz je kompatibilní s vašimi potřebami. Například pokud byste potřebovali rozvrh pro specifické dny v týdnu nebo měsíci, budete schopni upravit jednotlivé složky výrazu podle toho, co je požadováno.
Jak funguje výchozí webová aplikace ASP.NET Core MVC
Ve výchozím šabloně projektu ASP.NET Core MVC je několik základních aspektů, které je důležité pochopit, pokud plánujete s tímto rámcem pracovat. Tento projekt, jako základ pro vývoj webových aplikací, je navržen tak, aby vyhovoval běžným potřebám při vytváření aplikací s autentizací a správou uživatelů. Když otevřeme soubor launchSettings.json ve složce Properties, zjistíme, že je nastavena náhodná čísla portů pro HTTP a HTTPS. To znamená, že každý vývojář může mít jiná portová čísla na svém místním počítači, což je důležité pro nastavení správného chování serveru během vývoje.
Pro HTTPS profil je obvykle třeba upravit čísla portů, aby odpovídala konkrétní konfiguraci. K tomu stačí změnit hodnoty v konfiguraci souboru tak, aby odpovídaly požadovanému rozsahu portů. Jakmile jsou změny provedeny, stačí aplikaci uložit a spustit.
Po spuštění projektu pomocí zvoleného profilu (např. HTTPS) a prohlížeče, jako je Google Chrome, je možno začít zkoumat výchozí chování webu. Na úvodní stránce aplikace uvidíme základní rozvržení, včetně navigačního menu a odkazu na registraci, přihlášení a další základní odkazy. Pokud zúžíme šířku okna prohlížeče na méně než 575 pixelů, navigační menu se změní na tzv. hamburger menu, což je časté chování v responzivních webových aplikacích.
Dalším zásadním krokem, který je ve výchozím nastavení implementován, je dvoufázová registrace uživatele. Při registraci uživatel vyplní e-mailovou adresu a heslo, a následně obdrží e-mail s potvrzovacím odkazem. Tento krok slouží k ověření, že registrující se osoba má přístup k uvedené e-mailové schránce. I když ještě není nakonfigurován žádný poskytovatel e-mailu pro odesílání e-mailů, tento krok je důležitý pro dodržení zásad bezpečnosti.
Po úspěšné registraci a potvrzení účtu se uživatel přihlásí a získá přístup ke správě svého účtu. V rámci správy účtu může uživatel měnit své osobní údaje, včetně e-mailu a hesla, a také aktivovat dvoufázové ověřování, pokud přidá autentizační aplikaci. To je klíčová součást ochrany uživatelských dat a zajištění compliance s evropským nařízením o ochraně osobních údajů GDPR.
Pokud přejdeme k prozkoumání struktury projektu, zjistíme, že složky a soubory v projektu mají specifické funkce, které jsou zásadní pro jeho správné fungování. Složka Areas obsahuje soubory potřebné pro integraci s ASP.NET Core Identity, která slouží k autentizaci a autorizaci uživatelů. Složky bin a obj obsahují dočasné soubory používané během procesu sestavování aplikace. Kód aplikace je strukturován podle MVC (Model-View-Controller) vzoru, což znamená, že složka Controllers obsahuje třídy, které se starají o logiku aplikace, zatímco složka Views obsahuje soubory Razor, které generují HTML obsah.
Složka Data obsahuje migrační třídy pro Entity Framework Core, který slouží k ukládání dat, včetně uživatelských údajů pro autentizaci. Pokud používáte SQLite, najdete zde soubor app.db, který slouží jako databáze pro ukládání informací o registrovaných uživatelích. V konfiguraci aplikace, která je obsažena v souborech appsettings.json a appsettings.Development.json, jsou nastavení pro připojení k databázi a různé úrovně logování, které jsou načítány během běhu aplikace.
Pro vývojáře, kteří chtějí projekt dále přizpůsobit, je důležité vědět, jak upravit konfigurace, jako je například připojení k databázi, implementace autentizačních mechanismů nebo přizpůsobení šablon zobrazení. Nejdůležitější součástí této aplikace je její flexibilita a možnost přizpůsobení různým potřebám. Na výchozím webu je například implementováno responzivní chování a zabezpečení uživatelských účtů, ale vývojář může projekt přizpůsobit jakémukoliv specifickému scénáři.
Tato aplikace nejen usnadňuje vývoj webových aplikací s autentizací, ale také poskytuje solidní základy pro budování komplexních systémů, které splňují požadavky na bezpečnost a ochranu osobních údajů. Je důležité si být vědom nejen základních kroků, jako je konfigurace portů a databáze, ale také pokročilých aspektů, jako je implementace dvoufázového ověřování nebo zajištění soukromí podle platných právních předpisů.
Jak správně využívat Bootstrap Icons v Blazor WebAssembly aplikacích
V dnešní době jsou ikony základní součástí každé webové aplikace. Bootstrap Icons je skvělý nástroj, který vám umožní přidat do vaší aplikace různé vizuální prvky s minimálním úsilím. Tento nástroj nabízí širokou škálu ikon pro různé účely, ať už jde o upozornění, informace nebo varování. V tomto článku se podíváme, jak využít Bootstrap Icons v projektu Blazor WebAssembly a jak je kombinovat s dalšími komponentami pro tvorbu interaktivních aplikací.
Začneme tím, že propojíme náš projekt s knihovnou Bootstrap Icons. V projektu Northwind.BlazorWasm.Client, ve složce wwwroot, je nutné upravit soubor index.html, kde přidáme element pro načítání ikon. Tento element je nezbytný pro správnou funkci ikon, které budeme používat v celé aplikaci. Příklad kódu může vypadat takto:
Následně, v souboru _Imports.cshtml, importujeme jmenný prostor pro statické třídy BootstrapColors a BootstrapIcons, které nám usnadní práci s barvami a ikonami Bootstrapu. Tento krok je důležitý pro zjednodušení přístupu k těmto vlastnostem v celém projektu.
Dále se zaměříme na vytvoření vlastní komponenty, která bude využívat tyto ikony. V Blazoru se pro tento účel často používají Razor komponenty. Pro ilustraci si ukážeme, jak vytvořit komponentu pro zobrazení upozornění pomocí Bootstrap ikony. Komponenta Alert.razor bude používat bindovatelné parametry pro nastavení vlastností, jako je barva, ikona nebo nadpis zprávy.
V tomto příkladu je každé upozornění zobrazeno s ikonou, která je definována pomocí třídy BootstrapIcons. Uživatelé mohou kliknout na tlačítko pro zavření upozornění, pokud je komponenta nastavená jako dismissable. Toto chování se jednoduše implementuje pomocí Bootstrap třídy pro zavírací tlačítko.
V dalším kroku přidáme tuto komponentu do hlavní stránky Index.razor, kde ji použijeme ve formě Bootstrap kontejnmentu, a to jak pro globální, tak pro specifické upozornění, například pro zobrazení varování pouze pro uživatele ve Spojených státech.
Při testování aplikace v prohlížeči si všimneme, že naše upozornění se správně zobrazuje s definovanou ikonou a barvou, což nám poskytuje jasnou vizuální indikaci pro uživatele.
Stejný princip lze aplikovat na různé komponenty, jako jsou seznamy, formuláře nebo navigační prvky. Důležité je, že ikony a barvy můžeme kombinovat s jinými komponentami Blazoru a tím vytvářet interaktivní a vizuálně přitažlivé uživatelské rozhraní.
Jakmile máme základní komponenty připravené, můžeme přejít k dalšímu kroku, kterým je tvorba webové služby pro správu dat. Například, můžeme vytvořit komponentu pro správu zaměstnanců, která umožní jejich zobrazení, vytvoření a úpravy v databázi. Tento proces zahrnuje nejen tvorbu UI komponenty, ale i napojení na minimal API pro zajištění komunikace s databází.
V souvislosti s implementací CRUD operací je důležité správně nakonfigurovat všechny potřebné závislosti, včetně připojení k databázi a zajištění bezpečné komunikace mezi serverem a klientem.
Tvorba routovaných komponent v Blazoru je další krok, který přidává flexibilitu aplikaci. Pro tento účel se používá syntax @page, která určuje, jaké URL adresy budou směřovat na konkrétní komponenty. Například komponenta Employees.razor může být zpřístupněna prostřednictvím URL /employees/{country?}, kde parametr country umožňuje filtrovat záznamy podle země. Tato funkce se snadno přizpůsobí a umožňuje tak vytvářet dynamické aplikace, které reagují na různé URL parametry.
Při vytváření těchto webových komponent je důležité pamatovat na správnou strukturu kódu, aby byla aplikace snadno udržovatelná a rozšiřitelná. Vhodně zvolené názvy komponent, jasně definované parametry a správně nastavené routování jsou klíčem k úspěchu při vývoji Blazor aplikací.
Pokud je váš cíl vytvářet plně funkční webové aplikace s Blazor WebAssembly, je nezbytné rozumět nejen základní implementaci komponent, ale i pokročilým technikám jako je připojení k API nebo správné řízení stavu aplikace. Komponenty, které vytváříte, by měly být co nejvíce opakovaně použitelné a měly by být snadno konfigurovatelné pro různé scénáře použití.
Jak implementovat funkce pro správu zákazníků v aplikaci .NET MAUI
Vytváření aplikací pro mobilní zařízení pomocí .NET MAUI nabízí širokou škálu možností pro interaktivní a dynamické aplikace. Důležitou součástí každé aplikace je správné řízení dat a efektivní manipulace s uživatelským rozhraním, což se v .NET MAUI provádí prostřednictvím MVVM architektury a dvoucestného datového bindingu. V této kapitole se zaměříme na implementaci a testování základních funkcí pro správu zákazníků v mobilní aplikaci.
V první řadě je důležité pochopit, jak .NET MAUI zachází s rozloženími v uživatelském rozhraní. Pokud umístíte ovládací prvek do mřížky (Grid), automaticky získá vlastnosti Grid.Row a Grid.Column nastavené na hodnotu 0. To znamená, že pro ovládací prvky jako je popis pro zákaznické ID (Customer Id), není nutné explicitně nastavovat tyto vlastnosti. Na druhé straně pro ovládací prvky jako vstup pro ID zákazníka stačí nastavit pouze sloupec.
V následujícím kroku se podíváme na kód, který implementuje stránku pro detail zákazníka v aplikaci. Tento kód zobrazuje, jak lze využít konstruktorů pro správu zobrazeného modelu a jak lze nastavit různé stavy uživatelského rozhraní v závislosti na tom, zda se jedná o přidání nového zákazníka, nebo úpravu existujícího.
V tomto příkladu jsou dva konstruktory. První konstruktor je určen pro přidání nového zákazníka. Nastaví kontext pro binding na nový model zákazníka a změní název stránky na "Přidat zákazníka". Druhý konstruktor se používá při úpravě existujícího zákazníka. V tomto případě je skrytý tlačítko pro vložení, protože v režimu úpravy se tento krok nevyžaduje.
Testování aplikace na Android emulátoru ukazuje, jak aplikace reaguje na uživatelské interakce. Po spuštění aplikace a přechodu na stránku zákazníků, uživatel může snadno upravit údaje, jako je název společnosti, a všechny změny budou okamžitě synchronizovány díky dvoucestnému datovému bindingu. Tlačítko pro vložení nového zákazníka umožňuje přidat zákazníka do seznamu a po jeho uložení se uživatel vrátí zpět na seznam zákazníků.
Další užitečnou funkcí je možnost volání telefonu přímo z aplikace. Při stisknutí tlačítka "Telefon" se zobrazí výzva k volání čísla vybraného zákazníka. Pokud uživatel zvolí "Ano", aplikace přepne na nativní telefonní aplikaci zařízení a zahájí hovor.
Pokud jde o práci s webovými službami, moderní mobilní aplikace vyžadují bezpečné připojení k serverům, což je zajištěno protokolem HTTPS a politikou Apple App Transport Security (ATS). I když .NET MAUI umožňuje připojení k nechráněným službám, jako je tomu v případě aplikace, která využívá samopodepsaný certifikát, je nutné věnovat pozornost těmto bezpečnostním omezením. Pro jednoduchost můžeme v aplikaci povolit nezabezpečené připojení a vypnout bezpečnostní kontroly.
Pokud bude aplikace používat webové služby pro správu zákazníků, bude nezbytné implementovat API, které umožní odesílání a přijímání dat. Tento API bude komunikovat s databází, jako je například Northwind, a zajišťovat operace jako přidávání, úprava a mazání zákazníků.
Na závěr je nutné zmínit, že při vytváření aplikace je kladeno důraz na uživatelskou přívětivost a bezproblémovou interakci s daty. Využití správného vzoru návrhu jako je MVVM, kde modely a zobrazení jsou oddělené, umožňuje flexibilitu při vývoji a usnadňuje údržbu kódu. Také je třeba se ujistit, že aplikace bude správně reagovat na různé scénáře, jako je editace existujících dat nebo přidávání nových záznamů. Bez těchto funkcí by aplikace mohla ztratit na použitelnosti.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский