Delphi - Keretprogram elkészítése az internetes számlázóhoz

Internetes számlázó 2. rész

forráskód letöltése

Sorozatunk mostani részében az interneten keresztül használható számlázó programunk alapjait készítjük el, hogy a továbbiakban már könnyedén illeszthessük a rendszerhez a szükséges funkciókat. Nézzük miként készíthetünk Delphi-vel interneten használható alkalmazást. Válasszuk a File – New menüpontot, majd a Web Server Application elemet. A megjelenő ablakban a CGI stand alone executable típust használjuk. Ez esetben egy konzol EXE alkalmazás jön létre, mely képes egy-egy web kérést kiszolgálni. Ezt a fejlesztés végeztével konvertálhatjuk ISAPI Dll-é, mely hatékonyabb a működés szempontjából, mint egy EXE, amellyel viszont könnyebben fejleszthetünk.

Létrejön az alkalmazásunkban egy WebModule. Ezen helyezhetjük el a szükséges komponenseinket. Kattintsunk most a WebModule1 Actions property-jére. A megjelenő ablakba vegyünk fel egy új elemet, melynek alapértelmezett neve WebActionItem1 lesz. Ennek Default property-jét állítsuk igazra. Ezekkel a lépésekkel a következőt értük el: amikor érkezik egy kérés az alkalmazásunkhoz, akkor ezt az alapértelmezett WebActionItem1 akció szolgálja ki. Lehetőség van több akció létrehozására, melyeket a PathInfo property felhasználásával tudunk szétválogatni, de amint ez majd látható is lesz, nem feltétlenül szükséges több akció ahhoz, hogy egyetlen alkalmazásunk többféle kérést tudjon kiszolgálni.

Hozzunk lére egy eseménykezelőt a WebActionItem1 OnAction property-jéhez. Ez az eljárás fut akkor, amikor a kérés érkezik, vagyis itt kell elhelyeznünk azt a kódot, mely az eredmény web oldalt generálja. A létrehozott web oldalt a Response objektum Content property-jének kell átadni sztringként. Ha például ide ezt írnánk:
  Response.Content:=’Hello world’;
Akkor megjelenne a Hello world felirat a böngészőben. Ezt ki is próbálhatjuk, ha lefordítjuk az alkalmazást és a kész EXE-t elhelyezzük az internet szerverünk azon könyvtárába, ahonnan futtatni is lehet. Ez alapértelmezésben a scripts könyvtár, melynek alapértelmezett helye: c:\Inetpub\scripts. Ha tehát ide bemásoljuk az EXE-t, akkor azt egy böngészőn keresztül futtathatjuk, ha ott a következő címet írjuk be: http://localhost/scripts/project1.exe. A localhost név változhat, abban az esetben, ha az internet kiszolgáló nem a helyi gépen van, amelyiken dolgozunk, illetve a Project1.exe is változhat, ha más néven mentjük el alkalmazásunkat.

Nézzük most mire is van szükségünk a számlázó programunk nyitólapjának megjelenítéséhez. Létrehozunk egy template könyvtárat. Ebben helyezzük el azokat a szöveges HTML állományokat, illetve HTML részeket, melyekből az alkalmazásunk dinamikusan összeállítja a majdan megjelenítendő web oldalakat. Nem használhatunk kész, előre gyártott HTML-t, mert akkor elvész mindazon lehetőség, amelyet a programmal generált web oldal nyújt. Például minden oldalra helyezhetünk egy bejelentkezési ablakot, melyet bejelentkezés után lecserélhetünk egy olyan szövegre, melyből tudhatjuk, hogy ki az aktuálisan bejelentkezett felhasználó. Ha később változtatni szeretnénk a bejelentkezési ablak kinézetén, akkor elegendő azt az állományt módosítani, melyben ennek HTML kód részlete van és ez a változás máris hatással lesz az összes web oldalunkra.
Statikus HTML oldalakból álló web site esetén minden oldalon végig kellene vinni a változtatást az eredmény eléréséhez.

Adott tehát a template könyvtár, melynek elérési útvonalát a programunknak ismernie kell. Ehhez létrehozunk egy constant.pas állományt, melybe elhelyezünk egy TEMPLATEPATH nevű konstanst, amely a template könyvtár teljes elérési útvonalát adja, \ jellel zárva. A mellékelt példa kipróbálásához a program fordítása előtt írja át az itt található útvonalat arra, ahová másolta.

Létrehozunk itt egy home.dat állományt, mely egy web oldalt tartalmaz HTML kódolásban. Ez lesz az alkalmazásunk nyitó oldala.

