Latvijas
Universitāte
Fizikas un
matemātikas fakultāte
Datorikas
nodaļa
Lietotāja-datora
interfeisa uzlabošana,
strādājot ar
Oracle Forms 4.5
Kursa darbs
Autors : Ivo
Ālmanis
st. apl. Nr.
DatZ M 96007
Darba vadītājs : Dr. dat. Andrejs Auziņš
Rīga, 1997
Anotācija
Šajā darbā
tiek aplūkots kā labāk veidot vienotu, vienkāršu un intuitīvi saprotamu
lietotāja-datora interfeisu, strādājot ar Oracle Forms 4.5, produktu, kura vājākā vieta, salīdzinot ar citām 4
paaudzes valodām (4GL), ir tieši lietotāja-datora interfeiss. Bez tam darbā
tiek apkopoti un izanalizēti vairāki raksti žurnālos un Internetā par tēmu
“aplikāciju lietotāja-datora interfeisa uzlabošana” darbam ar Oracle Forms 4.5 tieši MS Windows vidē. Darba beigās doti programmu kodu piemēri visiem
darbā minētajiem problēmu risinājumiem.
Abstract
This written
work describes the best ways of creating of a simple and easy-to-understand graphic user
interface for operating Oracle Forms 4.5.
If compare with other 4GL, this interface is the main drawback of the product.
This work also contains an analysis of several articles from different
magazines and the Internet resources dealing with “an improvement of
applications of the graphic user interface” for Oracle Forms 4.5 based on MS Windows.
In the conclusion the author offers the solutions of all the problems mentioned
in this written work.
Аннотация
В данной работе рассмотрены возможности
разработки простого и легко воспринимаемого графического интерфейса
пользователя для работы с Oracle Forms 4.5 - продуктом, самым
слабым местом которого, по сравнению с другими языками 4-го поколения (4GL), является именно данный интерфейс. В работе собраны и
проанализированы несколько статьей из журналов и интернета о “улучшении
графического интерфейса пользователя аппликаций” по работе с Oracle
Forms 4.5 в среде MS Windows. В заключении
данной работы даны примеры решений в работе упомянутых проблем.
Saturs
4.1. Rīku
josla ……….……………………………………….……….…… 16 4.2. rīku padomi (Tooltips) - spiedpogu nozīmju aprakstīšana ……..……. 17 4.3.
standartizvēlnes …………………….………………………………….. 17 4.4. ievadlauku krāsu nozīme
…………..……………………………..…… 18 4.5. logu virsraksti ……………………..………………………………..…. 19
4.6. resursu pārbaude pirms aplikācijas palaišanas ……………….………. 20 4.7. par -
ātra informācija par jūsu aplikāciju ………..……………….…… 20 4.8. paroles maiņa
…………………………………..……….……………... 21 4.9. progresa rādītājs ……………………………….…………..…….……. 22 4.10. aplikācijas
palaišana …….……………………....…………………… 23 4.11. MS
Windows palīdzības logi ……………………………….…….…… 24 4.12. nodaļlapas (Tabbed pages) - jauns interfeisa
standarts ……………….. 25
Nobeigums
.................................................................................…………..……….
26 Literatūra ......................................................................................................………..
27 Pielikums
......................................................................................………..…………
28 bn
Ievads
Salīdzinot
ar neseno pagātni, tagad ir tendence veidot lielas sistēmas, kur datu apjoms
sasniedz desmitus un pat simtus megabaitus. Uz personāliem datoriem bāzētās
datu bāzu vadības sistēmās, kā Fox Pro, Access un citās, palielinoties datu
apjomiem, krasi samazinās darbības ātrums.
Drīz tiek
sasniegta robeža, kad palielināt apjomu vairs nav iespējams. Bez tam nav
iespējama vienlaicīga datu lietošana vairākiem lietotājiem, t.i. vienlaicīgi
vairāki lietotāji nevar ievadīt datus, tajā pašā laikā nodrošinot šo datu
unikalitāti. Nolasot datus parasti visus resursus aizņem viens lietotājs,
pārējiem tikmēr ir jāgaida. Šādu ierobežojumu dēļ, ar laiku sistēmas nav
funkcionēt spējīgas. Tās jāveido no jauna un tāpēc ir vajadzīgas DBVS, kurām
nav šādu ierobežojumu. Lielās datu bāzu vadības sistēmās (Oracle, DB2 un citas)
visas šīs problēmas ir novērstas, lielāku uzmanību pievēršot arī datu
aizsardzībai un drošumam. Oracle
piedāvātā tehnoloģija sistēmu izstrādei spēj nodrošināt vieglāku un ātrāku
sistēmu izstrādi, izmantojot grafiskos līdzekļus un ģeneratorus, kas aizvieto
monotonu programmu rakstīšanu.
Tādēļ aizvien
vairāk lielu datu bāzu vadības sistēmu izstrādātāji sāk izstrādāt savas
sistēmas tieši Oracle, DB2 un citās vidēs, kas spēj nodrošināt labu produktu
izstrādi un kas ir orientētas tieši uz lielām datu bāzēm.
Taču
bieži vien ar labu sistēmas funkcionalitāti vien ir par maz. Lietotājs
galvenokārt vienmēr īpašu uzmanību pievērš sistēmas interfeisam, cik veigli ir
ar to strādāt un cik intuitīvi viņš var strādāt. Tas parasti tiek aizmirsts,
izstrādājot lielas sistēmas, kā rezultātā lietotāji nav apmierināti un vienmēr
uzskata, ka vecā sistēmas, kas piemēram bija veidota uz FoxPro bāzes, bija
krietni labāka, kaut arī šad tad pazuda dati, sistēma uz lieliem datu apjomiem
strādāja lēni, šad tad jāgaida uz kādu, kamēr tas pabeigs savu darbību ar
datiem, lai tiem vispār varētu tikt klāt.
Bez
tam, ja tirgū ir pieejami vairāki vienādas kvalitātes produkti produkti,
klients vienmēr izvēlēsies to, kas ir vieglāk saprotams, apgūstams un kuru
strādājot var gūt lielāku darba effektivitāti. Citiem vārdiem sakot, klients
izvēlēsies to produktu, kam būs labāks lietotāja-datora interfeiss.
Taču,
lai izveidotu labu lietotāja-datora interfeisu, vienmēr rodas zināmas
problēmas. Palielinoties projektu apjomiem, parasti tos vairs nerisina viens
cilvēks kā tas ir FoxPro un citu mazu DBVS gadījumā, bet gan 2, 3 un pat vairāk
cilvēku. Tā kā katram cilvēkam ir sava gaumes un stila izjūta, katrs
programmētājs veido savu lietotāja-datora interfeisu, tādu, kādu tas uztver par
vairāk tīkamu. Bet lietotājs vēlas, lai projekta ietvaros visas datu
ievadformas un citi datu logu būtu vienota stila. To parasti panāk,
izstrādātājiem vienojoties par kopēju lietotāja-datora interfeisu. Tā kā Oracle
CASE rīki atļauj ģenerēt formas no iepriekš aprakstītiem moduļiem, tad
izstrādātāji vēlētos, lai visas ģenerētās formas, jau saturētu interfeisa
standartu, par kuru izstrādes grupa ir vienojusies. To panāk aprakstot formu
šablonus (template), kas tiek
izmantoti ģenerācijas procesā kā arī sistēmas, atsevišķu moduļu un atsevišķu
tabulu preferences (preference), kas
tiek izmantotas ģenerācijas procesā.
Šajā
darbā tiek aplūkots kā veidot vienotu lietotāja-datora interfeisu strādājot ar
Oracle Forms Designer 4.5, produktu,
kura visvājākā vieta, salīdzinot ar citām 4 paaudzes valodām (4GL), ir tieši
lietotāja-datora interfeiss. Kā vienu no tā iemesliem varu minēt Oracle
produktu pieejamību uz vairākām operētājsistēmu platformām, kā rezultātā visi
Oracle produkti jebkurā operētājsistēmā izskatās vienādi. Tas panākts ieviešot
savus standartus. Tas protams pārāk
daudz neattiecas uz grafisko izpildījumu, bet gan terminoloģiju. Lietotājs
nespēj strādāt intuitīvi, kā ar jebkuru citu jaunu produktu, jo tiek lietots
daudz jaunu terminu. Lietotājs parasti pirmajā brīdī ir samulsis.
Bez tam tiek
apkopoti vairāki raksti žurnālos un Internetā par tēmu kā labāk veidot savu
aplikāciju lietotāja-datora interfeisu, strādājot ar Oracle formām MS Windows vidē.
Angliskie
nosaukumi ir tulkoti izmantojot LZA terminoloģijas komisijas informātikas
apakškomitejas apstiprinātos angļu terminu latviskojumus. Maz pazīstamiem un
nezināmiem terminiem, kuriem iepriekšminētajā vārdnīcā nebija dots tulkojums,
ir doti darba autora tulkojumi, iekavās dodot orģinālnosaukumu angliski.
1. Grafiskā lietotāja-datora interfeisa pamatprincipi
Labu grafisko
lietotāja-datora interfeisu raksturo faktors, cik viegli lietotājs to apgūst un
cik viegli to ir lietot. Runājot par lietošanu, vienmēr būs domstarpības, jo
katrs cilvēks ir individualitāte un katram patīk kaut kas cits, kas nepatīk
citiem. Labu lietotāja-datora interfeisu definē 3 pamatprincipi [7]:
1) Vienkāršība
(Simplicity) - jo vienkāršāks ir
sistēmas interfeiss, jo vieglāk lietotājs var iemācītes lietot sistēmu;
2) konsekvence,
saskaņa (Consistency) - konsekvence
raksturo sistēmas izmaiņas, cik viegli lietotājs varēs apgūt sistēmas jaunās
komponentes. Lietotājs parasti vēlas, lai sistēmas jaunā komponente darbotos
tāpat kā vecā, lai pārāk daudz laika nebūtu japavada apgūstot jaunās sistēmas
interfeisa īpatnības;
3) efektivitāte
(Efficiency) - jo mazāk soļu jāveic
lietotājam, lai izpildītu kādu operāciju, jo lielāka ir sistēmas efektivitāte
šo operāciju izpildei. Lai izveidotu efektīvu lietotāja-datora interfeisu
izstrādātājam ir jāzin, kuras ir visbiežāk lietotās operācijas un kā tās tiks
kombinētas.
Lietotāja-datora
interfeiss neraksturo cik krāšņs un elementu bagāts būs datu ievades logs, bet
gan izstrādātāja profesionālismu un radošo potenciālu. Pirmo divu pamatprincipu
izveide prasa izstrādes grupai izveidot interfeisa standartus. Bez šādiem
standartiem sistēmu interfeisa izstrāde būs haotiska (katra izstrādātāja stilam
atbilstoša) un lietotājam grūti apgūstama. Trešā pamatprincipa izveide ir pati
grūtākā. Tas ir atkarīgs no sistēmas biznesa modeļa. Tas jāveido sadarbībā ar
lietotāju, jo sistēma tiek veidota, lai viņam palīdzētu.
Sīkāk par
lietotāja-datora interfeisa uzlabošanu pēc šiem pamatprincipiem aprakstīts
nākošajās trīs nodaļās.
2. Šablonformu izmantošana formu ģenerācijai
Kā jau tika
minēts, lai nodrošinātu vienota lietotāja-datora interfeisa izveidi, atbilstoši
izstrādājamā projekta vajadzībām, lietojot Oracle formu ģeneratoru (Oracle Forms Generator), tiek lietotas šablonformas (templates), kurās tiek aprakstīti visi kontroles bloki, rīku joslas,
vizuālie objekti, to īpašības. Lai varētu izveidot šādu šablonformu ir
jāsaprot, kā savā starpā saistās objekti šablonformā ar objektiem
izstrādājamajā formā.
Designer/2000 lieto šablonformas, kurās
ir visa nepieciešamā informācija ģenerētai formai - vizuālie atribūti, rīku
josla, kontroles bloki un vienības, kas
tiks ievietotas jebkurā ģenerētajā formā. Taču, ievietojot šablonformās daudz
izpildāmo bloku, rodas problēmas, jo šie programmu kodi tiek ierakstīti visās
sistēmas ģenerētajās formās. Ja kādas izmaiņas tiek izdarītas šablonformās, tad
jāveic viens no sekojošiem uzdevumiem:
1) Jāpārģenerē
visas iepriekš ģenerētās formas;
2) izmaiņas
jāveic ar roku katrā noģenerētajā formā.
Lai izvairītos
no šadām problēmām, tiek ieteikts pēc iespējas vairāk lietot atsauksmju formas
(Reference form) un bibliotēkas (Libraries) šablonformu izstrādē [8]. Ja
šablonformās vizuālie atribūti un datu vienības tiek veidotas kā atsauksmes uz
citā formā aprakstītiem objektiem, un PL/SQL procedūras, paketes un funkcijas
tiek saistītas ar bibliotēkām(tiek apkopotas bibliotēkās), tad ģenerētā forma
pārmantos šīs atsauksmes un saistības.
Tas atvieglos sistēmas izstrādi, kad vajadzēs labot vai papildināt
šablonformu kodu, jo nebūs jāpārģenerē visas iepriekš veidotās formas.
1. attēls.
Šablonformu, bibliotēku, atsauksmju formu
un noģenerēto formu
saistība.
Piemēram, ja
visa rīku josla (kanva (canvas),
kontroles bloks un vienības) ir veidota kā atsauksme uz atsauksmju formu, tad
papildus pogas var tikt pieliktas rīku joslai arī vēlāk, pēc formu ģenerācijas,
nepārģenerējot šīs formas no jauna. Šīs papildus pogas tikai jāpievieno
atsauksmu formai un jāpārraksta PL/SQL kods bibliotēkā, lai jaunā poga
strādātu. Tālāk pārkompilējot visas ģenerētās formas, jaunā poga tiek iekļauta
ģenerētajā formā.
Atsauksmju
formā būtu jāiekļauj sekojoši objekti:
1) Visu
lietoto kanvu informācija;
2) visi
vizuālie atribūti;
3) visi
kontroles bloki;
4) rīku
joslas kanva un bloks (ieskaitot visas pogas, uz kurām atsauksme tiek veidota
automātiski).
Sakarā
ar to, ka uz formas līmeņa trigeriem nevar veidot atsauksmes tieši (jo Designer/2000 formu ģenerators pats
pārraksta trigerus), visi PL/SQL kodi būtu jāievieto bibliotēkā, kas saistīta
ar šablonformu [5]. Tāpēc formas līmeņa trigeriem vajadzētu izsaukt procedūras
no bibliotēkas. Bez tam gadījumā, ja jāmaina kāda formas līmeņa trigera kods,
to nākas izdarīt tikai vienā vietā - bibliotēkā, kurā aprakstīts trigera kods.
Piemēram, ja šablonformā ir WHEN-NEW-FORM-INSTANCE trigeris, tam vajadzētu
izskatīties šādi:
/*
WHEN-NEW-FORM-INSTANCE */
BEGIN
WHEN_NEW_FORM_INSTANCE;
END;
Kur WHEN_NEW_FORM_INSTANCE
ir procedūra no bibliotēkas. Ja ģenerators pārrakstīs kāda trigera kodu, tad
jauno funkciju izsaukums tiks ierakstīts aiz šī koda, nebojājot izstrādātāja
rakstīto kodu.
Šeit jāpiemin,
ka veidojot atsauksmi uz objektu no citas formas, šo divu formu koordinātu
sistēmas nesakrīt Oracle Forms Designer
4.5 neveic automātisku koordi-nātu maiņu. Par to jārūpējas izstrādātājam pašam.
Lai visās
formās panāktu vienādu lietotāja-datora interfeisu, visiem tās objektiem jābūt
vienādiem, t.i. vienādiem vizuāliem atribūtiem (fonts, fonta izmērs, krāsas,
garums, platums u.t.t). Visvieglāk to var panākt veidojot vizuālos atribūtus (Visual attributes) un īpašību klases (Property classes) atsauksmju formā.
Vizuālie atribūti ir fonts un tā īpašības (fonta vārds, izmērs, stils, platums,
garums), kā arī objekta krāsas (priekšplāns, fons, aizkrāsošanas modelis).
Piesaistot visiem vienāda tipa objektiem konkrētu vizuālo atribūtu, ir
atvieglota šī tipa objektu vizuālās informācijas maiņa. Tā jādara tikai vienā
vietā - tur kur tiek definēts vizuālais atribūts.
Katram
objektam formās tiek piesaistīts vai nu noklusētais vizuālais atribūts (default), kas ir atkarīgs no attiecīgās
platformas, kurā tiek ekspluatēta forma, vai arī definētais vizuālais atribūts (named). Ja objekta vizuālās īpašības
tiek mainītas ar roku, tas iegūst lietotāja vizuālā atribūta (custom) statusu, kas nozīmē, ka lai
izmainītu šāda objekta vizuālos attribūtus, tie jāmaina, katram konkrētam
objektam, jo tie nav saistīti savā starpā ar kādu no definētiem atribūtiem.
Vizuālā
atribūta vārds nosaka objektu, kuram tas tiks pievienots ģenerācijas procesa
laikā. Piemēram, ikvienam teksta objektam piek piešķirts CG$ITEM vizuālā
atribūta vārds, ja šis atribūts ir definēts šablonformā. Eksistē liels skaits
šādu speciālo vizuālo atribūtu vārdu, kurus aprakstot var viegli veidot
ģenerētās formas izskatu. Piemēram, CG$PUSH_BUTTON vizuālais atribūts nosaka
jebkuras ģenerētās spiedpogas izskatu, CG$MANDATORY_ITEM - obligātā ievadlauka
vizuālos atribūtus u.t.t. Visus šos vizuālo attribūtu vārdus var atrast Oracle
palīdzības failā C:\ORAWIN95\DES2_60\HLP\CGEN45.hlp.
Savukārt
īpašību klases ir spēcīgs līdzeklis, kas atļauj veidot vienotu lietotāja-datora
interfeisu un funkcionalitātes standartus. Īpašību klase ir objekts, kas satur
īpašību kopu, kas var tikt veidota pēc izstrādātāja vēlmes, un to vērtībām.
Piemēram, var veidot atsevišķas īpašību
klases ievadāmiem neobligātiem ievadlaukiem, ievadāmiem obligātiem ievadlaukiem
un informācijas laukiem, spiedpogām, izvēles sarakstiem (LOV) u.t.t.

