Úvod

Pragmatik je framework pro tvorbu business aplikací hostovaných v prostředí MS Excel.

Pracuje na podobném principu jako dnes hojně používané HTML frameworky. Ty obvykle umožňují pomocí extra atributů přidaných ke standardnímu HTML nadefinovat nějakou požadovanou funkcionalitu, kterou potom vykonává přilinkovaná javascriptová knihovna. Podobně Pragmatik definuje sadu značek, které mohou být umístěny do standardního xlsx dokumentu a které popisují, jak se má která část dokumentu chovat. O realizaci tohoto předepsaného chování se potom stará .NET knihovna Pragmatik.dll připojená k Excelu pomocí technologie COM-Addin.

Základní pojmy

Excelovský list obsahující tyto speciální značky se v terminologii Pragmatiku nazývá SmartSheet. Smartsheety se dále seskupují do Modulů a jeden či více modulů tvoří Aplikaci. Moduly a aplikace ale slouží jen pro lepší členění uživatelského rozhraní (a usnadňují definici uživatelských oprávnění a rolí), veškerá funkcionalita frontendu aplikace je definována ve SmartSheetech.

Úkolem SmartShetu je definovat tyto vzájemně úzce provázané aspekty:

  1. Definice uživatelského rozhraní
  2. Přizpůsobení pásu karet
  3. Přizpůsobení kontextového menu
  4. Akce a Události

Uživatelské rozhraní

Vzhled UI je zcela v režii vývojáře aplikace a používá standardní zobrazovací možnosti Excelu. Formát buňky, vzorce, datové tabulky, grafy, podmíněné formátování, a další. Možnost použít standardní prvky Excelu pro účely požadované agendy je přitom hlavní indikací pro použití řešení na bázi Pragmatiku. Excel se hodí všude tam, kde uživatel potřebuje vyplňovat objednávky, dodací listy, pracovní výkazy, ceníky, tabulky o prodejích a podobně. A samozřejmě všude tam, kde potřebuje zobrazovat a prohlížet data, ať už v podobě tabulek, nejrůznějších grafů nebo kontingenčních tabulek. Ve všech těchto příkladech může Excel nabídnout zkušenému uživateli pohodlnější a efektivnější uživatelské rozhraní než webový prohlížeč.

Pás karet

Základním prvkem pro ovládání Excelu je Ribbon (česky Pás karet). Pragmatik využívá jeho variability a integruje se mezi ostatní ovládací prvky Excelu. Základem je karta Pragmatik, která se v Excelu objeví po instalaci Pragmatiku a obsahuje tlačítko Start pro spuštění/vypnutí Pragmatiku. Po spuštění se zde zobrazí Nabídka aplikací, která slouží pro spuštění/vypnutí požadované aplikace. Má-li uživatel jen jednu aplikaci, tato nabídka se nezobrazuje a aplikace se spouští automaticky při spuštění Pragmatiku.

Po spuštění aplikace se vytvoří Karty modulů aplikace. Lze nastavit, zda se tyto nové karty zobrazí spolu s ostatními kartami Excelu, nebo zda se mají po dobu spuštění aplikace ostatní karty skrýt.

Po přepnutí do karty libovolného modulu se otevře úvodní SmartSheet modulu a spustí se veškerá v něm nadefinovaná funkcionalita. Její součástí je i definice Menu modulu, která obsahuje odkazy na další SmartSheety, které jsou v tomto modulu k dispozici. Pomocí tohoto menu se tak uživatel může snadno přepínat mezi jednotlivými SmartSheety.

Každý SmartSheet má definované vlastní Menu listu, které slouží k ovládání funkcionality daného SmartSheetu. Na konci tohoto menu je vždy tlačítko pro Zavření listu. Tím se daný SmartSheet ukončuje.

V Menu listu mohou být tlačítka pro uložení či načtení dat, různé podmínky pro filtrování zobrazených údajů, výběr časového období, menu pro seskupování a mnoho dalších.

