Serißl CachΘ Studio

dφl 4

Daniel KutßΦ, InterSystems CZ, 2002

 

┌vodem

Serißl CachΘ Studio nabφzφ postupn² v²klad prßce se systΘmem CachΘ vΦ. praktick²ch p°φklad∙. V ucelen²ch tΘmatech jednotliv²ch dφl∙ se jejich autor - ing. Daniel KutßΦ, sales engineer InterSystems B.V. - v∞nuje mo₧nostem univerzßlnφho aplikaΦnφho a databßzovΘho serveru CachΘ vΦ. poslednφch novinek. Objas≥uje v Φem jsou hlavnφ v²hody CachΘ - nap°. rychlost a mohutnost databßzovΘho stroje, rychlost v²voje, rozÜi°itelnost aplikacφ, snadnß kooperace s r∙zn²mi technologiemi a pru₧nß reakce na poslednφ technologickΘ trendy. Ke ka₧dΘmu dφlu jsou p°ipraveny zdrojovΘ k≤dy, kterΘ vhodn∞ ilustrujφ p°φklady z textu.

Serißl CachΘ Studio je vhodn²m dopl≥kem k ostatnφm studijnφm nßstroj∙m, kterΘ spoleΦnost InterSystems B.V. nabφzφ: dokumenty v sekci webov²ch strßnek Technologie CachΘ, tiÜt∞nΘ materißly nebo jednodennφ trΘnink CachΘ EntrΘe, kter² firma po°ßdß ka₧d² m∞sφc: http://www.intersystems.cz/.

V₧dy m∙₧ete svΘ informace doplnit na americk²ch strßnkßch http://www.intersystems.com/ nebo nßs p°φmo kontaktovat info@intersystems.cz.

V∞°φme, ₧e se budete ke CachΘ Studiu se zßjmem vracet.


 

Skriptovacφ jazyky CachΘ

To, co Φinφ CachΘ tak mocn²m nßstrojem pro tvorbu aplikacφ, je bezesporu mo₧nost psßt aplikace pomocφ CachΘ vlastnφch skriptovacφch jazyk∙. CachΘ krom∞ databßzovΘho stroje toti₧ obsahuje tΘ₧ stroj skriptovacφ, jen₧ umo₧≥uje programßtor∙m psßt libovolnΘ programy pro manipulaci s daty a pro zpracovßnφ libovoln²ch transakcφ.

S jistou dßvkou zjednoduÜenφ lze CachΘ sm∞le pova₧ovat za ôprogramovacφ jazykö stejn∞ jako nap°. C, Javu, Visual Basic aj. V CachΘ lze napsat celΘ aplikace, ani₧ by k≤d jakkoli p°istupoval k dat∙m ulo₧en²m v databßzi a manipuloval s nimi.

Nap°φklad lze napsat aplikaci v CachΘ, kterß bude fungovat jako ômessage brokerö, tedy bude zprost°edkovßvat komunikaci mezi aplikacemi (a databßzemi) t°etφch stran, p°ijφmat, zpracovßvat a odesφlat zprßvy od p∙vodce k p°φjemci.

V souΦasnΘ dob∞ je mo₧no v CachΘ pou₧φt dva skriptovacφ jazyky a p°φpadn∞ je i kombinovat. Historicky starÜφm je jazyk CachΘ ObjectSkript, nov∞ je pak k dispozici CachΘ Basic. Oba jazyky jsou rovnocennΘ, z obou zdrojov²ch k≤d∙ vznikß stejn² zkompilovan² k≤d. To, Φφm se oba jazyky liÜφ, je samoz°ejm∞ syntaxe a filosofie. CachΘ ObjectScript nemß na prvnφ pohled z°ejmou analogii v jinΘm programovacφm jazyce, zatφmco CachΘ Basic byl vytvo°en ·mysln∞ tak, aby co mo₧nß nejvφce p°ipomφnal Visual Basic.

CachΘ ObjectScript

CachΘ ObjectScript je ve svΘ podstat∞ jazykem procedurßlnφm. Pomocφ CachΘ ObjectScriptu je mo₧no psßt samostatnΘ, na objektech nezßvislΘ ·seky k≤du, tzv. rutiny. Rutina je soubor jednoho nebo vφce dφlΦφch celk∙, procedur nebo funkcφ.

Rutinu lze volat z CachΘObjectScriptu nebo I i z CachΘ Basicu zadßnφm volitelnΘho nßv∞Ütφ a nßzvu rutiny.

Nap°. mßme-li rutinu dil4.MAC (nebo dil4.INT, p°φpadn∞ dil4basic.BAS) zavolßnφm

 

Do ^dil4