2. attēls.
Īpašību klašu un vizuālo atribūtu definēšana šablonformā.
Šādu īpašības
klašu skaits nav ierobežots un vienas klases īpašības var tikt piešķirtas
dažādu tipu objektiem. Tas, pamatojoties uz iepriekš minēto, dod iespēju mainīt
šo objektu definīcijas tikai vienā vietā, tādējādi mainot to visā
izstrādājamajā aplikācijā veicot tikai vienu operāciju - formu pārkompilāciju.
Visi vizuālie atribūti un īpašību klases, kas aprakstīti šablonformā, tiek
iekļauti ģenerētajā formā, neatkarīgi no tā vai eksistē objekts, kas izmanto šo
atribūtu vai īpašību klasi, vai nē. Tas dod iespēju jebkurā izstrādes procesa
laikā veidot jaunus interfeisa objektus, tos aprakstot ar esošiem vizuāliem
atribūtiem vai īpašību klasēm.
Ja darba laikā
tiek izveidots jauns vizuālais objekts vai īpašību klase, tā jāpiesaista
šablonformai, lai tā tiktu ieģenerēta visās jaunajās formās. Lai šie jaunie
atribūti būtu arī jau ģenerētajās formās ir jāveido atsauce uz tiem no katras
formas atsevišķi. Taču arī to var automatizēt, veidojot objektu grupas (Object groups), kurās pievieno jaunos
vizuālos atribūtus. Tālāk veido atsauces jau uz objektu grupām.
Lai vieglāk
būtu apkopot objektus, uz kuriem tiks veidotas atsauksmes, Oracle formās pastāv
jēdziens objektu grupas (Object groups).
Tas dod iespēju vienkopus apkopot vairāku tipu objektus (logus, blokus, kanvas,
vizuālos attibūtus), kas paredzami kā atsauksmju objektu avots.

