Try – catch ošetrenie chýb a prepojenie do systémového protokolu chýb

cache.jpg Na po­čet­né otáz­ky priaz­niv­cov prog­ra­mo­va­nia s vy­so­ko­vý­kon­nou ob­jek­to­vou da­ta­bá­zou Inter­Sys­tems Cac­hé vám pri­ná­ša­me nie­koľ­ko ak­tuál­nych ti­pov a tri­kov. Ten­to tip sú­vi­sí so spo­loč­ným ošet­ro­va­ním chýb, kto­ré si mô­že­te pri­po­me­núť na od­ka­ze http://www.inter­sys­tems.cz/edu­ca­tion/uni­ver­si­ty/se­ria­ly/les­son/T&T%2015.htm.

Od čias pub­li­ko­va­nia náš­ho se­riá­lu o Cac­hé up­ly­nu­lo už dosť ča­su a od­vte­dy sa v tej­to ob­jek­to­vej da­ta­bá­ze ve­ľa zme­ni­lo. Hlav­nou zme­nou v ob­las­ti prá­ce s vý­nim­ka­mi bo­lo za­ve­de­nie mec­ha­niz­mu try – catch vo ver­zii 2007.1. Ak te­da chce­me v no­vom kó­de ošet­riť dy­na­mic­kú vý­nim­ku, mô­že­me ľah­ko na­pí­sať ho­ci aj to­to:

po­dil(a,b) pub­lic
{ 
 	#dim ex as %Excep­tion.Abstrac­tExcep­tion
	s res=0
	try {
		s res=a/b
	} catch (ex) {
		w ex.Dis­playS­tring()
	}
	q res		
}

To­to je tráp­ne jed­no­duc­há de­monštrá­cia no­vé­ho spô­so­bu za­chy­tá­va­nia vý­ni­miek. Všim­ni­te si, že po no­vom je vý­nim­ka ob­jek­tom, a nie iba pre­men­nou. Ak chce­me sa­mi vy­vo­lať vý­nim­ku ume­lo, po­uži­je­me prí­kaz throw ex.

Veľ­mi čas­to sa asi stret­ne­te s po­tre­bou dať do sú­la­du sys­té­mo­vý ob­jekt % Sta­tus, kto­rý trie­dy Cac­hé veľ­mi čas­to vy­uží­va­jú na vrá­te­nie in­for­má­cie o prie­be­hu spra­co­va­nia kó­du me­tód. Kým % Sta­tus je náv­ra­to­vá hod­no­ta, kto­rá mô­že ob­sa­ho­vať ne­ja­kú in­for­má­ciu o chy­be / chy­bách, tá­to in­for­má­cia sa ne­po­va­žu­je za run­ti­me vý­nim­ku. No % Sta­tus mož­no jed­no­duc­ho na run­ti­me vý­nim­ku pre­viesť, a to po­mo­cou me­tód tried v ba­lí­ku % Excep­tion. Te­da mô­že­me na­pí­sať nie­čo ta­ké­to:

	try {
		s tO­so­ba=##class(tt.oso­ba).%Ope­nId(100,4,.tSC)
		if $Sys­tem.Sta­tus.IsError(tSC) throw ##class(%Excep­tion.Sta­tu­sExcep­tion).Crea­teF­rom­Sta­tus(tSC)
	} catch (ex) {
		w ex.Dis­playS­tring()		
	}
	q

To je pek­né, ale my by sme ra­di po­uži­li lo­go­va­nie chýb do sys­té­mo­vé­ho den­ní­ka po­mo­cou vo­la­nia BACK ^% ETN. Tak­že pred­chád­za­jú­ci kód rých­lo up­ra­ví­me:

 
	try {
		s tO­so­ba=##class(tt.oso­ba).%Ope­nId(100,4,.tSC)
		if $Sys­tem.Sta­tus.IsError(tSC) throw ##class(%Excep­tion.Sta­tu­sExcep­tion).Crea­teF­rom­Sta­tus(tSC)
	} catch (ex) {
		w ex.Dis­playS­tring()
		d BACK^%ETN
	}
	q