Kontextové menu

Dalším důležitým způsobem ovládání Pragmatiku je kontextové menu. Po kliknutí pravým tlačítkem myši na nějakém objektu se zobrazuje nabídka operací s daným objektem. Často je tímto způsobem řešena navigace mezi jednotlivými SmartSheety, kdy například po kliknutí na konkrétní řádek seznamu turnusů se nabídne možnost otevřít kartu tohoto turnusu. Totéž třeba u seznamu faktur a faktury, seznamu zvířat a karty zvířete a v mnoha dalších případech.

Významným příkladem použití kontextového menu je i tzv. Řádková editace. Používá se v situaci, kdy chceme uživateli umožnit přímo editovat řádky nějaké tabulky. Ve standardním zobrazení se tabulka načítá uzamčená a uživatel nemá možnost do ní zapisovat. Pomocí kontextového menu lze řádek přepnout do režimu editace, kdy se odemkne a pro zvýraznění ještě podbarví. Uživatel provede editaci a nakonec opět pomocí kontextového menu provedenou změnu uloží nebo zruší. Při uložení změny Pragmatik zajistí aklualizaci příslušného řádku tabulky. Vše je navíc možno podmínit členstvím v nějaké roli, takže tato operace bude dostupná jen některým uživatelům.

Akce a Události

Hlavním bodem, kde se definuje chování SmartSheetu (a tím v souhrnu všech SmartSheetů defacto fungování celé aplikace), jsou Akce a Události.

Akce jsou volání interních funcí Pragmatiku, které vykonají nějakou činnost. Například načtou data, zapíší data, zobrazí dialogové okno, zobrazí kontextové menu a podobně. Parametry pro volání těchto funkcí se načítají přímo z konkrétních pojmenovaných buněk Excelu a případné výsledky těchto funkcí se zase do jiných pojmenovaných buněk zapisují.

Události jsou spouštěče akcí. Akce může být spuštěna z pásu karet, z kontextového menu, po otevření listu nebo po změně hodnoty konkrétní buňky.

Jako příklad akce si uvedeme použití příkazů Menu, SqlRead, Delete pro načtení ceníku.Máme formulář, do kterého uživatel postupně zadá Firmu, Lokalitu a Brand a potom se mu zobrazí aktuální ceník pro dané podmínky. Buňky zobrazené na obrázku jsou pojmenované Firma, FirmaNazev, Lokalita, Lokalitanazev, Brand, BrandNazev

Akce a události se do SmartSheetů zapisují v xml formátu pomocí vestavěného editoru a v našem případě Akce navázané na události buňky Brand vypadají takto:

Vidíme zde, že po se po události OnRightClick na buňce Brand zobrazí menu s nabídkou dostupných brandů. Parametry @Firma a @Lokalita potřebné pro vrácení seznamu dostupných Brandů si Pragmatik načte z pojmenovaných buněk Firma a Lokalita.

Po události OnChange, která nastane, pokud uživatel do buňky Brand zadá nějakou hodnotu (ať už přímo z klávesnice nebo pomocí výše definovaného kontextového menu), se spustí příkaz SqlRead, který pro zadaný kód Brandu dohledá jeho název a zapíše jej do buňky BrandNazev. Pokud by uživatel zadal neexistující název Brandu, zobrazí se chybové hlášení.

Na závěr události OnChange se ješte zavolá krok Load, který má na starost vlastní načtení ceníku.

Pro buňku Brand je definována i událost OnClear. Ta nastane, pokud uživatel hodnotu v buňce Brand smaže. V tom případě Pragmatik díky akci Delete automaticky smaže i hodnotu v buňce BrandNazev a zavolá krok Clear, kterým se smaže případně zobrazený ceník.

Následující obrázek ukazuje, jak celá situace vypadá z pohledu uživatele. Na obrázku vlevo vyvolal pravým tlačíkem myši nabídku Brandů, na obrázku vpravo je výsledný stav, kdy se mu načetl požadovaný ceník.