3. attēls. Objektu
grupas.
Reāli veidojot
objektu grupas, jauni objekti netiek veidoti, tiek veidota tikai atsauce uz
šiem objektiem formas ietvaros. Veidojot objektu grupas jāievēro :
1) Ievietojot
objektu grupā bloku, automātiski tiek ievietoti arī visi tā objekti (vienības,
trigeri, relācijas), kaut arī tie objektu grupas kokā netiek rādīti;
2) programmu
vienības (procedūras, funkcijas) nevar tikt iekļautas objektu grupās;
3) bloku
objekti, vieni paši nevar tikt iekļauti objektu grupā, jo tie nevar pastāvēt
neatkarīgi bez bloka;
4) objektu
grupas objektiem jābūt definētiem tajā pašā formā, tie nevar būt no citas
formas;
5) objektu
grupa nevar saturēt objektu grupu;
6) dzēšot
objektu tas automātiski tiek dzēsts no objektu grupas;
7) dzēšot
objektu grupu, no formas moduļa netiek dzēsti paši objekti.
Tālāk
aplūkosim kā apvienot programmu kodu, kas nepieciešams vairākās formās.
Procedūras un funkcijas, kas tiek lietotas vairākkārt no dažādām formām
ieteicams apvienot vienā vietā - bibliotēkās. Savukārt procedūras un funkcijas,
kuru izsaukšana neprasa vizuālās informācijas parādīšanu, ietiecams izvietot
datu bāzē (Stored procedures),
tādējādi samazinot formas izmērus. Lai arī pārējās aplikācijas formās būtu
pieejamas šīs procedūras atliek tikai piesaistīt attiecīgo bibliotēku.

4. attēls.
Piesaistītās bibliotēkas.
Lai
visas vajadzīgās bibliotēkas automātiski tiktu piesaistītas jebkurai ģenerētai
fromai, šīs bibliotēkas tikai jāpiesaista konkrētai šablonformai, kas tiek
izmantota ģenerācijas procesā. Jebkuras izmaiņas, kas tiek veiktas bibliotēkas
procedurās vai funkcijās formās ir pieejamas uzreiz pēc to atvēršanas un
pārkompilēšanas.
Ja
jāpievieno jauna biblotēka, tā pirmkārt jāpievieno šablonformai, lai tā tiktu
pievienota visām jaunajām formām. Formai drīkst pievienot neierobežotu skaitu
bibliotēkas, pie kam tas nepalielina formas izmērus, jo bibliotēkas tiek
glabātas atsevišķos *.pll failos, un netiek iekompilētas programmas kodā. Visām
jau ģenerētajām formām bibliotēkas jāpiesaista ar roku, jo nav iespējams
bibliotēku aprakstīt objektu grupās, kā tika minēts iepriekš. Bez tam pastāv
iespēja piesaistīt bibliotēku bibliotēkai, ko varētu izmantot kā risinājumu.
Piemēram, kādai no galvenajām bibliotēkām, kas ir visās formās piesaistam klāt
jauno bibliotēku, kas pēc formu pārkompilēšanas būs visās formās.
Vislielākās
problēmas veidojot šablonformas tomēr ir un paliek dokumentācijas trūkums.
Oracle nenodrošina ar labu dokumentāciju (principā tās nav vispār) šablonformu
veidošanai, ja neskaita dažus piemērus, kas doti Oracle palīdzībā (Help).
3. Preferences kā ģeneratora parametri
Ne visu var
aprakstīt šablonformās. Izrādās, ka objektu, kas nav iekļauti kontrolblokos, un
citu īpašības un reakcija uz lietotāja darbību, kā arī visi pārējie ģeneratora
parametri, tiek aprakstītas ar preferencēm (preference),
izmantojot preferenču pārlūkprogramu (preference
navigator). Parasti tie ir datu bloki, kas tiek iekļauti formās no moduļa
datu diagrammas, logi, ritjosla (scrollbar),
un citi objekti.
Preferences ir
parametri, kas kontrolē ģenerētās aplikācijas izskatu un uzvedību [2].
Preference var būt vai nu obligāta vai neobligāta. Obligātai preferencei
vienmēr jābūt uzdotai vērtībai. Katrai preferencei eksistē noklusētā vērtība,
kas tiek izmantota gadījumos, ja dotās preferences vērtība nav definēta.
Preferenču
pārlūkprogramma ir grafisks rīks, kas atļauj mainīt preferenču vērtības, kuras
izmanto ģeneratori ģenerācijas procesā, kas nosaka ģenerētās aplikācijas
izskatu un uzvedību. Preferences var tikt piesaistītas pie konkrēta objekta
(domeins, forma, modulis, aplikāciju sistēma) aplikāciju sistēmā.

3. attēls. Preferenču
vērtību ievadīšana lietojot preferenču pārlūkprogrammu.
Ģenerācijas
procesa laikā ģenerātors pārbauda, kuras preferences, kas iespaido ģenerēto
aplikāciju, ja vispār kāda, ir uzstādīta. Ja vajadzīgā preference nav
uzstādīta, ģenerātors lieto noklusēto.
Katra
preferences vērtība var būt mantota (iedzimta), vai uzstādīta tikai konkrētam
aplikācijas līmenim. Preferenču pārlūkprogramma nosaka šo preferences īpašību,
to apzīmējot ar dažādām ikonām preferenču kokā, vai dažādām krāsām kopējā
preferenču izvēlnē. Šī iespēja ļauj viegli kontrolēt, piemēram, konkrēta datu
bloka vai moduļa uzvedību, vai tas būs tāds pats kā pārējos moduļos vai
atsevišķs, konkrēts tikai šim modelim.
Kad tiek
ģenerētas aplikācijas, attiecīgajam ģeneratoram ir jāzin, kuras preferenču
vērtības ir uzstādītas. Ģenerācijas procesa laikā ģenerators pārlūko visu
preferenču hierarhiju katrai preferencei, kas nepieciešama ģenerācijas procesā.
Meklēšana notiek no zemākā aplikācijas līmeņa virzienā uz augstāko.
1. tabulā
doti, manuprāt, svarīgāko preferenču (preference)
apkopojums, kas nosaka ģenerētās formas izskatu un reakciju uz lietotāja
darbību.
1. tabula. Svarīgākie formu ģeneratora parametri.
|
Kategorija
|
Parametra nosaukums
|
Apraksts
|
Iespējamās
vērtības
|
|
END USER LEVEL
|
AUTOHP
|
Vai parādīt HINT lauka vērtību, kad lietotājs
aktivizē ievadlauku
|
Y, N
|
|
|
DELWRN
|
Vai brīdināt lietotāju, ka
dzēšot rakstu tiek dzēsti arī raksti no citām tabulām (formas ietvaros)
|
Y, N
|
|
LAYOUT-BLOCK
|
BLKSBP
|
Bloka scrolbara atrašanās vieta
|
LEFT, RIGHT
|
|
|
BLKVSB
|
Vai tiek ģenerēts bloka
vertikālais scrolbars
|
Y, N
|
|
LAYOUT-TEXT ITEM
|
TXTBEV
|
Teksta vienību slīpums
|
None, Raised,
Lowered
|
|
|
TXTDDF
|
Teksta lauku noklusētais datuma
formāta tips
|
Datuma formāts
|
|
|
TXTDHT
|
Teksta lauku noklusētais
augstums
|
1-9
|
|
|
TXTDNF
|
Teksta lauku noklusētais skaitļu formāts
|
Skaitļu formāts
|
|
LAYOUT
|
WIN???
|
Visi šie parametri nosaka logu
noklusētās īpašības
|
|
|
LIST OF VALUES
|
LOVBUT
|
Vai laukam, kam iespējams LOV
blakus rādīt LOV pogu
|
Y, N
|
|
|
LOVVAL
|
Vai pārbaudīt lauka vērtību
LOV’ā
|
Y, N
|
|
TEMPLATE
|
STFFMB
|
Šablonformas vārds
|
|
|
GENERATE OPTIONS
|
VLDTFK
|
Kad pārbaudīt ārējās atslēgas
korektumu
|
B, C, F, N
|
|
|
VLDTPK
|
Kad pābaudīt primārās
atslēgas korektumu
|
B, C. F, N
|
Vislielākās
problēmas, aprakstot preferences, ir to apjoms, izmantotie saīsinājumi un ļoti
mazais dokumentācijas apjoms. Lai saprastu katras preferences būtību no tās
saīsinājuma, vai arī, lai atrastu kura preference apraksta konkrēto īpašību,
vajadzīgs laiks. Visa palīdzības informācija pieejama tikai izmantojot Oracle
palīdzību (Online Documentation) [3].
4. Padomi interfeisa uzlabošanai
Oracle Developer/2000 ir attīstījies daudzu
gadu laikā, no simbolu bāzētas vides uz grafisko vidi, tomēr vēl joprojām
patērējams daudz laika, lai izveidotu Oracle aplikāciju ar labu
lietotāja-datora interfeisu.
Kā piemēru
aplūkosim izvēlni. Oracle izvēlne pēc noklusēšanas satur: darbība (Action), bloks (Block), lauks (Field)
u.t.t., bet MS Windows vidē noklusētā
izvēlne ir fails (File), labot (Edit), skats
(View). Veidojot aplikācijas Oracle
vidē, to galvenā priekšrocība ir tā, ka tās var izpildīt arī citās platformās,
tādās kā Macintosh, Motif u.c. Šis varētu būt iemesls kāpēc aizkavējās labu
lietotāja-datora applikāciju izstrāde speciāli
MS Windows videi, kurā strādā
lielākā daļa datoru.
Lasot vairākus
literatūras izdevumus un informācijas lappuses Internetā tika apkopoti un
izanalizēti vajadzīgākie un labākie 12 padomi, kā labāk veidot profesionālākas,
vieglāk lietojamas un intuitīvi saprotamas Oracle aplikācijas MS Windows videi, tādā veido laužot
Oracle standarta aplikāciju iezīmi [1], [8]. Kā rāda pieredze, lietotājiem, kas
strādā MS Windows vidē ir ļoti grūti
pārslēgties uz Oracle piedāvāto stilu un terminoloģiju.
4.1. Rīku josla
Šodien jebkura
grafikās vides aplikācija liekas nepilnīga, ja tajā nav rīku joslas. Parasti uz
rīku joslas krāsainu spiedpogu veidā tiek attēloti visbiežāk lietoto funkciju
izsaukumi. Bieži lietojamās funkcijas tiek attēlotas grafiski vieglākai
informācijas uztverei un izpildei.
Visbiežāk
lietojamās funkcijas Oracle formās,
kuras vajadzētu ievietot rīku joslā ir - saglabāt (Commit or Save), nākošais ieraksts (Next record), iepriekšējais ieraksts (Previous record), attīrīt formu (Clear form), attīrīt rakstu
(Clear record), beigt (Exit), meklēt (Enter Query), atlasīt rakstus (Execute Query) un citas atkarībā no
uzdevuma.

