Program (WBIK)

Formßt bloku:

BeginProgram: nßzev_projektu
  °ßdek_bloku_Program
EndProgram;

P°φkazy BeginProgram a EndProgram musφ b²t uvedeny na samostatn²ch °ßdcφch a musφ b²t napsßny bezprost°edn∞ na zaΦßtku °ßdku.

Nßzev_projektu je nepovinn² ·daj. Je to nßzev zdrojovΘho programu v danΘ aplikaci WinBase602, v jeho₧ kontextu mß WBIK provΘst p°φkazy z tohoto bloku Program. P°ed provedenφm t∞chto p°φkaz∙ WBIK nastavφ uveden² zdrojov² program jako projekt. P°φkazy v bloku Program budou pak moci volat procedury a funkce z tohoto projektu a pracovat s globßlnφmi prom∞nn²mi tohoto projektu. Pokud nßzev_projektu je vynechßn, pak musφ p°φkazy z bloku Program volat pouze standardnφ funkce a procedury a nesmφ se odkazovat na prom∞nnΘ zdrojov²ch program∙ danΘ aplikace.

╪ßdek_bloku_Program m∙₧e b²t kter²koliv syntakticky a sΘmanticky sprßvn∞ napsan² °ßdek programu ve vnit°nφm programovacφm jazyku WinBase602.

V²znam:

Tento blok konektoru umo₧≥uje provΘst libovoln² zdrojov² text ve formßtu vnit°nφho programovacφho jazyka WinBase602. V∞tÜinou se vyu₧ije k zavolßnφ procedury s parametrem tvo°en²m vstupnφ prom∞nnou formulß°e a nßsledn∞ pomocφ GetVariable se vypoΦtenΘ hodnoty p°edajφ zp∞t mezi prom∞nnΘ Üablony.

Pokud se m∙₧e v provßd∞nΘm programu vyskytnout chyba, na nφ₧ je t°eba reagovat (nap°. zm∞nou hodnoty ve formulß°i nebo ukonΦenφm provßd∞nφ konektoru), je t°eba v programu volat proceduru SetUserError z knihovny WBINET.DLL. Tato procedura nastavφ chybu Φ. 90 (chyba vyvolanß aplikacφ) a jako chybovΘ hlßÜenφ nastavφ obsah p°edanΘho °et∞zce, tak₧e chybovß Üablona na tuto chybu m∙₧e reagovat. . Bezprost°edn∞ po ukonΦenφ bloku Program (nebo procedury RunProgram), ve kterΘm byla tato procedura zavolßna, Internet klient ukonΦφ provßd∞nφ WBC konektoru a vygeneruje chybovou HTML strßnku dle nastavenΘ chybovΘ Üablony.

Pokud je v konektoru uvedeno n∞kolik blok∙ SQLStatement a Program, pak je WBIK provede v tom po°adφ, v jakΘm jsou uvedeny ve WBC konektoru. Nßsledujφcφ blok (SQLStatement i Program) bude pracovat s daty, do kter²ch budou zahrnuty v²sledky vÜech p°φkaz∙ v p°edchozφch blocφch SQLStatement a Program.

P°ed provedenφm zdrojovΘho textu WBIK je v∞tÜinou nutnΘ nastavit projekt danΘ aplikace. P°ed provedenφm prvnφho bloku Program z danΘho WBC konektoru nenφ nastaven projekt ₧ßdn². Po provedenφ prvnφho bloku Program, kter² po₧aduje nastavit projekt, z∙stane projekt nastaven a₧ do okam₧iku, kdy dalÜφ blok Program bude po₧adovat nastavenφ projektu. Tento fakt tedy znamenß, ₧e pokud prvnφ blok Program nastavφ urΦit² projekt a druh² blok Program nebude po₧adovat nastavenφ projektu, pak p°φkazy druhΘho bloku Program budou provedeny v kontextu projektu, kter² nastavil prvnφ blok Program. Znamenß to takΘ, ₧e globßlnφ prom∞nnΘ projektu budou mφt tu hodnotu, kterou m∞ly p°i ukonΦenφ prvnφho bloku Program. Tφmto zp∙sobem m∙₧eme p°edßvat ·daje mezi bloky Program.

Na tyto vlastnosti nemß vliv ani to, ₧e mezi uveden²mi bloky Program je (jeden, nebo n∞kolik) blok SQLStatement. Druh² blok Program bude v tomto p°φpad∞ pracovat s obsahem databßze, kter² bude obsahovat v²sledky SQL p°φkaz∙ v bloku (blocφch) SQLStatement.

Pokud by druh² blok Program nastavoval ten sam² projekt, budou vÜechny globßlnφ prom∞nnΘ projektu inicializovßny (vynulovßny). Toto je zp∙sobeno tφm, ₧e p°i nastavenφ projektu (i toho samΘho, kter² je momentßln∞ nastaven) jsou inicializovßny vÜechny globßlnφ prom∞nnΘ danΘho projektu.

Pozor!!

V procedu°e vnit°nφho jazyka provßd∞nΘ v bloku Program 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 WBIK, kter² byl pou₧it k provedenφ tohoto konektoru, nikdy neskonΦφ sv∙j b∞h. Spolu s tφmto bude webserver a browser nekoneΦn∞ dlouho Φekat na ukonΦenφ internetovΘho klienta. TakΘ nelze nastavovat tiskßrny, tisknout apod.

Na chybu p°i vykonßvßnφ procedury je nutnΘ reagovat pouze volßnφm funkce SetUserError.

P°φklad 1:

V konektoru se zavolß procedura Soucet_obj z projektu Sumace a p°edß se jφ parametr. VypoΦtenΘ hodnoty se pomocφ GetVariable dostanou zp∞t (vytvo°φ se prom∞nnΘ WBIK s hodnotami globßlnφch prom∞nn²ch projektu Sumace) a je mo₧no je pou₧φt v nßsledujφcφ HTW Üablon∞.

BeginProgram: Sumace
    Soucet_obj(%id_obj%);
EndProgram;
GetVariable: w_bez0:=Nr_bez0
GetVariable: w_bez1:=Nr_bez1
GetVariable: w_bez2:=Nr_bez2

P°φklad 2:

V Üablon∞ je t°eba zobrazit datum ve specißlnφm formßtu, kterΘho nelze dosßhnout prost°edky HTW:

V programu nazvanΘm WWW_procs ulo₧enΘm v aplikaci (jedin² program => tvo°φ projekt) je vytvo°ena procedura Datum():

var
  prom_proj : string[200];

procedure Datum();
var
  i : integer;
  ss : string[20];
  pomstr : string[200];
begin
  i :=  Day_of_week(Today);
  ss := "Dnes je "+(i=0 ? "ned∞le" : i=1 ? "pond∞lφ" : i=2 ? "·ter²" : i=3 ? "st°eda" : i=4 ? "Φtvrtek": i=5 ? "pßtek" : "sobota");
  pomstr := ss+", "+Date2str(Today,4);
  prom_proj := pomstr;
end;

begin
end.

Konektor m∙₧e tuto proceduru zavolat a hodnotu v globßlnφ prom∞nnΘ projektu p°ekopφrovat do novΘ HTW prom∞nnΘ nazvanΘ Datestr:

<%WBC%>
...

BeginProgram: WWW_procs
      Datum();
EndProgram:
GetVariable: Datestr:=prom_proj;
<%/WBC%>

V nßsledujφcφ Üablon∞ lze datum vypsat nap°.:

Vφtejte na naÜich strßnkßch - <%Datestr%><BR>