e-book Budte chytří při vytváření aplikací zakladatel APEX Solutions & autor e-booku
představení e-booku a autora APEX je nástroj, který umožňuje psát webové aplikace nad Oracle Databázi rychle, efektivně, bezpečně a spolehlivě. Umožňuje vytvářet aplikace klikáním v APEX Builderu nebo psaním PL/SQL procedur s využitím APEXových API. K napsání aplikace je dobré si osvojit pár jednoduchých zásad, které pomůžou při psaní a udržovaní aplikací. Ing. Kamil Schvarcz zakladatel APEX Solutions & autor e-booku už od roku 2008. Tehdy se změnil můj pohled na vývoj a prototypování webových aplikací tak, že dnes už vím, u které části aplikace se můžu spolehnout na kvalitní Jako architekt APEXových aplikací se věnuji vývoji v APEXu framework a čemu věnovat energii při návrhu a kódování. Z těchto zkušeností potom při použití APExu vznikají naše webová řešení pro úspěch. Osobně garantuji, že použitím APEXu budou vyvinuté aplikace svým uživatelům umožňovat mnohem víc pohodlí při každodenní práci.
1. úvod Vytvořit první APEXovou aplikaci dle dostupných návodů, tutoriálů a selského rozumu se každému povede velice rychle. Cílem této e-book je popsat jednoduché kroky a možnosti, kterými je dobré se řídit při návrhu a tvorbě aplikace. V jednotlivých kapitolách si ukážeme kroky před započetím tvorby aplikace ale i kroky, které je možné řešit průběžně při psaní APEXových aplikací. 2. MVC - oddeleni UI od Logiky Model-view-controller (MVC) je softwarová architektura, která rozděluje datový model aplikace, uživatelské rozhraní a řídicí logiku do tří nezávislých komponent tak, že modifikace některé z nich má jen minimální vliv na ostatní. Obecně řečeno, vytváření aplikací s využitím architektury MVC vyžaduje vytvoření tří komponent, mezi které patří: Model (model), což je doménově specifická reprezentace informací, s nimiž aplikace pracuje. View (pohled), který převádí data reprezentovaná modelem do podoby vhodné k interaktivní prezentaci uživateli. Controller (řadič), který reaguje na události (typicky pocházející od uživatele) a zajišťuje změny v modelu nebo v pohledu.
3. Logiku zobrazovaní (VIEW) přesunte do APEXu HTML template + CSS Pro projekty si vytvořte sadu HTML template, která budete používat pro zobrazeni stránek, regionů, buttonů, popisků položek (items), kalendářů, breadcrumbs a reportů. Ideálně je začít s jednou témou z které se bude vycházet a v ní si upravovat jednotlivé templaty podle vlastních požadavek. APEX zveřejňuje zdrojové soubory pro templaty (css, scss, images, psd, js) pro témy 23, 24, 25, 26 a 50 společné s distribuci APEXu na stránkách OTN. Statické soubory kaskádové stýly, javascriptové knihovny a obrázky přesuňte na disk tak, aby byli dostupné pro webový servr (Apache, Tomcat a pod) z jednoho adresáře např. http://server:port/files. Vytvořte zástupný string pro jednodušší manipulaci s adresářem napr.: FILES = /files a odkazy na obrázky, css a javascriptové knihovny v templatech odkazujte pomocí &FILES./image.png.
4. Nepoužívat HTML v SQL dotazech V APEXu je hodně místa, kde sa dá vložit vlastní kód pro změny vzhledu výstupních dát, které jsou mimo SQL dotazů do databáze. Nejčastější problémy při psaní HTML v SQL dotazech: těžké znovu použiti zdrojového kódu, nutí to k úpravám SQL pro změnu prezentace, má dopady na škálovatelnost. Formátovaní položek zařídíme na přímo v APEXu. Sloupce reportů Data v sloupcích reportů je možné doplnit o HTML formátovaní, které bude oddělené od vykonávaného SQL dotazu v časti Column formating. Pro zobrazení hodnoty sloupce se používá syntax s #column# (pozor toto volání je case sensitive). Pokud pro zobrazení potřebujeme kombinaci více sloupců z databáze, tyto sloupce vytáhneme z DB dotazem, ale v APEXu zobrazíme jenom jeden sloupec a ostatní nastavíme jako hidden.
Formulářové sloupce Zobrazeni formulářových polí je závislé na typu, v jakém chceme zobrazit prvek v HTML. Pro editaci zobrazení je možné využít položky element, pomocí které nastavíme CSS styl, parametre HTML elementu nebo obalíme HTML element vlastníma HTML značkami.
5. Přesunout anonymní PL/SQL bloky do databáze APEX má uložený kód v tabulkách, takže pro každé zobrazení kódu, který se má vykonat potřebuje jeho run-time kompilování a každé kompilování zabere systémový čas. Přesunutím kódu do databáze a jeho překompilováním zabezpečíme rychlejší vykonání generováni stránek. Přesunutím kódu do databáze získáme také možnosti pro jednodušší testování, izolaci problémového kódu a v neposledním radě jednodušší vícenásobné použití kódu. Dále tím předejdeme problémům s délkou použitého kódu, protože některé APEXové pole uchovávají data v databázi ve sloupci typu VARCHAR2(4000). K přesunutí anonymních bloků do databáze použitě SQL developera, který obsahuje nástroj na refaktoring v časti Application Express:
Vygeneruje se package a package body se všemi anonymními bloky z APEXu, pojmenovanými podle názvu místa, kde sa anonymní blok v APEXu vyskytuje: podle názvu regionu/validácie/procesu v APEXu se vytvoří několik rovnako pojmenovaných objektů, nepřepisuje se voláni APEXových proměnných jejich volání je potřebné upravit tak, aby se z nich stali parametre vzniknuté procedury resp. funkce; pro uchování funkčnosti je potřebné definovat typ parametru (in, out, in out) Při definici je zobrazené místo v aplikaci, kde se daný kód nachází: /******** SUGGESTED CALL TO PLACE INTO THE PROCESS ****************** PAGE ID: 11 PAGE NAME: Contact_for_conference P11_CO PROCESS NAME: Get user data BEGIN jfcontacts.getuserdata; END; *******************************************************************/
6. Vyhnete se používaní APEXových promenných v uložených PL/SQL kódech V každé proceduře, která potřebuje získat hodnotu APEXové proměnné, potřebuje databáze značné množství databázového výkonu k získání obsahu těchto proměnných. Funkce v resp. nv není deterministická (DETERMINISTICKÁ = funkce vrací stejnou výslednou hodnotu vždy, když je volána se stejnými hodnotami pro své argumenty). Pro získání hodnoty APEXových proměnných využívejte bindovanú syntax např. pro vstavané proměnné :APP_USER, :APP_ID, :SESSION_ID. Chybné volání: CREATE OR REPLACE FUNCTION my_func() RETURN VARCHAR2 AS BEGIN IF v( my_apex_item ) = 1 THEN RETURN xxx ; ELSE RETURN yyy ; END IF; END my_func; Správné volání: CREATE OR REPLACE FUNCTION my_func(ip_my_apex_item NUMBER) RETURN VARCHAR2 AS BEGIN IF ip_my_apex_item = 1 THEN RETURN xxx ; ELSE RETURN yyy ; END IF; END; Správné volání z APEXu: BEGIN my_func(:my_apex_item); END;
7. Využívejte statistiky Oracle nám umožňuje spočítat si statistiky kolik, čeho a kam bylo umístěno, vyhledáváno a podle toho si sám uspořádat všecko tak jak potřebuje, aby se mu pro naši konkrítní tabulku s našimi konkrétními nároky co nejlépe počítalo. Cost-based optimizer v databáze hledá plán s nejmenšími náklady a k tomu využívá statistiky. Statistiky pro vaše APEX aplikace APEX je napsaný v databáze, využívá databázové objekty a proto také využívá Cost-base optimalizátor teda statistiky. Spočítáním statistík bude teda i chod APEXových aplikací přesnější a výkonnější. Spuštěni pod SYS resp. SYSTEM: BEGIN dbms_output.put_line( Gathering statistics for current schema ); dbms_stats.set_param(pname => CASCADE, pval => TRUE ); dbms_stats.set_param(pname => GRANULARITY, pval => ALL ); END; dbms_stats.gather_schema_stats(ownname => APEX_040200, options => GATHER, force => TRUE); dbms_output.put_line( DONE );
Profil autora Kamil Schvarcz je zkušený analytik, návrhář a vývojář se silným zázemím vývoje databázových aplikací s webovým rozhraním. Jeho začátky s programováním jsou spojené s vývojem aplikací v prostředí PHP/MySQL při budování e-commerce aplikací v prostředí B2C. Později se věnoval databázovým aplikacím v Oracle DB v bankách a vývoji v Oracle Application Express od verze 3.1. V současné době je jednatelem společností QuickCode s.r.o.. zakladatel společnosti QuickCode s.r.o. (4/2007), která poskytuje služby APEX Solutions (1/2011) Oracle APEX architekt práce s APEXem od verze 3.0 (4/2008) >10 let zkušeností s webovými technologiemi (HTML, CSS, JavaScript, Apache, Tomcat) >10 let zkušeností s databázemi MySQL, PostgreSQL, Oracle DB, MS SQL >5 let zkušeností s Oracle DB lektor pro technológie Oracle Application Express, HTML, jquery Dovednosti: Databases skills PL/SQL - Oracle, MySQL, PostgreSQL, DB modeling tools Sybase Power designer DB designer Oracle SQL Modeler Web developer skills PHP, Oracle Apex, Google API, XML, XSLT, XML-RPC, WSDL JavaScript, HTML, CSS, jquery Ajax Kontakt e-mail kamil.schvarcz@apex-solutions.cz linkedin http://cz.linkedin.com/in/kamilschvarcz blog http://blog.apex-solutions.cz