4. attēls. Rīku
josla.
Funkcijas, kuras var apvienot grupās arī rīku
joslā vajadzētu attēlot grupās, tādējādi atdalot funkcijas pēc to nozīmes.
Piemēram, vienā grupā likt funkcijas nākošais ieraksts (Next record), iepriekšējais ieraksts (Previous record), un otrā izveidot ierakstu (Create record), dzēst ierakstu
(Delete record), attīrīt ierakstu
(Clear record). Vienas grupas spiedpogas ir jānovieto blakus vienu otrai,
bet grupas savstarpēji jāatdala ar 6-10 punktu tukšu joslu.
Bez tam daudz
lietotāju vēlas rīku joslu atvērt atsevišķā logā, kuru var novietot jebkurā
vietā pēc izvēlas. Arī to iespējams izveidot, nedaudz mainot programmas kodu,
tikai ar vienu piebildi, ka rīku josla būs vai nu atsevišķā logā, vai pamatlogā
zem izvēlnes. Lietotājs to nevar pārnest no viena stāvokļa uz otru kā tas
iespējams MS Word vidē.
4.2. Rīku padomi (Tooltips) - spiedpogu
nozīmju aprakstīšana
Rīku
padomi (Tooltips) ir palīdzības
teksts, kas apraksta spiedpogas nozīmi un parādās, kad pele kādu laiku
nekustīgi tiek novietota virs spiedpogas. Kā zināms lielākā daļa MS Windows aplikāciju satur šos rīku
padomus. Tas palīdz saprast spiedpogas nozīmi, ja tās ideju nevar uztvert pēc
grafiskās interpretācijas.

5. attēls. Oracle
standarta rīka padoms.
Oracle
noklusētais rīka padoms tāpat kā visi citi interfeisa objekti, atšķiras no MS Windows standarta rīka padoma, skatīt
5. attēlu. Tam ir standarta izmērs, un tas vienmēr parādās blakus spiedpogai,
tādējādi aizsedzot pārējās. Nedaudz pielabojot esošo programmkodu, vai arī
izmantojot no Oracle corp. saņemto hint.dll failu, rīku padomu var pārveidot
par MS Windows standartam līdzīgu kā parādīts 6. attēlā, kas neaizsedz
citas spiedpogas un kuras izmērs ir atkarīgs no teksta garuma.

6. attēls. Rīka
padoms, kas līdzīgs MS Windows
standartam.
4.3. Standartizvēlnes
Izvēlne
ir viena no galvenajām komponentēm aplikācijas interfeisā [6]. Diemžēl
noklusētā Oracle Forms 4.5 izvēlne
krasi atšķiras no pieņemtās MS Windows
standarta izvēlnes. Tajā ietverti tādi termini kā darbība (Action), labot (Edit),
bloks (Block), lauks (Field), ieraksts (Record), pieprasījums (Query).
Tie ir datu bāzu vadības sistēmu pamatjēdzieni, taču to lietošana izvēlnēs
samulsina lietotājus, jo tie ir pieraduši pie izvēlņu standartjēdzieniem -
fails (File), labot (Edit) u.t.t. Bez tam diez vai lietotāju
interesē programmas skaņošanas režīms (Debug).

7. attēls. Oracle
standarta izvēlne.
Lai nerastos
problēmas ar to lietošanu, vairāki autori neiesaka to lietot. Tā vietā
izstrādātājam pašam vajadzētu izveidot izvēlni, kas līdzinātos standarta MS Windows izvēlnei. Tad arī lietotājiem
neradīsies problēmas atrast to ko viņi
meklē, jo tie intuitīvi zinās, zem kuras izvēlnes punkta atrodas viņu meklējamā
funkcija.
Vispirms
izvēlnei ir jādod iespēja piekļūt visiem sistēmas moduļiem. Var pastāvēt arī
citi veidi un ceļi kā izsaukt kādu citu modeli, taču izvēlnei jābūt vispilnīgākajai.
Izstrādājot izvēlni kā piemēru var aplūkot jebkuru MS Windows produkta izvēlni.
Pirmajiem diviem izvēlnes punktiem no kreisās puses jābūt fails (File) un labot (Edit). Pēdējiem diviem jabūt logi (Windows), kam seko palīdzība (Help).
Palīdzības izvēlnes parasti satur šādas standarta iespējas kā palīdzības
izsaukšana, informāciju par aplikāciju un citas, skatīt 8. attēlu. Tas protams
labi noder, kad runa iet par konkrētu datu ievades formu. Bet kā veidot
izvēlnes galvenajai formai, kas izsauc citus moduļus, no kuriem tālāk tiek
izsauktas datu ievades un redigēšanas formas? Tā laikam ir katra izstrādātāja
un pasūtītāja gaumes un norunas lieta.

8. attēls. Sistēmas
izvēlne, kas līdzīga MS Windows
izvēlnei.
Izvēlnes
var tikt veidotas, kā nemainīgas visas aplikācijas darbības gaitā, kā arī
tādas, kas mainās atkarībā no konteksta. Iecienītākā pieeja šajā gadījumā ir
lietot standarta nemainīgas izvēlnes, ar papildus iespēju aizliegt izvēlnes
punktus, kad tie nav vajadzīgi, atkarībā no konteksta. Tādējādi lietotājs
vienmēr zinās izvēlnes izkārtojumu, neatkarīgi no konteksta, kas otrajā
gadījumā būtu daudz grūtāk, ja izvēlne mainās atkarībā no konteksta.
4.4. Ievadlauku krāsu nozīme
Strādājot
ar datu bāžu vadības sistēmām, datu ievades formās ievadāmie raksti parasti
satur obligātos laukus (not null,
mandatory), laukus, kas var būt arī tukši (optional) un laukus, kas tiek izmantoti tikai informācijas
rādīšanai (kur informāciju nedrīkst ievadīt vai mainīt). Tas palīdz lietotājam visuāli ātrāk atšķirt
informatīvos laukus no laukiem, kuros dati ir jāievada. Daži autori iesaka
katram no šiem trim tipiem lietot savu krāsu, taču kā rāda pieredze, pārāk
krāsainas datu formas biedē lietotājus, jo tie apjūk šajā krāsu gammā. Bet ir
lietas, ko vajadzētu izšķirt vienmēr - laukus datu ievadei un laukus
informācijas pasniegšanai. Tāpat kā standarta MS Windows aplikācijās, arī Oracle formās būtu ieteicams
informācijas laukus rādīt vienkārši kā tekstu vai kā pelēku ievadlauku, kurā
nav iespējama informācijas maiņa.