Otes­tu­je­me, ale @#$%$%^#! V lo­gu nič nie je! Prá­ve sme zis­ti­li, že mec­han­izmus THROW nie je kom­pa­ti­bil­ný s pô­vod­ným mec­ha­niz­mom za­chy­tá­va­nia vý­ni­miek ZTRAP. Ako z to­ho von? Naš­ťas­tie je po­moc vcel­ku jed­no­duc­há, aj keď troc­hu ne­sys­té­mo­vá. Up­ra­ví­me ľah­ko pred­chád­za­jú­ci kód:

	try {
		s tO­so­ba=##class(tt.oso­ba).%Ope­nId(100,4,.tSC)
		//if $Sys­tem.Sta­tus.IsError(tSC) throw ##class(%Excep­tion.Sta­tu­sExcep­tion).Crea­teF­rom­Sta­tus(tSC)
		if $Sys­tem.Sta­tus.IsError(tSC) s ex=##class(%Excep­tion.Sta­tu­sExcep­tion).Crea­teF­rom­Sta­tus(tSC) ztrap "ZSC"
	} catch (ex) {
		w ex.Dis­playS­tring()
		d BACK^%ETN
	}
	q

Te­raz sa už všet­ko sprá­va tak, ako má. Má­me ob­jekt rep­re­zen­tu­jú­ci vý­nim­ku aj zá­pis do sys­té­mo­vé­ho lo­gu. Na­vy­še mô­že­me v try – catch sek­cii vy­rá­bať rôz­ne ty­py chýb po­mo­cou ztrap "moj­kod­chy­by" a v sek­cii catch tie­to chy­by po­dľa kó­du filtro­vať a ošet­ro­vať rôz­nym spô­so­bom.

V nas­le­du­jú­cej čas­ti sa bu­de­me ve­no­vať tes­to­va­niu kó­du po­mo­cou Unit Tes­ting nás­tro­ja Cac­hé.

Ďal­šie čas­ti >>

Zdroj: Infoware 12/2010



Ohodnoťte článok:
   
 

24 hodín

týždeň

mesiac

Najnovšie články

No­vá im­ple­men­tá­cia dy­na­mic­ké­ho SQL
Kedysi dávno sme sa venovali tvorbe dopytov s použitím ručne písaného kódu bez jazyka SQL. V tejto časti si, naopak, ukážeme, akým spôsobom sa v Caché vyvíjali dopyty, a oboznámime sa s najnovšou implementáciou dynamických dopytov SQL. čítať »
 
Dy­na­mic­ké od­ba­ve­nie vlas­tnos­tí a me­tód tried
V tejto časti nášho seriálu sa oboznámime s veľmi užitočnou schopnosťou tried Caché, ktorá je k dispozícii už dlhší čas, ale až v posledných verziách sa dostáva viac do popredia čítať »
 
Prá­ca s trie­dou %In­staller
V tomto pokračovaní seriálu vám ukážeme použitie ešte stále pomerne čerstvej novinky, určenej na používateľskú úpravu inštalácie Caché. čítať »
 
Vy­uži­tie po­uží­va­teľ­skej pro­jek­cie na Unit Tes­ting
V predchádzajúcej časti sme sa oboznámili s balíčkom % UnitTesting a ukázali sme na praktickom príklade, ako s ním pracovať. Asi vám v priebehu čítania napadlo, či by nebolo možné tvorbu testovacích tried nejako automatizovať. čítať »
 
Tes­to­va­nie kó­du po­mo­cou Unit Tes­ting nás­tro­ja Cac­hé
Koľkí z nás vývojárov môžu na otázku, či testujú svoj kód, odpovedať úprimne: áno? čítať »
 
Try – catch ošet­re­nie chýb a pre­po­je­nie do sys­té­mo­vé­ho pro­to­ko­lu chýb
Na početné otázky priaznivcov programovania s vysokovýkonnou objektovou databázou InterSystems Caché vám prinášame niekoľko aktuálnych tipov a trikov. čítať »
 
 
 
  Zdieľaj cez Facebook Zdieľaj cez Google+ Zdieľaj cez Twitter Zdieľaj cez LinkedIn Správy z RSS Správy na smartfóne Správy cez newsletter