Formßt bloku:
RunProgram:
program_ve_vnit°nφm_jazyce
Program_ve_vnit°nφm_jazyce je nßzev objektu typu program v aplikaci, kter² obsahuje proceduru s pevn²m jmΘnem RunProgram
, bez parametr∙:
procedure RunProgram;
begin
...
end;
V²znam:
V²znam tohoto bloku konektoru velmi poklesl a je zde uveden pouze z d∙vodu zp∞tnΘ kompatibility aplikacφ.
Pomocφ tohoto bloku lze provßd∞t generovßnφ dynamick²ch HTML strßnek pon∞kud odliÜn²m zp∙sobem, ne₧ konektor Üablona. Ke generovßnφ slou₧φ procedura vnit°nφho jazyka, kterß umφ p°eΦφst vstupnφ formulß°ovΘ a systΘmovΘ prom∞nnΘ a na urΦenß mφsta HTW Üablony dosazovat ji₧ hotovΘ texty.
Generovßnφ textu
V HTW Üablon∞ je definovßn libovoln² poΦet nßv∞Ütφ
<%:nßzev_nßv∞Ütφ%>
Nßzev_nßv∞Ütφ musφ b²t slovo zaΦφnajφcφ pφsmenem (i s diakritikou), nebo znakem _ a obsahujφcφ pouze pφsmena (vΦetn∞ pφsmen s diakritikou), Φφslice a znak _ .
V procedu°e RunProgram
lze pomocφ specißlnφ funkce SendToWeb
generovat na tato nßv∞Ütφ libovoln² text. Tento text m∙₧e obsahovat i formßtovacφ znaΦky HTML - viz p°φklad.
Blok RunProgram
m∙₧e b²t v konektoru i na vφce mφstech, lze generovat text vφcekrßt na stejnß nßv∞Ütφ (starÜφ text se v₧dy "odsune dop°edu"). Bloky se provedou v tom po°adφ, v jakΘm se naleznou v konektoru.
╚tenφ vstupnφch prom∞nn²ch
V procedu°e lze p°eΦφst vstupnφ prom∞nnΘ, kterΘ byly p°edßny webserverem tomuto WBC konektoru.
Funkce, kterΘ lze pou₧φt v procedu°e RunProgram
, jsou ulo₧eny v knihovn∞ WBINET.DLL, kterß je souΦßstφ dodßvky WinBase602. Funkce je nutnΘ proto deklarovat jako externφ. V p°ilo₧enΘm includu I_WBINET.PGM (soubor v adresß°i s WinBase602) jsou vÜechny pot°ebnΘ deklarace ji₧ uvedeny, nejjednoduÜÜφ cestou je tedy vlo₧it include do VaÜeho programu. P°edtφm pochopiteln∞ musφme naimportovat tento soubor a tφm vytvo°it nov² databßzov² objekt typu program.
POZOR!!:
RunProgram
nesm∞jφ b²t provßd∞ny akce, kterΘ vy₧adujφ interakci s u₧ivatelem!! P°edevÜφm nesmφ tato procedura otevφrat jakßkoliv informaΦnφ okna (Info_box
, YesNo_box
, Input_box
), okna se zprßvou o chyb∞ (Signalize
), ani ₧ßdnΘ prvky prezentaΦnφ vrstvy (pohledy, menu atd.)!! Pokud by tyto akce procedura provßd∞la, bude po jejich zobrazenφ Φekat na akci u₧ivatele (stisknutφ tlaΦφtka ap.) a dφky tomu internetov² klient WinBase602, kter² byl pou₧it k provedenφ tohoto konektoru, nikdy neskonΦφ sv∙j b∞h. Spolu s tφmto bude webserver a WWW browser nekoneΦn∞ dlouho Φekat na ukonΦenφ internetovΘho klienta.Na chybu p°i vykonßvßnφ procedury RunProgram je nutnΘ reagovat pouze volßnφm funkce SetUserError
.
Blok RunProgram
lze kombinovat s "obvykl²m" zp∙sobem generovßnφ dynamickΘho HTML dokumentu (tj. pomocφ SQLStatement
, bloku Program
a bloku GetVariable
). Lze si p°edstavit situaci, kdy mΘn∞ komplikovanΘ Φasti HTML dokumentu jsou generovßny "klasicky" a pro generovßnφ nap°. komplikovan∞jÜφch formulß°∙ je pou₧it blok RunProgram
.
Provoz na Linuxu
ZdrojovΘ texty procedury RunProgram
mohou b²t stejnΘ jako p°i provozu na platform∞ Windows. Je t°eba naincludovat I_WBINET.PGM (bez ohledu na to, ₧e v n∞m jsou v²Üe zmφn∞nΘ funkce oznaΦeny jako externφ, nachßzejφcφ se v knihovn∞ WBINET.DLL). CGI klient (Linux) p°i provßd∞nφ procedury RunProgram poznajφ volßnφ t∞chto funkcφ a nehledß knihovnu WBINET.DLL, ale tyto funkce zavolß p°φmo, proto₧e se nachßzejφ v Internet klientovi pro tyto OS.
Dφky tomuto °eÜenφ lze pou₧φvat stejnΘ konektory a procedury RunProgram
beze zm∞ny jak na platform∞ Windows, tak na platform∞ Linux.
P°φklad kombinujφcφ oba zp∙soby pou₧itφ - na nßv∞Ütφ v Üablon∞ vypφÜe nßzvy a obsah vstupnφch prom∞nn²ch:
HTW Üablona
<%WBC%> RunProgram: Test_runprogram <%/wbc%> <html><head><title>Titulek</title></head> <body>
Seznam vstupnφch prom∞nn²ch:<br>
<table border=0 cellpadding=0 cellspacing=2> <%:promenne%> </table> <p>
Obsah prvnφho nßv∞Ütφ: <%:navesti1%>
</body> </html>
Program Test_runprogram
{$I I_wbinet} procedure RunProgram; var varcount,i:short; varname,varvalue:string[255]; begin
// vypsat vstupnφ prom∞nnΘ na nßv∞Ütφ promenne
varcount:=GetVarCount; for i:=0 to varcount-1 do begin varname:=""; if( GetVar(i,varname) ) then begin GetVarValue(i,varvalue); SendToWeb("promenne","<tr><td>"); SendToWeb("promenne",varname); SendToWeb("promenne","</td><td>"); SendToWeb("promenne",varvalue); SendToWeb("promenne","</td></tr>"); end else SetSTWError("GetVar failed"); end;
// vypsat libovoln² dalÜφ text na nßv∞Ütφ navesti1 a navesti2 SendToWeb("navesti1","text na nßv∞Ütφ 1");
end; begin end.