Upgrade Orchard Core řešení: Od statických formulářů k asynchronním PDF kalkulacím
Transformace původního monolitického sběru dat do moderní, bezpečné aplikace s interaktivními kalkulátory a automatickým generováním PDF na míru.
YesSql přes pevně daný kontroler. Nové řešení přináší pokročilý JavaScriptový API modul pro výpočty, plynulou integraci s Orchard Core Workflows a bezpečné asynchronní otevírání vygenerovaných PDF dokumentů přímo na straně klienta.
Co bylo cílem a s čím jsem bojoval
Původní systém fungoval primárně jako katalog kuchyňských materiálů (obsahující název, cenu, texturu a popis) s navázaným statickým odesíláním kontaktních údajů. Poptávky zákazníků zachytával klasický C# kontroler a ukládal je jako zprávy rovnou do databáze pomocí YesSql indexování. Tento přístup sice zvládal základní uložení dat, ale absolutně postrádal okamžitou interakci. Zákazník si nemohl webově nakonfigurovat různé prvky a neviděl výsledek. Proces byl těžkopádný, chyběla mu moderní dynamika a neposkytoval uživateli okamžitou vizuální cenovou nabídku.
Jaké technologie a přístupy dostaly hlavní roli
Pro transformaci do interaktivní podoby bylo zásadní přesunout aplikační logiku blíž k uživateli. Využil jsem asynchronní JavaScriptové API v kombinaci s interaktivními prvky uživatelského rozhraní, které bezpečně komunikují se serverem a Workflows systémem.
Asynchronní API Modul
Jádrem se stal nový klient ChudobaCalcPdf, který využívá moderní Fetch API pro komunikaci na pozadí, zajišťuje odesílání dat jako multipart/form-data a automaticky parsuje případné chyby serveru pro zobrazení uživateli.
Dynamické UI a Průvodci
Pro krokové kalkulace skříněk (modulWidthNtb), dveří a schodů byly navrženy flexibilní číselné vstupy, záložky a propracované seznamy. Ty reagují na akce uživatele bez nutnosti znovunačítání stránky.
Nativní Integrace s Workflows
Odesílání finální kalkulace se nyní dynamicky mapuje na skrytá pole (action, method, encType) a data plynule putují přímo do nativních Orchard Core Workflows, což otevírá obrovské možnosti pro následnou automatizaci.
Porovnání: Starý přístup vs. Nové řešení
Přechod na plně asynchronní komunikaci přinesl nejen podstatné zrychlení uživatelské cesty, ale i zásadní posílení bezpečnosti v rámci architektury formulářů.
| Vlastnost / Metrika | Původní stav | Nové řešení |
|---|---|---|
| Základní platforma a výkon | Zastaralé jádro Orchard Core 1.2 běžící na ukončeném .NET Core 3. | Vysoce optimalizovaný Orchard Core 3.0.1 poháněný moderním .NET 10. |
| Zpracování formulářů | Pevný backendový DatabaseStorageController, který pouze přijal zprávu a uložil objekt typu CalculationMessage. | Dávkové JS odesílání plnohodnotných FormData přímo na dynamické endpointy pro Orchard Core Workflows. |
| Ochrana proti CSRF | Základní validace odeslaného formuláře na úrovni MVC kontroleru. | Skript automaticky vyhledá RequestVerificationToken napříč stránkou a injektuje ho do HTTP hlaviček každého Fetch a AJAX požadavku. |
| Zpětná vazba pro zákazníka | Nulová okamžitá hodnota, systém jen vypsal oznámení o uložení. | Vrácení přímého JSON response ze serveru s okamžitým, synchronním otevřením finálního PDF dokumentu. |
Jak celý systém funguje v praxi
Největší technologickou výzvou při vývoji nového řešení bylo bezpečné stažení nebo otevření složité PDF kalkulace tak, aby prohlížeče agresivně neblokovaly vyskakovací okna. Jelikož výpočet PDF chvíli trvá, asynchronní volání serveru způsobilo, že pokus o otevření karty až po obdržení dat byl prohlížeči vyhodnocen jako nepovolený. Úspěšná realizace spočívala ve vytvoření synchronní "čekací" záložky (openInNewTab), která se ukáže přesně v milisekundě kliku uživatele a nese text "Připravuji PDF…".
Z bezpečnostního hlediska se do této dočasné karty nastaví parametr opener na null (tzv. ochrana proti reverse tabnabbing útokům). Na pozadí hlavní stránky se přes JS Promise odešle požadavek. Jakmile server dokument zdárně vygeneruje, adresa čekací záložky se plynule přesměruje na nově vzniklou PDF URL. Pokud selže samotné API nebo prohlížeč zablokuje i první krok, skript zachytí chybu a zobrazí uživateli čitelnou zprávu, aniž by došlo ke smazání rozpracované kalkulace. Výsledek je čistý, stabilní a uživatelsky velmi přívětivý.
Časté otázky a odpovědi
Proč u generování PDF rovnou nestahujete soubor běžným tlačítkem?
Výpočet položek a sestavení komplexního PDF u větších kalkulací zabere serveru několik vteřin. Běžné HTML tlačítko pro stažení funguje jen u souborů, které už reálně existují. Při okamžitém otevírání nového okna prohlížeč vyžaduje rychlou uživatelskou interakci. Řešení s dočasným "Připravuji PDF" načítacím oknem elegantně obchází tyto restrikce bez kompromisů na bezpečnosti.
Jak toto řešení pomáhá škálovat do budoucna?
Klíč je v univerzálnosti JS komunikace, oddělení backendu a robustním základu Orchard Core 3.0.1. Modul je napsán tak, že dynamicky čte formovací atributy (action, method, prefix) přímo ze skrytých polí komponent. Můžeme proto přidat libovolný počet dalších kalkulátorů napříč portálem a všechny budou nativně plnit Orchard Core Workflows a generovat API volání bez nutnosti programovat novou složitou C# logiku.