Většina progressovských vývojářů vyvíjí celopodnikové aplikace převážně v OpenEdge ABL, případně dnes OOABL. Není to však jediná možnost, jak k vývoji přistupovat. Již tradičně Progress umožňuje vyvíjet uživatelské rozhraní pomocí nástrojů třetích stran a přitom komunikovat s ABL procedurami pracujícími v kontextu progressovského aplikačního serveru nebo s přímým napojením na progressovskou databázi. V této sérii příspěvků si ukážeme, jak lze s použitím nástroje Developer Studio efektivně vyvíjet uživatelské rozhraní v prostředí .NET. Mezi hlavními důvody, proč pro vývoj vrstvy uživatelského rozhraní použít prostředí .NET patří, že společností Microsoft podporované prostředí dokáže snadněji přizpůsobovat vzhled aplikací nejnovějším trendům v operačním systému Windows.

Považuji za nutné připomenout, že vývojové prostředí .NET je objektově orientované. Pro správný vývoj je proto předpokladem znalost objektově orientovaných technik. Z našeho krátkého příkladu to sice nebude úplně zřejmé, ale při vývoji složitějších aplikací je tato znalost nezbytná.

V dokumentaci Progress OpenEdge najdete zajímavé příklady celých aplikací, tyto však neukazují vývoj od samotného začátku, nýbrž z předpřipravených polotovarů a vyžívají ovládací prvky společnosti Infragistics, pro které musíte mít další licenci. V našich příkladech použijeme veřejné ovládací prvky Microsoft a OpenEdge

Začneme vytvořením jednoduché aplikace, která zobrazí prohlížeč (mřížku) se záznamy z tabulky Customer a v druhé přidáme do okna prohlížeč (mřížku) s záznamy Orders vybraného záznamu tabulky Customer.

V prostředí OpenEdge Developer Studio 11.7 založíme nový projekt s názvem net1 a typem klienta GUI for .NET.

Image

Připojíme se k databázovému serveru databáze sports2000, vytvoříme nový formulář s názvem fCustomer volbou menu New -> ABL Form a stiskneme tlačítko Finish. Připojení databáze je standardní funkcí nástroje OpenEdge Developer Studio a zde ji již blíže nepopisujeme.

Formulářová třída může být zobrazena ve formě kódu ABL nebo vizuálního kódu (OE Visual Designer). Mezi režimy můžete přepínat například pomocí kláves F9 / Shift + F9.

Z ovládací sady OpenEdge Controls zvolíme ProBindingSource. V záložce Properties změníme výchozí název na bsCust.

Image

Poté nadefinujeme data, která bude zdroj bsCust používat. Z připojené databáze vybereme tabulku Customer a některé sloupce (Fields), které následně budeme umísťovat do prohlížeče.

Image

Nyní nadefinujeme ovládací prvek DataGridView. Vybereme datový zdroj bsCust a případně můžeme změnit pořadí sloupců nebo vyřadit některé sloupce ze zobrazení.

DataGrid.jpg

EditColumns.jpg

Do okna, které se jako výsledek předchozích kroků zobrazilo, přidáme dvě ovládací tlačíka, Orders (Objednávky) a Close (Zavřít).

Tím je vytvořen návrh uživatelského rozhraní. Jedná se zatím o prázdnou obálku. Aby se ve formuláři zobrazovala data a fungovala další logika, je nutné napsat několik fragmentů zdrojového kódu v Progress OOABL. Kód vložíme do zdrojového kódu třídy fCustomer.cls. Pro připomenutí uvádím, že zdrojový kód třídy přes volbu "View Source" na pravé tlačítko myši nebo klávesou F9

Nejprve vytvoříme novou metodu refreshData, která bude číst data z databáze. 

    METHOD PUBLIC VOID refreshData(  ):

DEF VAR bsCustQuery AS HANDLE NO-UNDO.
DEF VAR bsCustString AS CHAR NO-UNDO.
CREATE QUERY bsCustQuery.
bsCustQuery:ADD-BUFFER (BUFFER customer:HANDLE).
bsCustQuery:QUERY-PREPARE ("FOR EACH customer").
bsCustQuery:QUERY-OPEN ().
bsCust:HANDLE = bsCustQuery.
RETURN.

END METHOD.

Dále volání metody přidáme do konstruktoru třídy.

    CONSTRUCTOR PUBLIC fCustomer (  ):

SUPER().
InitializeComponent().
THIS-OBJECT:ComponentsCollection:ADD(THIS-OBJECT:components).
refreshData().

CATCH e AS Progress.Lang.Error:
UNDO, THROW e.
END CATCH.

END CONSTRUCTOR.

Výsledek už vypadá přijatelně:

Volání metody refreshData může být v některých případech nevýhodné, např. je-li tabulka Customer extrémně velká. Stejného efektu dosáhneme, pokud volání metody refreshData vložíme do nové metody fCustomer_Shown, kterou navážeme na události (Events) .NET formuláře Load a Shown. V událostech formuláře vepíšeme název metody přímo k požadované události.

Metoda fCustomer_Shown se automaticky vytvoří ve tříde fCustomer.cls, nám zbývá dopsat volání refreshData. Všimněte si prosím, že k události nelze přiřadit přímo metodu refreshData, a to z důvodu nesouladu vstupních parametrů.

    METHOD PRIVATE VOID fCustomer_Shown( INPUT sender AS System.Object, INPUT e AS System.EventArgs ):

refreshData().
RETURN.

END METHOD.

V .NET formulářích existuje mnoho předdefinovaných nastavení, které můžete využít ke zlepšení funkčností aplikací. Použijme např. volbu AutoSort.

Kliknete-li nyní na názec sloupce, zobrazení se setřídí podle tohoto sloupce, opakovaným kliknutím pak v opačném pořadí.

Na závěr této části si ukážeme nastavení parametru Anchor (ukotvení) a to, jak ovlivňuje vizuální škálovatelnost objektů. Výchozí hodnota ukotvení je Top, Left.

Díky této hodnotě se změnou velikosti okna (formuláře) stane, že pravé a spodní části okna mohou být odříznuty.

Na druhou stranu zvětšení okna nezmění výšku ani šířku tabulky s daty a prostor zůstává nevyužit.

Image

Změňme tedy nastavení ukotvení prohlížeče na Top, Bottom, Left, Right

Image

... a nastavení ukotvení tlačítek na Bottom, Right. 

Image

Po restartu můžeme vidět dopad provedených nastavení. Zmenšení velikosti okna automaticky upraví velikost prohlížeče a tlačítka zůstanou viditelná.

Image

Naopak zvětšení okna automaticky způsobí změnu velikosti prohlížeče. Vpravo uvnitř prohlížeče může vzniknout šedá zóna, protože v prohlížeči nemáme dostatečné množství sloupců. Tlačítka se poslušně přemístí k pravému dolnímu rohu okna.

Image

V příštím pokračování rozšíříme okno o objednávky zákazníka vybraného v prohlížeči.

Autoři: Michal Džmuráň volně dle Piotr Tucholski, Wiesław Kurzątkowski (Novum)


Nahoru