5 TOTEUTETTU JÄRJESTELMÄ
5.2 Funktionaalinen laskentalogiikka
5.3.2 Rakennettavien sovellusten ominaisuudet
Näkymien automaattinen päivittyminen
MUST-sovellus sisältää tyypillisesti useita attribuuttien välisiä laskennallisia riippuvuuksia. Käyttäjä voi avata monia yhtäaikaisia lomakkeita, joissa näytetään mallissa olevien attribuuttien arvoja. Syöttöarvoja voidaan muuttaa suoraan kirjoit
tamalla lomakkeella olevan arvon päälle uusi. Muutosten jälkeen järjestelmä päivittää automaattisesti uudet laskennallisesti riippuvat luvut kaikkiin avoinna oleviin näkymiin.
Tätä toiminnallisuutta kutsutaan päivittymismekanismiksi ja se on toteutettu MOS- ytimen tasolla.
Kaikki MOS-luokat sisältävät MOSObject-luokasta perityn päivittymisominaisuuden.
Jokaiseen MOSObject-luokm instanssiin voidaan liittää haluttu määrä ViewLink- luokasta perittyjä linkkejä, jotka kertovat oliossa tapahtuneista muutoksista. Linkit pyytävät jokaisen transaktion jälkeen näkymiä päivittämään uudet arvot muuttuneille olioille. Viestien viivästettyä lähettämistä varten muutostiedot puskuroidaan globaaliin Updator-luokan instanssiin. Seuraavassa on esimerkki päivittymismekanismin toimin
nasta vaiheittain:
1. Luodaan malli, jossa on tietoalkiot a ja b, a:n arvo riippuu b:n arvosta.
2. Avataan malliin näkymä, jossa esitetään tietoalkioiden a ja b arvot. Näkymä luo linkit molempiin tietoalkioihin.
3. Käyttäjä muuttaa näkymän avulla tietoalkion b arvoa.
4. Riippuvuustiedon avulla tietoalkion a arvo invalidoidaan.
5. Koska tietoalkioon a on ainakin yksi linkki, lisätään tietoalkio a globaalin updator- instanssin päivitettävien olioiden listaan.
6. Kun transaktio on ohi, käy updator läpi listan päivitettäviä olioita ja käskee näiden lähettää päivittymisviestin näkymille.
7. Tietoalkio a lähettää päivittymisviestin näkymälle linkin avulla.
8. Näkymä pyytää tietoalkiolta a uuden arvon - joka tässä vaiheessa lasketaan laskentasääntökielen avulla - ja päivittää sen kuvaruudulle.
Mallissa olevien lukujen esittäminen taulukkomuodossa
Taulukkomuotoinen esitystapa on tuttu kaikille taulukkolaskentaohjelmistojen käyttäjille. Taulukko koostuu soluista, jotka voidaan yksikäsitteisesti tunnistaa rivi- ja sarakekoordinaattien avulla. Solu voi sisältää yhden liukuluvun tai merkkijonon.
MUST-järjestelmässä voidaan kaikkia mallin tietoja esittää ns. taulukkonäkymien soluissa. Taulukkonäkymä on MOS-luokasta TableViews tai sen alaluokasta luotu MOS-instanssi, jonka nimi on näkymän nimi. Näkymän soluissa näytettävät tiedot määritellään erillisen TableFormatCodes-kielen avulla, jonka käyttöopas on liitteenä D.
Erillisten näkymien avulla voidaan sovelluksia rakentaa hyväksi todetun 'Model-View- Controller' - ajattelutavan mukaisesti [Lian94], Kaikki sovelluksen todelliset tiedot ja rakenteet kuvataan käsitemallin luokissa ja talletetaan luokista luotuihin instansseihin (Model). Näkymät toteutetaan TableView-luokan instansseina (View), jotka hakevat esitettävät tiedot malliin liittyvillä relaatioilla. Näkymien toimintaa ohjataan MUST- järjestelmän C++-kielellä rakennettujen laskentasääntö-, invalidointi-, päivittymis- ja
siirtymismekanismien avulla (Controller).
Taulukkojen välisten siirtymien toteuttaminen
Monipuolisessa raportointikäyttöliittymässä voidaan erottaa ainakin seuraantyyppisiä siirtymiä:
• Siirtyminen mielivaltaiselta lomakkeelta sovelluksen päämenuun.
• Siirtyminen hierarkisten menu-lomakkeiden välillä. Ylemmän tason lomakkeelta voidaan siirtyä useaan alemman tason lomakkeeseen. Jokaiselta alemman tason lomakkeelta voidaan siirtyä takaisin ylemmälle tasolle.
• Eteneminen lomakkeelta toiselle etukäteen määriteltyjä raporttiketjuja pitkin.
Ketjussa voidaan liikkua eteen- tai taaksepäin.
• Synkronoitujen ketjujen välinen siirtymä. Sama informaatio voidaan näyttää esimerkiksi kuvina tai lukuarvoina. Molempia tapoja varten voidaan rakentaa oma ketju, jota pitkin edetään. Siirryttäessä ketjusta toiseen, esimerkiksi lukuketjusta kuvaketjuun, tulee näytettävä raportti valita vastaavalta kohdalta toisesta ketjusta.
• Siirtyminen käyttäjän listasta valitsemalle raportille.
Koska kaikki taulukkonäkymät ovat MO S-instanssej a, voidaan näkymien väliset siirtymät helposti esittää näiden instanssien välisillä relaatioilla. Järjestelmä tarjoaa mekanismit varsinaisen siirtymisen suorittamiseksi. Siirtymä kuvataan kiinnittämällä siirtymien kohteina olevia instansseja nimettyihin JumpX-relaatioihin, joissa X korvataan hypyn tunnisteella.
Kuvassa 25 on esimerkki RaporttiMenun ja kolmen muun näkymän välisistä siirtymistä.
RaporttiMenu-instanssia vastaavasta näkymästä voidaan hyppyrelaation Jumpl mukaisesti siirtyä suoraan Tuloslaskelma- instanssia vastaavaan näkymään.
Tuloslaskelma-instanssilta voidaan /z/mp4-relaation avulla siirtyä ketjua pitkin eteenpäin Tase-näkymään, tai Jump5-relaatiota pitkin takaisin RaporttiMenuun.
RaporttiMenuun määritellyn Jump2-relaation avulla käyttäjää pyydetään valitsemaan listasta joku kolmesta mahdollisesta näkymästä: Tuloslaskelma, Tase tai Syöttötiedot.
Jump5 Tuloslaskelma
\ .Iiimp4
RaporttiMenu
JumpS v__Jump4.
JumpS iyöttötiedot
■ Iiimp4
Kuva 25 Esimerkki näkymien välisistä siirtymistä
Siirtymiä kuvaavien relaatioiden arvot voidaan laskea laskentasääntöjen avulla.
Relaatioihin liitettävät laskentakielen säännöt ovat erinomainen apuväline edellä kuvattujen siirtymien hallitsemiseksi. Erityisesti käyttäjäkohtaisten suojauksien hallinta onnistuu laskentasäännöissä joukko-operaatioiden avulla. Raporttiketjujen luomisessa voidaan käyttää apuna myös relaatioiden kaksisuuntaisia linkkejä.
Kaikista sovelluksen käyttöliittymään kuuluvista näkymistä voidaan myös piirtää instanssinäkymä, jossa instanssien väliset viivat tarkoittavat mahdollisia siirtymiä näkymästä toiseen.
Käyttöliittymässä käsky siirtyä taulokkonäkymältä toiselle tehdään painonappiin liitetyn hyppykäskyn avulla. Sovelluksen rakentajan ei tarvitse itse kirjoittaa proseduraalista koodia varsinaisen siirtymän toteuttamiseen, vaan hypyn numeron perusteella valitaan MUST-mallissa määritelty relaatio.
Sovelluksen käyttäjäkohtaisten suojausten rakentaminen
Sovellukset saattavat sisältää hyvinkin arkaluonteisia tietoja, joihin pääsy halutaan rajata vain tiettyihin käyttäjiin tai käyttäjäryhmiin. MUST-järjestelmässä rajaus voidaan tehdä yleiskäyttöisten laskentasääntöjen avulla. Jokaista käyttäjää varten luodaan MOS- luokasta Userlnfo instanssi, johon talletetaan mm. käyttäjän tunnus ja salasana. Tämä instanssi voidaan liittää mielivaltaisiin käyttäjäryhmiin, jotka voidaan edelleen toteuttaa mallinnusympäristön avulla. Käyttäjäkohtaiseen instanssiin voidaan laskentasääntöjen avulla laskea käyttöliittymässä valittaville muuttujille mahdollisia arvoja. Käyttäjä voi näin valita muuttujalle arvoksi vain omien käytäjäoikeuksiensa mukaisia arvoja, esimer
kiksi käyttäjä voi tarkastella vain tiettyjä tuotteita tai yksikköjä raportointisovelluksessa.
Makrokieli
Talletus- ja latausrutiinien yhteydessä MUST-järjestelmään tehtiin kieli, jonka avulla malli voidaan luoda peräkkäisiä komentoja suorittamalla. Syntaksia on myöhemmin laajennettu säilyttäen kuitenkin yhteensopivuus vanhojen rutiinien kanssa.
MUST-järjestelmän makrokieli on rivipohjainen ja selväkielinen. Jokaisen rivin alussa on ensin suoritettava komento ja sen jälkeen parametrit. Luvut ja lukulistat esitetään lainausmerkkien sisällä olevina selväkielisinä merkkijonoina.
Makrokielen viittaukset mallin olioihin ovat selväkielisiä lainausmerkkien sisällä olevia olioiden nimiä. Tästä rajoituksesta johtuen luokilla, instansseilla, säännöillä ja attri
buuteilla täytyy olla yksikäsitteiset nimet.
Makrokielen avulla kokenut mallittaja voi helposti luoda systemaattisesti toistuvia mallin osia. Kokonaisia luokkia voidaan siirtää mallista toiseen suorittamalla luokkamäärityksiä vastaava makrokoodi uudessa mallissa. Samoin on myös mahdollista siirtää instansseja.