Follow Us on Twitter

Ontwikkelen met Oracle Application Express (HTML-DB 2.0)

Gepubliceerd in

Maart 2006 - Voor PL/SQL ontwikkelaars is de stap naar Java en JDeveloper vaak groot. Toch willen ook zij webapplicaties bouwen. Bovendien profiteren lang niet alle applicaties van een J2EE opzet. Nou kon dit altijd al met MOD_PL/SQL, maar als je Forms gewend was is het hard werken om een leuke GUI en een robuuste sessie voor elkaar te boksen. HTML-DB biedt een goed alternatief en wint terecht snel aan populariteit. Over eerdere versies verschenen al Whitebooks, maar in deze geven we de beginnende ontwikkelaar wat aanknopingspunten bij het gebruik van de Application Builder.

Nieuwe naam

Recentelijk is met de introductie van de nieuwe versie herdoopt naar Oracle Application Express 2.0 en wellicht is dit het einde van de tot nu toe vrij bescheiden marketing rondom dit product. Op bepaalde forums is het 'nieuwe' product inmiddels gedoopt als TAFKAH (The Application Formerly Known As HTML-DB), maar de afkorting APEX lijkt te gaan winnen. De tool draait op database 9i Release 2 en hoger en is standaard geïnstalleerd op de gratis 10g Express database.

Applicaties

Voordat je kunt beginnen met ontwikkelen, maak je een workspace aan, waarbinnen een of meer applicaties gemaakt kunnen worden. Bij het aanmaken van een applicatie kun je onder “Application attributes” de applicatie configureren. Hier zijn o.a. de GUI look-n-feel en het pad naar een centrale directory met afbeeldingen, javascripts en stylesheets in te stellen. Geef hier ook aan of gemaakte applicatie met edit links beschikbaar is en voor wie. De ontwikkel- en runtime omgeving zijn namelijk niet gescheiden en puur een kwestie van autorisatie. Wanneer een applicatie meertalig moet zijn, leg hier dan ook de moedertaal vast, van waaruit vertaald wordt en of de runtime taal bepaald wordt door de browser, user preferences of een control op de webpagina. Het standaard datumformaat wordt bepaald door het NLS_DATE_FORMAT van de database.

Navigatie

De wizards maken standaard gebruik van tabbed pages om tussen pagina’s te navigeren, maar het is uiteraard ook mogelijk zelf via buttons of een menu de navigatie te realiseren. Het is mogelijk om subtabjes te maken binnen een tabset. Wijzigingen achteraf in deze tabstructuur zijn echter niet triviaal en het is dan slim de applicatie eerst te bouwen met blanco pagina’s om de navigatie te testen. Binnen de webpagina is net als bij Forms per item het volgende item vast te leggen waarna genavigeerd moet worden.

Page Edits en Wizards

Naast page attributes als de header en footer, toolbars, menu’s en de on-load javascripts kan met een wizard de content van de pagina razendsnel worden opgebouwd om deze vervolgens met bovenstaand scherm te verfijnen.

Een webpagina wordt onderverdeeld in regions. Bij het maken van de content binnen zo’n region kan met behulp van wizards bijv een HTML blok, form, rapport, WebPL/SQL content, boomstructuur gemaakt worden of een externe URL of webservice aangeroepen worden. Deze versie heeft nog geen lay-out editor zoals in .NET om controls te positioneren, maar deze is wel gepland voor release 3.0 (eind 2006). De scherminvoer of andere functionaliteit kan bij het laden of door een expliciete submit van de gebruiker gevalideerd worden. Dit kan binnen HTML-DB zelf of met PL/SQL of een webservice. Vooral de wizards voor het creëren van forms en reports bieden razendsnel veel mogelijkheden. In een formwizard is bijvoorbeeld aan te geven of voor het wijzigen van de onderliggende tabel een sequence, trigger of procedure gebruikt moet worden. Met de “Report with Form” wizard maak je bijvoorbeeld binnen een minuut een scherm op een tabel, waarbij standaard voor elke rij een edit button staat. Bij klikken wordt een pop-up scherm gegenereerd om gegevens van die rij te manipuleren.

Handig is de Run-button zodat na aanpassing snel getest kan worden of de wijziging werkt. Het tonen of read-only maken van een item of region onder bepaalde voorwaarden is ook bijzonder krachtig handig. Op deze manier zijn de pagina’s eenvoudig te personalizen voor de ingelogde eindgebruiker. Onderstaand plaatje toont een klein deel van de mogelijke condities.

Shared Components

De shared GUI components pool is beperkt en helaas is het niet mogelijk om zelf gemaakte content in een repository te zetten voor hergebruik in andere applicaties. Op dit moment kunnen tabsets, waardelijsten, breadcrumbs, toolbars, lijsten en look-n-feel thema’s geshared worden. Wel is het mogelijk om zelf gemaakte componenten naar andere applicaties te kopiëren.

Workflow

De tool is bij uitstek geschikt om een invoerproces te automatiseren en de eindgebruiker te dwingen een reeks stappen/schermen te doorlopen afhankelijk van de keuzes van de gebruiker. Onderstaand plaatje is een voorbeeld van hoe dit binnen de Application Builder zelf is toegepast. De Application Builder is namelijk zelf ook met HTML-DB gebouwd. Links in het scherm zijn de te doorlopen stappen terug te vinden.

Foutafhandeling