Zavolßme rutinu dil4 (nejvyÜÜφ ·rove≥, tj.MAC pokud existuje, jinak INT nebo BAS) od prvnφho °ßdku. Chceme-li volat specifickou proceduru nebo funkci, nap°. NapisText budeme psßt:

 

Do NapisText^dil4(öAhoj!ö)


Pomocφ CachΘ ObjectScriptu lze psßt tΘ₧ t∞la metod CachΘ t°φd. V tomto p°φpad∞ se procedurßlnφ tvß° jazyka zastφrß.

CachΘ ObjectScript nenφ jazykem uzav°en²m do sebe sama. Pomocφ call-in a call-out rozhranφ je mo₧no volat z a do CachΘ z jazyka C. (To z toho d∙vodu, ₧e CachΘ je mo₧no provozovat na mnoha r∙zn²ch operaΦnφch systΘmech, jejich₧ zßkladem je, a¥ chcete nebo ne, prßv∞ jazyk C.)

CachΘ ObjectScript se od v∞tÜiny programovacφch jazyk∙ v mnoha ohledech liÜφ. Nap°φklad nemß rezervovanß slova. Dßle v podstat∞ nepracuje s datov²mi typy (na programßtorskΘ ·rovni). Z toho pak plynou na jednu stranu legraΦnφ d∙sledky (nap°. lze napsat k≤d:)

 

Goto goto

goto

Set goto=1

Zde slovo ögotoö znaΦφ jak p°φkaz, tak nßv∞Ütφ, tak i nßzev prom∞nnΘ.

Na druhou stranu lze napsat nap°.

 

Set x = ö13.2aö

 

If +x write öpravdaö

 

Set x = öxö

 

If +x write öpravdaö

 

Else write önepravdaö

Zde se v prvnφm p°φpad∞ öxö vyhodnotφ jako pravda, zatφmco v druhΘm jako nepravda, platφ toti₧ ₧e °et∞zec ö13.2aö se vyhodnocuje jako logickß hodnota TRUE, nebo¥ jej lze unßrnφ operacφ ö+ö p°evΘst na Φφslo (13.2) r∙znΘ od nuly.

 

P°φkazy

P°φkazy CachΘ ObjectScriptu jsou jednoduchΘ, vychßzejφ z angliΦtiny. Chcete-li nap°. napsat na aktußlnφ v²stupnφ za°φzenφ slovo öAhoj!ö staΦφ jen provΘst p°φkaz WRITE öAhoj!ö

Ka₧d² p°φkaz mß i svou podmφn∞nou podobu, to znamenß, ₧e se provede jen v  p°φpad∞, ₧e danß podmφnka je spln∞na. Podmφnka se uvßdφ znakem dvojteΦka, nap°. WRITE:x=2 öAhoj!ö

P°φkazy lze zapisovat na °ßdky za sebe, musφ se vÜak odd∞lit znakem ömezeraö. P°φkazy, kterΘ nemajφ argumenty (nap°. ELSE), musφ b²t odd∞leny dv∞ma mezerami. Ka₧dß °ßdka k≤du zaΦφnß voliteln∞ nßv∞Ütφm nßsledovan²m tabulßtorem nebo mezerou a pokraΦuje p°φkazy.

CachΘ ObjectScript je jazyk, jen₧ rozliÜuje u nßzv∙ malß a velkß pφsmena. V²jimkou jsou p°φkazy a systΘmovΘ prom∞nnΘ.

Funkce a Procedury

Funkce jsou v CachΘ vnit°nφ (systΘmovΘ) a vn∞jÜφ (u₧ivatelskΘ). Vnit°nφ funkce se volajφ s uvedenφm znaku ö$ö p°ed nßzvem, vn∞jÜφ funkce uvedenφm ö$$ö. Funkci lze volat i jako proceduru, tedy bez po₧adovßnφ nßvratovΘ hodnoty. Procedury se na rozdφl od funkcφ volajφ p°esn∞ podle jejich nßzv∙.

Jak procedurßm, tak funkcφm lze p°edßvat parametry, a to bu∩ hodnotou, nebo odkazem. P°edßvß-li se hodnota prom∞nnΘ odkazem, musφ se p°ed nßzev prom∞nnΘ p°idat znak ö.ö

 

Prom∞nnΘ

Prom∞nnΘ jsou v CachΘ dvojφ, persistentnφ, zvanΘ globßly, a doΦasnΘ, existujφcφ pouze v pam∞ti vyhrazenΘ procesu. Globßl se znaΦφ znakem ö^ö p°ed nßzvem. Tedy prom∞nnΘß ö^xö a öxö jsou dv∞ r∙znΘ prom∞nnΘ. K prvnφ z nich majφ p°φstup vÜechny procesy, ke druhΘ jen proces, v n∞m₧ je nastavena.

Prom∞nnΘ v CachΘ nenφ t°eba nijak deklarovat p°ed jejich prvnφm pou₧itφm, automaticky se deklarujφ samy.