Szükségünk lesz továbbá egy ún. virtuális könyvtár létrehozására is. Feltételezzük, hogy a http://localhost/netinvoice/ címen szeretnénk elérni az alkalmazásunkat, ehhez azonban létre kell hoznunk egy netinvoice nevű virtuális könyvtárat. Indítsuk el az Internet Information Services kezelő programját, majd az adott gép web site-ján kattintsunk jobb gombbal és válasszuk a New - Virtual Directory menüpontot. Ekkor elindul egy varázsló, mellyel létrehozhatjuk a virtuális könyvtárat. Meg kell adnunk egy alias nevet, mely legyen netinvoice, majd ki kell választanunk egy fizikai könyvtárat, melyre ezzel az alias névvel hivatkozhatunk. Ez mutasson a mellékelt példa netinvoice alkönyvtárára. Következő lépésben a hozzáférési jogokról rendelkezhetünk. Itt elegendő, ha csak az olvasási jogot biztosítjuk.
A virtuális könyvtár létrehozása után kattintsunk rá jobb gombbal és válasszuk a Properties menüpontot. A megjelenő ablakban a Documents lapon látható egy lista az alapértelmezett dokumentum típusokról. Vegyük fel ebbe a listába az Index.htm-et. Ezzel azt érjük el, hogy amikor egy URL-ben nincs konkrét hivatkozás egy dokumentumra, akkor az alapértelmezett dokumentum névvel rendelkező állomány kerül betöltésre. Tehát az alábbi két hivatkozás egyenértékű lesz:
http://localhost/netinvoice/
http://localhost/netinvoice/index.htm

Nézzük most mit is rejt a netinvoice könyvtár. Tartalmazza a fent említett index.htm, alapértelmezett dokumentumot. Ez kerül megnyitásra, amikor megcímezzük a web site-unkat. Ez a htm gondoskodik arról, hogy aktivizálja a programunkat:
…
<FRAME frameBorder=no marginHeight=10 marginWidth=10 name=content scrolling=yes src="/scripts
   /NetInvoice.exe">
…
Ezen kívül még itt találjuk a web oldalhoz szükséges képeket, stílus lapot.

Nézzük tehát, miként történik egy http://localhost/netinvoice/ kérés kiszolgálása.
A web szerverünk a netinvoice könyvtárból betölti az ott található alapértelmezett index.htm állományt.
Ebben aktivizáljuk az exe-t, melyet már átmásoltunk a scripts könyvtárba.
Az exe alapértelmezett akciójának OnAction eseménye lefut, melyben beolvassuk a templates könyvtárban lévő home.dat állományt és annak tartalmát küldjük vissza a kliens böngészőjébe.

Vizsgáljuk most meg részletesen az OnAction eseményt. Arról már volt szó, hogy adott egy Response objektum, melynek Content property-jének kell értékül adni azt a sztringet, mely tartalmazza web oldalunk elkészített HTML kódját. Hogy ez a sztring miként jön létre és így milyen web oldalt küldünk vissza a kliens felé, az már csak rajtunk múlik.
A home.dat beolvasásához és feldolgozásához most egy TPageProducer komponenst használunk fel.
procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
  try
Ennek HTMLFile property-jében kell megadnunk annak az állománynak a nevét, mely a kérdéses HTML kódot tartalmazza.
    PageProducer1.HTMLFile:=TEMPLATEPATH+'home.dat';
Az állomány megnyitásához és tartalmának kiolvasásához hívjuk meg a PageProducer1 Content nevű függvényét, mely egy sztringbe adja vissza a feldolgozott HTML állományt.
    Response.Content:=PageProducer1.Content;
  except
    on e: Exception do begin
      Response.Content:=e.Message;
    end;
  end;
end;
Megfigyelhető, hogy a teljes kérés kiszolgáló kódja try execept blokkba lett helyezve, így ha bármi hiba történik a feldolgozás során, akkor a kliens web oldalán a hibaüzenet szövege jelenik meg. Nyilvánvaló, hogy egy éles rendszerben ez így nem megfelelő, de amíg fejlesztjük az alkalmazást, addig igen jó módszer a váratlan hibák felfedezéséhez. A programfejlesztés végeztével ezt a hibafigyelő rendszert átalakíthatjuk, vagy akár törölhetjük is.

Mivel a programot minden fordítás után át kellene másolni a Scripts könyvtárba, így ehelyett célszerű a következő beállítást megtenni a Delphi-ben: Project - Options menüpont, majd a Directories lapon az OutputDir ablakába írjuk be a Scripts könyvtárunk helyét, pl.: C:\Inetpub\Scripts. Így a program fordításakor az EXE automatikusan a megfelelő helyre kerül.

Ezzel programunk keretrendszere elkészült, az eddig létrejött alkalmazás már megjeleníti számlázó rendszerünk nyitólapját.



Internetes számlázó cikksorozat