Výše uvedený příklad je oproti reálné aplikaci, z níž pochází, poněkud zjednodušen. U ceníku je zobrazen jen první sloupec s názvy položek, ostatní sloupce s cenami a dalšími citlivými údaji chybí. Zároveň se nevěnujeme popisu fungování operací Load a Clear, které jsou za načtení ceníku odpovědné. Nicméně například v rámci kroku Load udělá Pragmatik zhruba toto:

  • Zavolá nějakou sql proceduru, vracející řádky ceníku, parametry, které tato procedura požaduje (@Firma, @Lokalita, @Brand a případné další), načte ze stejně pojmenovaných buňek.
  • Podle názvů vrácených sloupců zjistí cílovou oblast, do které se mají vrácená data vložit.
  • Zjistí počet vrácených řádků a upraví cílovou oblast tak, aby měla odpovídající počet řádků, v rámci toho na přidaných řádcích nastaví správné formátování.
  • Pokud byly v cílové oblasti nějaké výpočtové sloupce, nakopíruje do nově přidaných řádků odpovídající vzorce.
  • Vloží do cílové oblasti vrácená data.

Rozšiřitelnost

Pragmatik je rozsáhlý a komplexní systém a jeho možnosti pokrývají řadu obvyklých potřeb, se kterými se setkáváme při vývoji desktopových business aplikací. Zde popisovaný SmartSheet je jen základní a nejobecnější komponenta, existuje řada dalších specialozovaných komponent ze SmartSheetu odvozených.

  • DataSheet - přidává podporu pro práci s obsáhlými tabulkami - filtrování, seskupování
  • FormSheet - přidává Operace Find, New, Open, Save, Cancel pro práci s Entitami
  • PivotSheet - pro práci s kontingenčními tabulkami
  • PivotShart - pro práci s kontingenčními grafy

Díky tomu, že všechna důležitá funkcionalita Pragmatiku je definována pomocí rozhraní, je možno jej snadno rozšiřovat o další komponenty a adaptéry. Pro specfické potřeby nějakého řešení lze oddědit od existujícíh Sheetů a udělat vlastní, něčím specializované Sheety. Stejně tak standardní DbAdaptér, pracující proti MS Sql, lze nahradit například Oracle adaptérem.

Pragmatik nejčastěji používá dvouvrstvou architekturu, kdy se desktopová aplikace připojuje přímo k databázovému serveru. Ale ani to není dogma, není problém rozšířit knihovnu akcí o příslušný wrapper a Pragmatik může pracovat v třívrstvé architektuře oproti aplikačnímu serveru.

Použití

Jakkoliv je Pragmatik velmi univerzální a lze s ním realizovat velmi různorodé aplikace, nehodí se samozřejmě úplně na všechno. Zvláště pečlivě je třeba posuzovat jeho výhody a nevýhody oproti webovým business aplikacím.

Nevýhody:

  • Nutnost instalace, závislost na MS Excelu
  • Specifičnost UI
  • Běžné formulářové aplikace pro zadání jednoduchých dat se na webu udělají snadněji.

Výhody:

  • Uživatelský komfort Excelu pro zápis složitějších dat (snadné kopírování, vyplňování přes více řádků najednou, ...)
  • Programátorský komfort Excelu pro analýzu dat (filtrování, kontingenční tabulky)
  • Programátorský komfort Excelu pro vytváření složitějších tabulek se spoustou výpočtů.

Někdy dává smysl realizovat v Pragmatiku jen část agendy týkající se vyhodnocování dat managementem, zatímco pro vlastní pořizování dat se udělá jednoduchá webová apliakce, případně se data k analýze importují z jiných již existujících systémů.

Ukázky realizovaných projektů:

  • Pigmatic - nejobsáhlejší projekt, pořizování a analýza dat
  • Cowmatik - analýza importovaných dat
  • Clucker - analýza dat pořízených přes www rozhraní
  • Bramko - ukázka staršího UI v MS Excel 2003