Chceme-li, aby prom∞nnΘ byly zapoud°eny v rßmci procedury nebo funkce, deklarujeme je pomocφ p°φkazu NEW.

Naopak, chceme-li oznaΦit prom∞nnΘ jako ve°ejnΘ, zadßme je do seznamu [PUBLIC ], kter² je volitelnou souΦßstφ deklarace procedure nebo funkce.

SystΘmovΘ prom∞nnΘ majφ jako prvnφ znak op∞t ö$ö, ale ke zmatenφ s funkcemi nedochßzφ, kompilßtor z kontextu poznß, zda se jednß o funkci nebo prom∞nnou.

 

Makra

V CachΘ ObjectScriptu existujφ t°i ·rovn∞ rutin. NejvyÜÜφ je ·rove≥ makro (MAC), v tΘ se zpravidla pφÜe aplikaΦnφ k≤d. O ·rove≥ nφ₧e se nachßzφ ΦßsteΦn∞ p°elo₧en² k≤d (INT), kter² sestßvß z ΦistΘho ObjectScriptu v textovΘ form∞, vÜechna makra jsou v n∞m rozvinuta. Nejnφ₧e se pak nachßzφ binßrnφ k≤d (OBJ), p°elo₧en² a p°ipraven² k interpretaci databßzov²m strojem.

Makra se mohou definovat p°φmo v MAC rutinßch ale zpravidla se kv∙li p°ehlednosti definujφ ve zvlßÜtnφ kategorii rutin, vlo₧en²ch (INC) soubor∙. P°i odkazu na makra je nutno zadat cestu k INC souboru(∙m) a jednotlivß makra se volajφ zadßnφm ö$$$ö p°ed nßzev makra.

Prßce s objekty

Pro prßci s objekty existuje n∞kolik metod. Zßkladnφmi jsou %New, %Open, %OpenId.

Pro vytvo°enφ novΘ instance t°φdy User.Osoba je nutno zadat p°φkaz:

 

Set osoba=##class(User.Osoba).%New()

Zde je vid∞t pou₧itφ konstrukce ##class

Alternativn∞ je mo₧no pou₧φt volßnφ

 

Set osoba=$system.OBJ.New(öUser.Osobaö)

Rozdφl mezi prvnφ a druhou konstrukcφ spoΦφvß v tom, ₧e prvnφ kontrukce se zkompiluje do OBJ k≤du a nelze ji tedy za b∞hu programu m∞nit, zatφmco u druhΘ kontrukce je nßzev °φdy parametrem metody a lze tedy v runtime zadßvat r∙znΘ nßzvy t°φd.

Pracujeme-li s persistentnφmi objekty, musφme rozliÜovat d∙sledn∞ mezi identifikacφ objektu v pam∞ti a identifikacφ tΘ₧e instance na disku. Jeûli objekt naΦten do pam∞ti, pak prom∞nnß, kterß na n∞j ukazuje, se naz²vß OREF (Object reference), v naÜem p°φpad∞ je to prom∞nnß öosobaö. Odkazujeme-li se na objekt na disku, pou₧φvßme ID (Identitu) instance.

Nap°.:

 

Set id=1

Set osoba=##class(User.Osoba).%OpenId(id)


Pracujeme-li s vlastnostmi objektu, pou₧φvßme znßmou objektovou teΦkovou synta
xi.

Nap°Nap°.:

 

Set osoba=##class(User.Osoba).%OpenId(1)

Write osoba.Jmeno

Set osoba.Prijmeni=öHorßkö

Write osoba.Adresa.Ulice

Set sc=osoba.%Save()



SQL

P°i psanφ rutin v CachΘ ObjectScriptu je mo₧no s v²hodou kombinovat r∙znΘ jazyky vlo₧enφm ·sek∙ k≤du napsan²ch v n∞kterΘm z podporovan²ch jazyk∙. Jednφm z nich je SQL.. Ten je mo₧no s v²hodou pou₧φt pro vyhledßvßnφ dat v databßzi.

Nap°φklad m∙₧eme napsat takov²to k≤d:

Obr. 1

Na obrßzku je demonstrovßno pou₧itφ jednoduchΘho SQL dotazu a tΘ₧ i pou₧itφ kursoru pro prßci s vφcero vrßcen²mi zßznamy.

 

HTML

P°i psanφ webov²ch aplikacφ v CachΘ (podrobn∞ se tomuto tΘmatu budeme v∞novat v dφle v∞novanΘm CSP technologii) je mo₧no Φßst k≤du napsat v rutin∞, v nφ uzav°φt ·seky HTML k≤du, kterΘ se provedou na stran∞ webovΘho klienta. Zpravidla vÜak se takov² k≤d pφÜe do metod registovan²ch t°φd, kterΘ provßd∞jφ serverovou aplikaΦnφ logiku. Nßsledujφcφ obrßzek obsahuje malou ukßzku.