9. attēls. Ievadlauku
attēlošana, atkarībā no informācijas.
Taču neatšķirot obligātos (mandatory) laukus no neobligātiem (optional), lietotājs bieži vien,
saglabājot datus, saņem kļūdas paziņojumu, ka laukā obligāti jāievada
informācija (“field must be entered !”)
vai lauks nevar tikt mainīts (“field is
protect to update against !”). Vai šos laukus veidot atškirīgus vai nē
pilnā mērā atkarīgs no izstrādātāja un lietotāja vienošanās.
4.5. Logu virsraksti
Strādājot
ar Oracle Forms 4.5, to izpildāmais
modulis (Oracle Forms Runtime) kā
logu virsrakstu vienmēr lieto tekstu “Developer/2000 Forms Runtime for Windows
95/NT - [module]“.
10.attēls. Oracle Forms Runtime noklusētais logu
virsraksts.
Jebkura
professionāli izstrādāta aplikācija vienmēr satur savu nosaukumu, kas
papildināts ar tekošā moduļa nosaukumu. Pamatlogs, kurā tiek startēta
aplikācija, tiek saukts par FORMS_MDI_WINDOW.
Šī loga parametri nevar tikt mainīti izstrādes laikā, tāpēc tie jāmaina
programmātiski. Galvenās formas WHEN-NEW-FORM-INSTANCE
trigerī ir jānomaina šī loga virsraksts lietojot komandu:
Set_Window_Property(Forms_MDI_Window,
Title, “Mana
applikācija”);
11. attēls. Lietotāja
definēts logu virsraksts.
Katrai
formai aplikācijā, tās galvenā moduļa logam ir jāievada tā virsraksts,
aprakstot to loga “Title” īpašībā.
Tādējādi visas aplikācijas darbības laikā jūsu aplikācijas virsraksts būs - “Mana aplikācija [modulis]”.
Ja
aplikācija satur vairākus moduļus (formas), tad katra moduļa nosaukums
jāpievieno cieši klāt visas aplikācijas nosaukumam, izmantojot to pašu
funkciju.
Šad
tad ir ļoti vajadzīgi loga virsrakstā ievietot informāciju par aktīvo rakstu,
bloku, piemēram, tāpāt kā MS Word
attēlo tekoša dokumenta nosaukumu. To, tāpat kā iepriekš tika aprakstīts var
mainīt tikai programmātiski aplikācijas darbības laikā.
Bez
loga virsraksta maiņas vēl var mainīt katra loga ikonu, tādējādi arī grafiski
raksturojot moduli, kuram pieder konkrētā forma. To var izdarīt jebkuram formas
logam, gan formu dizainerī, gan programmātiski formas darbības laikā, izņemot
pašu galveno logu - FORMS_MDI_WINDOW.
Kāpēc Oracle nav devusi iespēju labot arī šo loga ikonu, nav saprotams, taču
paliek cerība, ka tas būs realizēts nākošajā
Oracle Forms 5.0.
4.6. Resursu pārbaude pirms
aplikācijas palaišanas
Developer/2000 vide savai darbībai prasa
ļoti daudz resursu, it sevišķi, ja formā tiek lietots daudz spiedpogu, izvēles
sarakstu, izvēles rūtiņas (check box) un
citi [4]. Iztērējot visus sistēmas resursus, Windows 3.1 vidē tika izraisīta
atmiņas kļūda (GPF - General Protection
Fault or “insufficient memory to run
this application”). Šāda tipa kļūdas ir raksturīgas arī Windows95/NT vidē.
Ja tiek izstrādātas ļoti liela apjoma aplikācijas, tad šāda tipa kļūdas var būt
ļoti biežas, it sevišķi, ja lietotāja datoram ir maz resursu.
Viens
no veidiem kā izvairīties no šāda tipa kļūdām, ielasot kārtējo formu, ir
resursu pārbaude pirms formas ielādes. Ja tas ir zem minimālās robežas, tad
izdod brīdinājuma signālu. Viena no Oracle Forms
4.5 demostrācijām dod piemēru kā noteikt brīvos resursus MS
Windows 3.1 vidē. Lai to pašu veiktu
MS Windows95 vidē, var
izmantot to pašu algoritmu, tikai jāpārraksta *.DLL fails, lai varētu nolasīt
sistēmas un atmiņas resursus MS Windows95
vidē.
Expermentāli
tika pārbaudīts, ka uz datora ar pastāvīgu virtuālās atmiņas apgabalu, gadījumā
ja atmiņas resursi ir zem 10% no iespējamā (runa ir tikai par atmiņu - brīvās
atmiņas attiecība pret visu atmiņas apjomu), Oracle Forms Runtime 4.5 nestartējas, paziņot par atmiņas trūkumu dažādu
bibliotēku ielādei. Tādējādi var uzskatīt, ka kritiskā robeža formas ielādei ir
šie 10%.
Kā kritiskā
robeža jaunas formas ielādei ekspermentāli tika noteiks - 1% no atmiņas
resursiem.
Programmas
koda piemēru, aplikācijas atvēršanai ar atmiņas resursu pārbaudi MS Windows95 videi, var aplūkot
pielikumā, darba beigās.
4.7. Par - ātra informācija par jūsu
aplikāciju
Kā viens no MS Windows aplikāciju interfeisa
standartiem ir parādīt galveno informāciju par aplikāciju atsevišķā logā (About box).
Šādā logā
attēlo vajadzīgo un nepieciešamo informāciju par jūsu aplikāciju. Piemēram,
šādā logā var attēlot šādu informāciju par jūsu aplikāciju kā: aplikācijas
nosaukums, tekošās versijas numurs, izlaišanas datums, kā arī lietotāja “login”
vārds, tekošās formas nosaukums, Oracle datubāzes nosaukumu un pat sistēmas
brīvo resursu apjoms. Tas var lieliski palīdzēt lietotājam aprakstīt sistēmas
tekošo stāvokli, ziņojot par sistēmas kļūdām.
Kā arī, ja
gribas izteikt atzinību projekta komandai, šeit ir īstā vieta kur ievietot viņu
vārdus.

12. attēls. Par -
ātra informācija par jūsu aplikāciju.
Lai izveidotu
šādu formu Developer/2000 vidē,
atliek tikai izveidot parastu formu, kurā pirms datu parādīšanas no datubāzes
vai teksta faila, tiek nolasīta informācija par sistēmas versiju, izstrādes
datumu u.t.t. Pārējo informāciju, kā lietotāju, sistēmas resursus un citus, var
iegūt no sistēmas mainīgajiem, vai izmanojot ORA_FFI funkcijas kā tika minēts iepriekš.
4.8. Paroles maiņa
Laiku
pa laikam sistēmas drošības nolūkos lietotājam ir jāmaina sava parole un
visdraudzīgākais veids kā to veikt ir veidot savu formu ar labu interfeisu, jo
Oracle Forms 4.5 to nepiedāvā kā
standarta iespēju. Visparastākais un vienīgais veids kā to lietotājs var veikt
ir izpildīt dažas komandas SQL*Plus
vidē. Bet, tā kā lielākā daļa lietotāju nav pazīstami ar SQL*Plus (un vispār nezin kādam nolūkam tas paredzēts), ir
vajadzīga vienkāršāka iespēja.

12. attēls. Paroles
maiņa.
Lai
nomainītu lietotāja paroli, ir jāizveido maza forma, kas pārprasa lietotāja
veco paroli, lūdz ievadīt jauno paroli un pēc tam to nomaina. Lietotāja vārdu
un tekošo paroli var uzzināt izmantojot Get_Application_Property
funkciju [4]. Savukārt lai nomainītu lietotāja paroli ir jāizpilda sekojoša
komanda:
Forms_DDL(‘ALTER
USER ‘|| :block.name ||’ IDENTIFIED
BY ‘||
:block.new_password);
Ja
paroles maiņa bijusi veiksmīga, tad tikai atliek aizvērt esošo savienojumu (disconnect) ar Oracle datu bāzi un
atkal atjaunot savienojumu (reconnect),
izmantojot komandas:
LOGOUT;
LOGON(:block.user,
:block.new_password || ‘@’||
ConnectString, TRUE);
4.9. Progresa rādītājs
Salīdzinoši ar
citām DBVS sistēmām, tādām kā MS Fox Pro,
MS Access un citām, Oracle strādā salīdzinoši lēnāk vairāku iemeslu dēļ.
Pirmkārt jau grafiskā interfeisa vide, kas salīdzinoši ar teksta vidi ir
lēnāka. Otrkārt, nodrošinot lielu datu drošumu, tiek zaudēts daudz laika, kaut
vai veicot visparastākās ierakstīšanas vai labošanas operācijas datu bāzē. Taču
lietotājs parasti vērojot ilgus procesus, kas tiek īsi aprakstīti ar frāzi
“Mazliet uzgaidiet…” vai “Working…” ir ne pārāk apmierināts, jo nezin, cik ilgi
vēl mazliet būs jāgaida. Tāpēc gadījumos, kad operācijas ar datiem varētu
ievilkties ilgāk par 20-30 sekundēm, būtu ieteicams lietot progresa rādītāju,
kas parāda cik ātri noris process un cik ilgi tas vēl iespējams turpināsies.

13. attēls. Progresa
rādītājs.
Oracle Forms
to nepiedāvā kā daļu no sava interfeisa, bet to viegli var izveidot kā *.dll
failu kādā citā programēšanas vidē (C++, Delphi). Piemēru kā to veikt, var
aplūkot pielikumā, darba beigās.
4.10. Aplikācijas palaišana
Viens
no parastākajiem veidiem kā startēt Developer/2000
aplikāciju ir izpildīt komandrindu, kas startē Oracle Runforms, kā parametru
saņemot izpildāmās formas vārdu:
c:\orawin\bin\f45run.exe
c:\mydir\myapp.fmx
Taču
tas izskatītos daudz labāk, ja applikācija tiktu startēta, piemēram šādi:
c:\mydir\myapp.exe
Tādējādi
tiks atvieglota sistēmas palaišanas problēma un konfigurēšana. Lielākais
vairums liela apjoma aplikāciju, kas startējas zināmu laiku, izmanto pagaidu (Splash) ekrānus, kas tiek rādīti, kamēr
ielādējas sistēma, parādot, ka notiek sistēmas ielāde. Tas ir labāk nekā
skatīties kā deg diska aktivitātes lampiņa, un domāt vai notiek sistēmas
ielāde, vai atmiņas pārnešana uz disku. Tam ir liela nozīme gadījumos, ja
sistēma startējas ilgu laiku, kas ilgāks par 4-5 sekundēm, it sevišķi kā tas ir
Developer/2000 gadījumā (Oracle Runform ielāde uz Pentium 133MHz datora ar 16Mb
atmiņu aizņem 15-25s). Pagaidu (Splash) ekrāns var tikt iekļauts .exe
failā, kas arī startē aplikāciju.
Programmas piemēru var aplūkot pielikumā, darba beigās.