Bij validaties en page processing, query’s en DML is het mogelijk om error- en andere messages als attribuut van het item in te voeren. Het is echter niet zonder meer mogelijk om een in een package zelf gedefinieerde PL/SQL exception in HTML DB te tonen tenzij deze expliciet door de aangeroepen procedure geretourneerd wordt. Generieke afhandeling is dan niet mogelijk. Dit kan wel wanneer de PL/SQL error stack uitgelezen wordt. Zelf logging en messages tabellen maken ligt echter meer voor de hand. Oracle errors worden wel geretourneerd.

Versiebeheer en omgevingen

Als administrator kun je wizards gebruiken om de gehele applicatie te exporteren en importeren. Er kan ook een sql-script gegenereerd worden om tegen een andere database te draaien of in een versiebeheertool op te slaan. De page lock is nuttig om te voorkomen dat meerdere ontwikkelaars tegelijkertijd dezelfde pagina wijzigen. Ook kun je meerdere versies gewoon naast elkaar laten draaien. Neem dan in de configuratiefile van de HTTP server een alias voor een redirect naar de productieversie.

redirect /application "http://server.com/pls/htmldb/f?p=101:1"

Ook kan de status van de verschillende versies in een tabel worden bijgehouden zodat de eindgebruiker altijd een vaste url heeft naar een package wat doorverwijst naar de startpagina van de gewenste versie.

http://server.com/pls/htmldb/application
CREATE OR REPLACE PROCEDURE application IS
  BEGIN
  SELECT <> INTO var;
  f(p)=> var;
  END application;

Binnenkort komt release 2.2 uitgebracht met o.a. een framework voor distributie en deployment van applicaties. Het is nog even afwachten welke extra mogelijkheden dit gaat bieden.

User Management

Er zijn drie soorten users (administrators, developers en users). Users krijgen geen een edit link onder aan de webpagina en mogen niet debuggen en geen sessiedata bekijken. De users kunnen handmatig aangemaakt worden, maar er kan ook gebruik gemaakt worden van LDAP, Single Sign On, Internet Directory of ingehaakt worden op user management van andere applicaties.

Sessie management

In de meeste webapplicaties wordt voor de duur van een sessie een request object in het geheugen geladen. In dit object wordt de toestand van de data voor de duur van een gebruikersessie bijgehouden. In HTML-DB worden deze sessiedata echter in interne tabellen vastgelegd. Bij elke nieuwe submit wordt opnieuw verbinding gemaakt met de database en de sessietoestand automatisch opnieuw opgehaald. De programmeur hoeft dus geen aandacht te besteden aan sessiemanagement. In MOD_PL/SQL bijvoorbeeld is de sessie een stuk lastiger bij te houden. Bij druk bezochte webpagina’s is deze intensieve interactie tussen database en applicatie wel een potentieel probleem.

Gestructureerd programmeren

In veel gevallen is het verstandig om PL/SQL code zoveel mogelijk buiten de HTMLDB source in packages te bundelen en de HTMl-DB GUI te scheiden van de applicatielogica om hergebruik binnen en buiten de applicatie te bevorderen. Anderzijds is er ook iets voor te zeggen alle code in HTML-DB te laten. Deze code leidt namelijk niet tot extra coderegels omdat bij het renderen van de pagina’s van steeds dezelfde packages gebruik wordt gemaakt en de metadata de functionaliteit bepalen. Zolang je niet zelf componenten, zoals een read-only conditie op basis van een PL/SQL blok, kunt definieren als een shared component ben je wel gedwongen bij hergebruik deze code op nieuw te tikken. Het is ook aan te bevelen om bij grotere applicaties de PL/SQL code te isoleren in packages. Hetzelfde geldt voor javascripts en CSS stylesheets. Ook hier is het verstandig deze te centraliseren op de webserver om hergebruik binnen en buiten HTML-DB te bevorderen.

Conclusie

Oracle Application Express is bijzonder geschikt om snel en intuïtief een GUI op een onderliggende database te ontwikkelen en daarom ook een prettige ontwikkeltool. De tool is eenvoudig onder de knie te krijgen en de MOD Pl/SQL ontwikkelaars zullen de APEX wizards nooit kunnen bijbenen. Over performance en schaalbaarheid zijn tegenstrijdige verhalen. Bij sommige implementaties wordt intensief javascript gebruikt om het netwerk minder te belasten, maar andere applicaties lijken zonder veel javascript te draaien met meer dan 10.000 users. De eigen ervaring leert dat de validaties en applicatielogica zo snel zijn, dat ze client-side uitgevoerd lijken te worden. APEX lijkt vooral in de markt gezet voor het bouwen van kleinere applicaties al is HTMLDB zelf het beste voorbeeld dat zonder problemen complexe applicaties gemaakt kunnen worden. In combinatie met de gratis Express database komt in ieder geval je eigen webhosting met Oracle technologie binnen handbereik. Voor applicaties, waarbij het accent ligt op interactie met de database zonder al te veel applicatielogica, is APEX een serieus alternatief voor complexere JDeveloper applicaties.

In een volgens whitebook gaan we wat dieper in op het inzetten van stylesheets, javascript, XML en AJAX en behandelen we file I/O, security, de meegeleverde HTML-DB packages en het versturen van e-mail.

Literatuur

Over de auteur
Paul Theeuwen werkt sinds 9 jaar als software ontwikkelaar met Oracle tools en is gespecialiseerd in het vertalen van bedrijfsprocessen in integratie- en business intelligence en Oracle Apps oplossingen.

Waardering:
 

Reacties

Nieuwe reactie inzenden

De inhoud van dit veld is privé en zal niet openbaar worden gemaakt.

Meer informatie over formaatmogelijkheden

CAPTCHA
Deze vraag is om te testen of u een persoon bent en om spam te voorkomen
Image CAPTCHA
Enter the characters shown in the image.