Obr. 2




JavaScript

P°i psanφ dynamick²ch webov²ch aplikacφ Φasto vyvstßvß pot°eba modifikovat klienta dynamicky. Toho lze docφlit v praxi dv∞ma zßkladnφmi zp∙soby, pomocφ JavaScriptu, jen₧ je podporovßn v∞tÜinou intenetov²ch prohlφ₧eΦ∙, a pomocφ VBScriptu, jen₧ je podporovßn Microsoftem.

CachΘ podporuje vklßdßnφ ·sek∙ JavaScriptu do k≤du Cache ObjectScriptu. JavaScript lze vklßdat jak do rutin, tak do metod t°φd.

Jednoduchou ukßzku vlo₧enΘho JavaScriptu ukazuje nßsledujφcφ obrßzek.

Obr. 3

 

Java

Nejen ₧e CachΘ umo₧≥uje zaΦlenit do k≤du ·seky psanΘ v SQL, JavaScriptu, HTML; dokonce nabφzφ programßtor∙m aplikacφ pracujφcφch v  Jav∞, ₧e mohou psßt celΘ metody t°φd v ΦistΘ Jav∞!

Takto napsanΘ metody jsou ovÜem logicky k dipozici pouze na stran∞ klienta. K tomu, aby bylo mo₧no takovou t°φdu pou₧φt v Jav∞, je nutno vystavit ji pomocφ jejφ vn∞jÜφ projekce. CachΘ prodporuje projekce do Javy a C. Ob∞ projekce vytvß°ejφ p°i kompilaci t°φdy hlaviΦkovΘ soubory typu ôjavaö pro Javu, ôcppö a ôhö pro C. Ale o tom vφce v n∞kterΘm z nßsledujφcφch dφl∙.

CachΘ Basic

Od verze 5 je k dispozici nov² skriptovacφ jazyk, CachΘ Basic.

Tento jazyk byl vytvo°en za ·Φelem oslovit Üirokou komunitu programßtor∙, kte°φ se setkali s jazyky Visual Basic / VBScript. Syntaxe jazyka CachΘ Basic vychßzφ ze syntaxe VBScriptu.

Na rozdφl od n∞j obsahuje n∞kterΘ p°φkazy a syntaktickΘ konstrukce vlastnφ pouze CachΘ, kterΘ umo₧≥ujφ programßtor∙m jednoduÜe pracovat s persistentnφmi daty û globßly.

CachΘ Basic je mo₧no pou₧φt jak pro psanφ rutin, tak pro psanφ metod. Dokonce je mo₧no psßt n∞kterΘ metody t°φd v CachΘ Basicu a jinΘ v CachΘ ObjectScriptu v rßmci definice jednΘ t°φdy! (a jeÜt∞ jinΘ v Jav∞, jak bylo zmφn∞no v p°edeÜlΘ kapitole.)

CachΘ Basic mß na rozdφl od CachΘ ObjectScriptu a podobn∞ jako VBScript spoustu rezervovan²ch slov.

 

P°ehled syntaxe

Prßce s objekty

Prßci s objekty demonstruje nßsledujφcφ ·sek k≤du.

Obr. 4

 

Prßce s globßly

Prßce s globßly se neliÜφ od prßce s ostatnφmi prom∞nn²mi, pouze p°ed nßzev globßly je nutno zadat znak ö^ö. Pro prochßzenφ jednotliv²ch uzl∙ globßl∙ je implementovßna funkce Traverse jen₧ je obdobou funkce $Order z CachΘ ObjectSrtiptu. P°φklad prßce s globßlem je p°edveden na nßsledujφcφm obrßzku:

Obr. 5

VÜimn∞te si, ₧e p°φkaz EraseArray ^BASIC(öaö) sma₧e uzly ^BASIC(öaö,1) a ^BASIC(öaö,3) ale nikoliv ^BASIC(öaö).

 


 

Poznßmka: Pokud jste si ji₧ stßhli a otev°eli projekt dodan² k tomuto dφlu naÜeho serißlu, mo₧nß jste si vÜimli, ₧e obsahuje nov² typ souboru, jen₧ je za°azen v katalogu öCSP Filesö. Jednß se o webovou strßnku napsanou pomocφ technologie CachΘ Server Pages, o nφ₧ si budeme povφdat p°φÜt∞. Tuto strßnku nicmΘn∞ pot°ebujeme ji₧ v tΘto kapitole kv∙li demonstraci HTML k≤du vlo₧enΘho do CachΘ ObjectScriptu, nebo¥ se odkazuje na t°φdu, v nφ₧ tento k≤d je.