14. attēls. Pagaidu
ekrāns programmas startēšanas laikā.
Tādu
.exe moduli var izveidot, lietojot daudzus programmēšanas rīkus, kā C, Delphi,
Visual Basic. Startējot programmu no šīs
vides, tiek parādīts grafisks attēls, un pēc tam tiek ielādēta Oracle
aplikācija izpildot sekojošu komandu rindu:
c:\orawin\bin\f45run.exe
c:\mydir\myapp.fmx
Lai programma
varētu izpildīties no jebkuras mašīnas, pirms Oracle aplikācijas startēšanas no
sistēmas reģistrija jānolasa Oracle instalācijas katalogs, lai zinātu, kur
atrodas formu startēšanas programma f45run.exe. Oracle instalācijas katalogs sistēmas reģistrijā atrodas zem
atslēgas -
My Computer\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ORACLE_HOME
4.11. MS Windows palīdzības
logi
Ja
darbam ar aplikāciju nepieciešama labi organizēta palīdzība un visas
applikācijas tiek izstrādātas MS Windows
vidē, tad šeit it tikai viens veids kā to panākt - MS Help. MS Help ir
lielisks līdzeklis sistēmas palīdzības aprakstīšanai, pie kam lietotājs
papildus nav jāapmāca ar to rīkoties, kā tas ir gadījumā ar Oracle Book 2.2 (programma Oracle palīdzības
failu lasīšanai), kas bez tam prasa laiku un datora resursus, lai to lietotu.
Lai to veiktu, var izmantot jebkuru MS
Windows palīdzības tekstu veidotāj-aplikāciju. Tās ir viegli lietojamas,
kas ļauj ātri veidot palīdzības failus. Kad palīdzības faili ir gatavi, tos var
integrēt Developer/2000 aplikāciju
vidē.
No
Oracle vides standarta palīdzību var izsaukt, izmantojot ORA_FFI (Oracle Foreign Function Interface)
paketi [4], kas atļauj izsaukt standarta palīdzības funkcijas no Developer/2000 aplikāciju vides.
Tādējādi iespējams izveidot kontekst-jūtīgu palīdzību jebkurai Oracle
aplikācijai.
4.12. Nodaļlapas (Tabbed pages) - jauns interfeisa standarts
Nodaļu
lapu (tabbed pages) interfeiss kļuva
ļoti populārs tūlīt pēc MS Windows95
iznākšanas. Nodaļu lapas ir viegli
saprotams veids informācijas grupēšanai un pasniegšanai aplikācijā. Šāda veida
informācijas attēlošana, ļauj lietotājam viegli apskatīt visu informāciju
aplikācijā.
Oracle Forms 4.5-ās nodaļlapas var izveidot
lietojot vizuālos pamatelementus VBX (Visual
Basic Control) [4]. Lai šādas lapas izveidotu Oracle Forms 4.5 vidē, ir nepieciešams uzrakstīt programmas kodu, taču kā
informē Oracle corp., nodaļlapas kā interfeisa objekts būs iekļautas jaunajā
Oracle Forms 5.0 versijā (Developer/2000 2.0).
Bez tam
eksistē dažas nianses, ko daži autori iesaka ievērot, veidojot nodaļlapas.
Katru nodaļu vajag nosaukt īsi, parasti vienā vārdā un tam ir jābūt saportamam,
kā arī viennozīmīgi jāraksturo zem tā esošās lapas ideja. Bez tam, nav
ieteicams veidot vairāk par 7 nodaļām vienlaikus, jo cilvēka vizuālās informācijas
uztveres spējas ir ierobežotas.
Nobeigums
Tā
kā Oracle formu veidošanas rīks vēl ir ļoti jauns, vēl nav pieejams pietiekoši
daudz literatūras par dažādiem izstrādes aspektiem, nemaz nerunājot, ka
literatūra latviešu valodā par Oracle nav pieejama vispār. Rakstot šo darbu,
tika atklāts daudz vērtīgas informācijas, kas lasot grāmatas iepriekš, bija
palaists garām, tieši apgūstamās informācijas lielā apjoma dēļ. Gūtās iemaņas
jau ir palīdzējušas vieglāk un efektīvāk veidot Oracle formas un formu šablonformas,
kas ietvertu visu nepieciešamos objektus turpmākai izstrādei. Ļoti liels
ieguvums bija 2. nodaļā aprakstītā šablonformu izmantošana formu ģenerācijā.
Arī līdz šim tika lietotas šablonformas, taču bez atsaucēm uz objektiem. Tas
radīja lielu laika patēriņu sistēmas izstrādes gaitā, kad atklājās, ka
vajadzīgs jauns objekts vai jālabo kāda vizuālā atribūta īpašības (visbiežāk
krāsas), jo izrādās, ka citos datoros, ar citu izšķirtspēju un krāsu paleti, to
nav iespējams redzēt. Nepieciešamo objektu aprakstīšana šablonformā, izmantojot
atsauces, to minimizēja līdz minimumam, jo izmaiņas tagad bija jāveic tikai
vienā vietā - formā no kuras tiek veidota objektu atsauce. 4. nodaļā
aprakstītie piemēri novērš dažus Oracle formu lietotāja-datora interfeisa trūkumus.
Daži no tiem tika apkopoti no rakstiem žurnālos un internetā, daži manis doti,
kas kļuva aktuāli pēc sarunām ar lietotājiem vai vienkārši iedomājoties sevi
lietotāja vietā.
Kā tika minēts
darbā, jaunajā produkta versijā Forms 5.0
ir paredzami uzlabojumi un papildinājumi lietotāja-datora interfeisa jomā -
vairāki jauni interfeisa objekti, kas tagad ir standarta interfeisa objekti MS Windows vidē.
Darbā ar
piemēriem nav ilustrēti 4 nodaļas pēdējie divi punkti. Tas pamatojams ar to, ka
vēl nav skaidrs, kā reāli tos realizēt praktiski, kaut gan to algoritmi jau ir
zināmi. Ceru to izpētīt un prakstiski realizēt tuvākajā laikā.
Literatūra
1. Oracle
Informant, March 1997, vol.2. #3, “Your Game Face - Tips for Developing a
Quality User Interface” p. 8-13, An Informant Communications Group Publication
1997
2. Oracle
Designer/2000 A Guide to Developer/2000 Generation, ORACLE 1995
3. Oracle
Designer/2000 Online Documentation
4. Oracle
Developer/2000 Forms 4.5 Reference Manual vol.1/ vol. 2, ORACLE 1994
5. Oracle
Developer/2000 Forms 4.5 Advanced Techniques Manual, ORACLE 1994
6. Oracle
Developer/2000 Forms 4.5 Getting Started Manual, ORACLE 1994
7. http://www.oracle.com
8. http://www.cco.net/~katkins/oratip
Pielikums
Programmu
teksti
----------------------------
-- RĪKU JOSLAS DARBĪBAS --
----------------------------
/
PROCEDURE TOOLBAR_ACTIONS /
--
This procedure implements the toolbar functionality.
--
The logic reads the pressed button name and then calls
--
the appropriate function. If you want to change the
--
toolbar then make sure the if statement below has one
--
entry for each button.
----------------------------------------------
-- Standart from ORACLE FORMS GENERATOR
-- Modified by me, May 1997
----------------------------------------------
PROCEDURE
TOOLBAR_ACTIONS IS
button_name varchar2(61);
button
varchar2(31);
BEGIN
show_window(get_view_property(get_item_property(
name_in('SYSTEM.CURSOR_ITEM'),
item_canvas), window_name));
button_name :=
name_in('SYSTEM.TRIGGER_ITEM');
button
:= substr(button_name, instr(button_name, '.')+1);
if
(button = 'SAVE') then
do_key('COMMIT_FORM');
elsif (button = 'PRINT') then
do_key('PRINT');
elsif (button = 'CLEAR_FORM') then
do_key('CLEAR_FORM');
elsif (button = 'QUERY_FIND') then
if
(name_in('SYSTEM.MODE') != 'ENTER-QUERY') then
do_key('ENTER_QUERY');
else
do_key('EXECUTE_QUERY');
end if;
ELSIF (button = 'INSERT_RECORD') THEN
do_key('CREATE_RECORD');
ELSIF (button = 'DELETE_RECORD') THEN
do_key('DELETE_RECORD');
ELSIF (button = 'CLEAR_RECORD') THEN
do_key('CLEAR_RECORD');
ELSIF (button = 'LIST') THEN
do_key('LIST_VALUES');
ELSIF (button = 'EDIT') THEN
do_key('EDIT_FIELD');
ELSIF (button = 'HELP') THEN
do_key('HELP');
ELSIF (button = 'OPNAME' ) THEN
-- Operators name who changed this
record
get_operator_name ;
ELSIF (button = 'SWITCH' ) THEN
-- Change layout mode from BROWSE to RECORD
change_layout_mode ;
ELSIF (button = 'HISTORY' ) THEN
-- Record’s update history
Hist.History_Show ;
ELSIF (button = 'EXIT') THEN
do_key('EXIT_FORM');
END IF ;
END;
/PROCEDURE
Change_Layout_Style/
PROCEDURE
change_layout_mode IS
-- Blocks
need always end '1' and '2'
-- blockname1
and blockname2
l_Block_Name VARCHAR2(30) :=
Name_In(':SYSTEM.CURRENT_BLOCK') ;
l_block_name_head
VARCHAR2(30) := SUBSTR( RTRIM( l_Block_Name ), 1,
LENGTH( RTRIM(
l_Block_Name ) ) - 1 );
l_block_name_tail
VARCHAR2(1) := SUBSTR( RTRIM( l_Block_Name ),-1,1);
l_go_block_name
VARCHAR2(30) ;
l_go_block BLOCK ;
BEGIN
-- Change to………
IF l_block_name_tail = '1' THEN
l_go_block_name := l_block_name_head
|| '2' ;
ELSE
l_go_block_name :=
l_block_name_head || '1' ;
END IF ;
-- Block’s ID
l_go_block := FIND_BLOCK( l_go_block_name
) ;
IF ID_NULL( l_go_block ) THEN
-- Block not found -> go to the
same block
l_go_block_name :=
l_block_name_head ;
l_go_block := FIND_BLOCK(
l_go_block_name ) ;
END IF ;
IF NOT ID_NULL( l_go_block )THEN
BEGIN
GO_BLOCK( l_go_block_name ) ;
EXCEPTION
WHEN OTHERS THEN
MESSAGE( 'Unable change
layout :' ||
ERROR_TEXT ) ;
END ;
END IF ;
END;
----------------
-- TOOLTIPS
--
----------------
-- Uses: Hint.pll -- From ORACLE Corp.
--
Shwhnt32.dll
/
PACKAGE HINT.pll /
PACKAGE HINT
IS
PROCEDURE
ShowButtonHelp( timedelay NUMBER := 500);
PROCEDURE
ShowButtonHelpHandler;
PROCEDURE
HideButtonHelp;
END HINT;
/
WHEN-TIMER-EXPIRED TRIGGER /
BEGIN
-- Shows tootip
hint.ShowButtonHelpHandler;
END;
/
WHEN-MOUSE-UP TRIGGER /
/
WHEN-MOUSE-LEAVE TRIGGER /
/
WHEN-MOUSE-DOWN TRIGGER /
/
WHEN-NEW-BLOCK-INSTANCE TRIGGER /
/
WHEN-WINDOW-CLOSED TRIGGER /
/
WHEN-WINDOW-ACTIVATED TRIGGER /
/
WHEN-WINDOW-DEACTIVATED TRIGGER /
BEGIN
-- Hides tootip
hint.HideButtonHelp;
END;
/
WHEN-MOUSE-ENTER TRIGGER /
BEGIN
-- Creates timer for tooltip
hint.ShowButtonHelp;
END;
-------------------------------------
-- IEVADLAUKU KRĀSU APRAKSTĪŠANA --
-------------------------------------
/
WHEN-NEW-FORM TRIGGER /
Set_Field_DSPL_Property(‘BLOCK_NAME’,
‘FIELD_NAME’, Property);
-- Property : 0 - DISABLED
1 - ENABLED, Optional
2 - ENABLED, Mandatory
/PROCEDURE
Set_Field_DSPL_Property/
PROCEDURE
Set_Field_DSPL_Property( block_name IN
CHAR,
field_name IN CHAR,
value IN CHAR) IS
can_update VarChar2(10);
BEGIN
IF value = '0' Then
-- DISABLED Item
Set_Item_Property(block_name||'.'||field_name,
UPDATEABLE,
Property_False);
Set_Item_Property(block_name||'.'||field_name,
VISUAL_ATTRIBUTE,
'DISABLED_ITEM');
Set_Item_Property(block_name||'.'||field_name,
ENABLED, Property_False);
ELSIF value = '1' Then
-- OPTIONAL Item
Set_Item_Property(block_name||'.'||field_name,
ENABLED, Property_True);
Set_Item_Property(block_name||'.'||field_name,
NAVIGABLE, Property_True);
Set_Item_Property(block_name||'.'||field_name,
REQUIRED, Property_False);
Set_Item_Property(block_name||'.'||field_name,
VISUAL_ATTRIBUTE,
'CG$ITEM');
ELSIF value = '2' Then
-- MANDOTARY Item
can_update:=Get_Item_Property(block_name||'.'||
field_name, UPDATEABLE);
Set_Item_Property(block_name||'.'||field_name,
ENABLED, Property_True);
Set_Item_Property(block_name||'.'||field_name,
NAVIGABLE, Property_True);
Set_Item_Property(block_name||'.'||field_name,
VISUAL_ATTRIBUTE, 'CG$ITEM');
-- REQUIRED var uzstadīt tikai ja
UPDATEABLE=true
Set_Item_Property(block_name||'.'||field_name,
UPDATEABLE, Property_True);
Set_Item_Property(block_name||'.'||field_name,
REQUIRED, Property_True);
IF can_update = 'FALSE' then
Set_Item_Property(block_name||'.'||
field_name,
UPDATEABLE, Property_False);
END IF;
END IF;
END;
-----------------------
-- LOGU VIRSRAKSTI --
-----------------------
/PRE-FORM
TRIGGER/
Set_Window_Property(FORMS_MDI_WINDOW,
WINDOW_STATE, MAXIMIZE);
Set_Window_Property(FORMS_MDI_WINDOW,
TITLE, ‘MY_APPLICATION’);
Set_Window_Property(‘WINDOW_NAME’,
TITLE, ‘MY_MODULE’);
---------------------------------
-- SISTĒMAS RESURSU PĀRBAUDE --
---------------------------------
-- Uses: MemInfo.pll --
Interface for MemInfo.dll
MemInfo.dll -- Written by Eriks Aleksans
/
MemInfo.pll /
PACKAGE
MemInfo IS
FUNCTION TotalPhysMem RETURN PLS_INTEGER;
FUNCTION FreePhysMem RETURN PLS_INTEGER;
FUNCTION TotalVirtualMem RETURN
PLS_INTEGER;
FUNCTION FreeVirtualMem RETURN
PLS_INTEGER;
END;
PACKAGE BODY
MemInfo IS
---------------------------------------------------------
-- Special
THANKS to Eriks Aleksans (Xire) for
--
MEMINFO.DLL /written in Delphi II/
---------------------------------------------------------
lu ORA_FFI.LIBHANDLETYPE :=
ORA_FFI.load_Library('',
'MEMINFO.DLL');
f1 ORA_FFI.FUNCHANDLETYPE :=
ORA_FFI.Register_Function(lu,
'TotalPhysMem',
ORA_FFI.PASCAL_STD);
f2 ORA_FFI.FUNCHANDLETYPE :=
ORA_FFI.Register_Function(lu, 'FreePhysMem',
ORA_FFI.PASCAL_STD);
f3 ORA_FFI.FUNCHANDLETYPE :=
ORA_FFI.Register_Function(lu,’TotalVirtualMem',
ORA_FFI.PASCAL_STD);
f4 ORA_FFI.FUNCHANDLETYPE :=
ORA_FFI.Register_Function(lu, 'FreeVirtualMem',
ORA_FFI.PASCAL_STD);
---------------------------------------------------------
FUNCTION GetResult(fh IN
ORA_FFI.FUNCHANDLETYPE)
RETURN PLS_INTEGER;
PRAGMA interface(c, GetResult, 11265);
---------------------------------------------------------
Function TotalPhysMem return PLS_INTEGER
IS
BEGIN
Return Round(GetResult(f1)/1024);
END;
Function FreePhysMem return PLS_INTEGER IS
BEGIN
Return Round(GetResult(f2)/1024);
END;
Function TotalVirtualMem return
PLS_INTEGER IS
BEGIN
Return Round(GetResult(f3)/1024);
END;
Function FreeVirtualMem return PLS_INTEGER
IS
BEGIN
Return Round(GetResult(f4)/1024);
END;
---------------------------------------------------------
BEGIN
ORA_FFI.Register_Return(f1, ORA_FFI.C_INT);
ORA_FFI.Register_Return(f2, ORA_FFI.C_INT);
ORA_FFI.Register_Return(f3, ORA_FFI.C_INT);
ORA_FFI.Register_Return(f4, ORA_FFI.C_INT);
END;
/
FUNCTION FreeMemResources /
FUNCTION
FreeMemResources return PLS_INTEGER IS
BEGIN
Return Round(((MemInfo.FreePhysMem +
MemInfo.FreeVirtualMem) /
(MemInfo.TotalPhysMem
+ MemInfo.TotalVirtualMem))
* 100);
END;
/
PROCEDURE Call_My_Form with no parameters/
PROCEDURE
Call_My_Form (name IN char) IS
min_mem NUmber
:= 1;
al_id
Alert;
al_button Number;
BEGIN
IF FreeMemResources > min_mem then
-- OK. Call form
Call_Form(name, HIDE, NO_REPLACE,
NO_QUERY_ONLY);
ELSE
al_id :=
Find_Alert('YES_NO_CHOICE');
IF Id_Null(al_id) THEN
MSG_ALERT('Error: ALERT
''YES_NO_CHOICE''
not found!', 'E', True);
ELSE
Set_Alert_Property(al_id,
alert_message_text,
'WARNING:
There are less than ' || To_Char(min_mem) || '% of memory free! Do You want to
continue?');
END IF;
al_button := Show_Alert( al_id );
IF
al_button = alert_button1 then
Call_Form(name, HIDE,
NO_REPLACE, NO_QUERY_ONLY);
ELSE
Return;
END IF;
END IF;
END;
/
PROCEDURE Call_My_Form with parameters /
PROCEDURE
Call_My_Form_With_Param (name IN CHAR,
pl_id IN PARAMLIST) IS
min_mem NUmber
:= 1;
al_id
Alert;
al_button Number;
BEGIN
IF FreeMemResources > min_mem then
-- OK. Call form
Call_Form(name, HIDE, NO_REPLACE,
NO_QUERY_ONLY, pl_id);
ELSE
al_id :=
Find_Alert('YES_NO_CHOICE');
IF Id_Null(al_id) THEN
MSG_ALERT('Error: ALERT
''YES_NO_CHOICE''
not found!', 'E', True);
ELSE
Set_Alert_Property(al_id,
alert_message_text,
'WARNING:
There are less than ' || To_Char(min_mem) || '% of memory free! Do You want to
continue?');
END IF;
al_button := Show_Alert( al_id );
IF al_button = alert_button1 then
Call_Form(name, HIDE,
NO_REPLACE, NO_QUERY_ONLY,
pl_id);
ELSE
Return;
END IF;
END IF;
END;
---------------------------------------------
-- PAR - ĀTRA INFORMĀCIJA PAR APLIKĀCIJU --
---------------------------------------------
/WHEN-NEW-FORM-INSTANCE
TRIGGER/
DECLARE
vcVer varchar2(40);
BEGIN
Set_Window_Property('ABOUTWINDOW', TITLE,
'About ‘
||:parameter.system);
show_window_centered('ABOUTWINDOW');
IF :parameter.version_number is not null
then
vcVer := ' Version: ‘
||:parameter.version_number;
END IF;
:about.System := :parameter.System;
:about.version := vcVer;
:about.Copyright := :parameter.copyright_msg;
:about.user := User;
:about.database :=
Get_Application_Property(Connect_String);
IF :about.database IS NULL then
:about.database := 'Default';
END IF;
IF Get_Application_Property(Calling_Form)
IS NOT
NULL then
:about.form :=
Get_Application_Property(Calling_Form);
ELSE
:about.form := 'None';
END IF;
:about.mem :=
To_Char(FreeMemResources)||
' %';
Go_Item('ABOUT.CLOSE');
END;
---------------------
-- PAROLES MAIŅA
--
---------------------
/WHEN-BUTTON-PRESSED
TRIGGER/
-- Uses : OUO package -- SIMPLE ALERTS SERVICE
SRV
package -- SIMPLE PACKAGE, that returns
ITEMS ID
DECLARE
curr_butt VARCHAR2(61) := :SYSTEM.TRIGGER_ITEM;
i NUMBER;
BEGIN
IF curr_butt = 'BT.OK_BUTT' THEN
IF NVL( :BT.PASSWORD , CHR(7) )
<> :BT.PWD THEN
-- old password does not match
i := ouo.up_alert(
ouo.A_WARNING,
'WARNING',
'Old password does not match!');
GO_ITEM( srv.ptr_password );
ELSIF :BT.NEW_PASSWORD IS NULL THEN
i := ouo.up_alert(
ouo.A_WARNING,
'WARNING',
'Password cannot be empty!');
GO_ITEM( srv.ptr_password );
ELSIF :BT.NEW_PASSWORD <> NVL( :BT.NEW_VERIFY
, CHR(7) ) THEN
-- old password OK, new isn't NULL
i := ouo.up_alert(
ouo.A_WARNING,
'WARNING',
'New
passwords does not match!');
GO_ITEM( srv.ptr_password );
ELSE
Change_Password;
END IF;
ELSIF curr_butt = 'BT.CANC_BUTT' THEN
DO_KEY('EXIT_FORM');
END IF;
END;
/PROCEDURE
Change_Password /
-- Uses : OUO package -- SIMPLE
ALERTS SERVICE
SRV
package -- SIMPLE PACKAGE, that returns
ITEMS ID
PROCEDURE
Change_Password IS
i NUMBER;
SQL_Text VARCHAR2(128);
BEGIN
i := ouo.up_alert( ouo.A_ACCEPT, 'ACCEPT',
'Are you sure you
wish to change the
password?');
IF i = ALERT_BUTTON1 THEN
i := ouo.up_alert( ouo.A_ACCEPT,
'ACCEPT','Accept
once more : are you sure you wish to change the password?');
IF i = ALERT_BUTTON1 THEN -- Do IT!
i := ouo.up_alert(
ouo.A_ACCEPT,
'WARNING',
'Attempt to change password will commit all uncommited changes! Do You want to
continue?');
IF i = ALERT_BUTTON1 THEN
IF :BT.NEW_PASSWORD IS
NULL THEN
SQL_Text := 'ALTER
USER '||
:BT.USR ||
' IDENTIFIED
EXTERNALLY';
ELSE
SQL_Text := 'ALTER
USER '||
:BT.USR ||
'
IDENTIFIED BY "'|| :BT.NEW_PASSWORD||'"';
END IF; --
:BT.NEW_PASWORD IS NULL
FORMS_DDL( SQL_Text );
IF FORM_SUCCESS THEN
i := ouo.up_alert(
ouo.A_INFORM,
'NOTE',
'Your password has been changed
successfuly.');
DO_KEY('EXIT_FORM');
ELSE
DECLARE
et VARCHAR2(200) :=
DBMS_ERROR_TEXT;
t
VARCHAR2(200):=
ERROR_TEXT;
BEGIN
i :=
ouo.up_alert(
'CFG_ERROR',
'DBMS_ERROR', et);
GO_ITEM(
srv.ptr_new_password);
END;
END IF; -- FORM_SUCCESS
ELSE
GO_ITEM(
srv.ptr_password );
END IF; -- i = ALERT_BUTTON1
ELSE
GO_ITEM( srv.ptr_password );
END IF; -- i = ALERT_BUTTON1 THEN --
Do IT!~
ELSE
GO_ITEM( srv.ptr_password );
END IF;
END;
/
PACKAGE OUO /
PACKAGE OUO
IS -- Often Used Objects
--
for F45 with STDT_KON referenced objects
A_SYS_ERR
ALERT := FIND_ALERT('CFG_SYSTEM_ERROR');
A_ERROR
ALERT; := FIND_ALERT('CFG_ERROR');
A_INFORM
ALERT := FIND_ALERT('CFG_INFORMATION');
A_WARNING
ALERT := FIND_ALERT('CFG_WARNING_A');
A_ACCEPT
ALERT := FIND_ALERT('CFG_ACCEPT_A');
--
PROCEDURES AND FUNCTIONS
--
ALERTS SERVICES
FUNCTION
Up_ALERT ( a_id ALERT, a_Title VARCHAR2,
a_Message VARCHAR2)
RETURN NUMBER;
FUNCTION
Up_ALERT ( a_name VARCHAR2, a_Title VARCHAR2,
a_Message VARCHAR2)RETURN
NUMBER;
--
Error message from code
FUNCTION
Treat_Error_Code ( eCode NUMBER ) RETURN VARCHAR2;
END;
/PACKAGE
SRV/
PACKAGE srv
IS
-- Returns Items ID for “Change_Password”
form’s objects
ptr_password
ITEM := FIND_ITEM( 'BT.PASSWORD' ) ;
ptr_new_password
ITEM := FIND_ITEM( 'BT.NEW_PASSWORD' ) ;
ptr_new_verify
ITEM := FIND_ITEM( 'BT.NEW_VERIFY' ) ;
ptr_ok_butt
ITEM := FIND_ITEM( 'BT.OK_BUTT' ) ;
ptr_canc_butt
ITEM := FIND_ITEM( 'BT.CANC_BUTT' ) ;
END;
-------------------------
-- PROGRESA RĀDĪTĀJS --
-------------------------
-- Uses: INDI.pll -- Interface library for
--
INDI32.dll
INDI32.dll -- Writen by Karlis
Ogsts
--
in C++
/
INICIALIZĀCIJA /
If
INDI.LoadLibrary(err_txt) then
INDI.Open;
Msg_Txt:='Preparing interface files ...';
INDI.SetInfoMessage(msg_txt);
INDI.SetIndicator( 0 );
else
Message(err_txt);
Return;
End If;
/
TEKOŠĀS VĒRTĪBAS PARĀDĪŠANA /
INDI.SetIndicator(
2 );
/
PROGRESA RĀDĪTĀJA AIZVĒRŠANA /
INDI.CLOSE;
INDI.FreeLibrary;
/
INDI.pll /
package indi
is
function
LoadLibrary(szErrorMessage in out varchar2)
return boolean;
procedure
Open;
procedure
SetIndicator(plsComplete pls_integer);
procedure
SetInfoMessage(szInfoMessage in out varchar2);
procedure
Close;
procedure
FreeLibrary;
END;
--------------------------------------------------------
--
APLIKĀCIJAS STARTĒŠANA AR SPLASH EKRĀNU un RESURSU --
--
PĀRBAUDI --
--------------------------------------------------------
/
WHEN-NEW-FORM-INSTANCE TRIGER /
IF USER =
'GHOST' then
-- kill splash screen
HOST('Erase c:\issuing.knt', NO_SCREEN);
-- Reconect;
LOGOUT ;
WHILE NOT Connected LOOP
LOGON_SCREEN;
o_user := GET_APPLICATION_PROPERTY(
USERNAME ); o_pwd := GET_APPLICATION_PROPERTY( PASSWORD );
o_cs := GET_APPLICATION_PROPERTY(
CONNECT_STRING
) ;
IF RTRIM( o_user ) IS NOT NULL THEN
IF RTRIM( o_cs ) IS NOT NULL
THEN
LOGON( o_user , o_pwd
||'@'|| o_cs , FALSE);
ELSE
LOGON( o_user , o_pwd ,
FALSE );
END IF ;
ELSE
-- Atgriezts tukss USER vaards
EXIT_FORM;
END IF ;
BEGIN
for tmp IN 1..123 LOOP
test := ' '; -- citadi nakosa rinda
-- Exception! nezkapeec ?!?
END LOOP;
-- testejam vai ir konekts, ja
nav tad buus
-- Excpetions
test := USER;
Connected := True;
EXCEPTION
WHEN OTHERS Then
LOGOUT;
-- Ļaujam konektētie
tikai 3x
IF Try = 3 then
EXIT_FORM;
END IF;
Try
:= Try + 1;
END;
END LOOP;
END IF;
/
MY_APPLICATION.EXE written in DELPHI II /
program mpcs;
uses
Forms,
Unit1 in 'Unit1.pas' {main};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(Tmain, main);
Application.Run;
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,
ExtCtrls, T3Dt, StdCtrls, nbutton, NoTask,
RegFiles;
type
Tmain = class(TForm)
Panel1: TPanel;
Image1: TImage;
Timer1: TTimer;
Timer2: TTimer;
NoTask1: TNoTask;
Reg: TRegFile;
Text3D1: TText3D;
Text3D2: TText3D;
Text3D3: TText3D;
Text3D4: TText3D;
procedure FormKeyDown(Sender: TObject; var
Key: Word;
Shift: TShiftState);
procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
f : file;
tagadvar : boolean;
procedure OuttaHere;
public
{ Public declarations }
end;
var
main: Tmain;
implementation
{$R *.DFM}
procedure
Tmain.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
-- Avārijas gadijumā vienmēr varam aivērt
splash screen ar F12
if Key = VK_F12 then Halt;
end;
procedure
Tmain.OuttaHere;
begin
Halt;
end;
procedure
Tmain.Timer1Timer(Sender: TObject);
var
i : integer;
s : TSearchRec;
begin
if not tagadvar then Exit;
// Skatamies uz fiktiivu failu ko, savukārt
dzēš ieks
// FORMS 4.5 kad taa stratējusies.
//
------------------------------------------------------
// DEREETU PAARTAISIIT UZ REGISTRI
!!!!!!!!!!!!
if FindFirst('c:\forms45.knt', faArchive,
s) <> 0 then begin
FindClose(s);
Timer1.Enabled := False;
OuttaHere;
end;
FindClose(s);
end;
procedure
Tmain.Timer2Timer(Sender: TObject);
var
s,
s1 : string;
i :
integer;
begin
s := Reg.ValueDefault['ORACLE_HOME', s];
-- Palaizam formu, kas pieslēdzas ar
fiktiivu useri GHOST
s := s + '\bin\f45run32.exe TOP_MPCS.fmx
USERID=GHOST/G';
for i := 1 to ParamCount do begin
s := s + ParamStr(i);
end;
Timer2.Enabled := False;
// Izveidojam fiktiivo failu
AssignFile(f, 'c:\forms45.knt');
ReWrite(f, 1);
CloseFile(f);
tagadvar := True;
WinExec(PChar(s), 1);
end;
function
FreePhysMem : integer; stdcall external 'meminfo.dll'
index 1;
function
TotalPhysMem : integer; stdcall external 'meminfo.dll'
index 2;
function
FreeVirtualMem : integer; stdcall external 'meminfo.dll'
index 3;
function
TotalVirtualMem : integer; stdcall external 'meminfo.dll'
index 4;
procedure
Tmain.FormCreate(Sender: TObject);
const
st = ' ';
var
s : string;
i : integer;
begin
s := Reg.ValueDefault['LOCAL', s];
if s = '' then begin
//
Registrija jaabut LOCAL datubaazei defineetai…
ShowMessage(' Local connect string not defined
in registry! ');
Halt;
end;
i := Round( ((FreePhysMem + FreeVirtualMem)
/
(TotalPhysMem +
TotalVirtualMem)) * 100);
// RESURSU Pa’rbaude………
if i <= 10 then begin
if Application.MessageBox('Free memory
resources less than
10 %. ' +
'Do You want to continue?',
'Warning',
MB_ICONQUESTION
+ MB_YESNO) = IDNO
then Halt;
end;
tagadvar := False;
end;
end.
Nav komentāru:
Ierakstīt komentāru