Content extract
Tartalomjegyzék Tartalomjegyzék Tartalomjegyzék .2 Bevezetés.6 1. Első lépések: CD nyilvántartás8 1.1 Üres adatbázis létrehozása8 1.11 Előkészületek 8 1.12 Alapfogalmak8 1.13 Új alkalmazás létrehozása10 1.14 Új adatbázis létrehozása 12 1.2 Űrlapok 16 1.21 Új űrlap létrehozásának folyamata 16 1.22 Új űrlap létrehozása 17 1.23 A Lotus Domino Designer felület használata17 1.24 Szövegek elhelyezése18 1.25 Kép beillesztése 20 1.26 Az űrlap mentése 21 1.27 Mezők létrehozása 23 1.28 Mezők finomítása 31 1.3 Nézetek 33 1.31 Első új nézet létrehozása (Előadó szerint)34 1.32 Kategorizált nézet létrehozása (Stílus szerint)43 1.33 Kategorizált nézet egyszerű formulával (Kinél van) 46 1.34 Szűkített listájú nézet (Rockzenék) 47 1.35 Nézet törlése 51 1.4 Utolsó simítások 51 1.41 Az űrlapok és nézetek felülvizsgálata51 1.42 Műveletek (Action) létrehozása52 1.43 Ikon tervezése 57 1.44 “Adatbázis névjegye”
dokumentum 58 1.45 “Adatbázis használata” dokumentum 59 2. Egy komolyabb feladat: Ügyfélkövetés 60 2.1 A feladat megfogalmazása60 2.2 Űrlapok létrehozása 61 2.21 Új adatbázis létrehozása 61 2.22 A Cégnyilvántartó űrlap63 2.23 Statikus szöveg létrehozása: a megvalósítás első lépése 65 2 Tartalomjegyzék 2.24 Mezők létrehozása a Cégnyilvántartó űrlapon: a második lépés71 2.25 Műveletek felvétele a Cégnyilvántartó űrlapra75 2.26 A válaszűrlapok 75 2.27 Az Esemény űrlap megtervezése 78 2.28 Az Esemény űrlap létrehozása79 2.29 A Válasz űrlap megtervezése94 2.210 A Válasz űrlap létrehozása 95 2.211 Az űrlap egyes tervelemeinek elrejtése 97 2.212 Utolsó ellenőrzések egy űrlap tervezésénél 101 2.3 Nézetek létrehozása 102 2.31 Cégkártyák nézet103 2.32 Egy segédnézet: a Termékek 105 2.33 Összes dokumentum nézet: a válaszdokumentumok megjelenítése 106 2.34 Ikonok megjelenítése egy oszlopban 111 2.35
Belső kapcsolat nézet113 2.36 Határidők nézet 115 2.37 Gyűjtők 123 2.4 Ügynökök 124 2.5 Navigátorok 132 3. További fejlesztési eszközök 141 3.1 Űrlapok továbbfejlesztése 141 3.11 Osztott mezők 141 3.12 Részűrlapok 144 3.13 Az összezárható szakasz 147 3.14 Ellenőrzött hozzáférésű szakasz 150 3.15 Lábléc készítése az Ügyfélkövetés három űrlapjához 151 3.16 Segítségek a mezők kitöltéséhez155 3.17 Egyéb forrópontok 157 3.18 A mezőtípusokról, utoljára 159 3.19 Dokumentumok titkosítása kulcsokkal 165 3.110 Levélküldés a Válasz űrlappal 169 3.111 Dokumentumok verziókövetése172 3.112 Az űrlapok továbbfejlesztéséhez szükséges egyéb tudnivalók173 3.2 Nézetek indexelése 184 3.3 Adatbázis szintű védelem (ACL) 187 4. Irány a web: Ödönke honlapja191 4.1 Webes eszközök bemutatása 191 4.2 Adatbázisunk jelenlegi megjelenése a weben 193 4.3 Tervezett rendszer 195 4.4 Új adatbázis létrehozatala197 3
Tartalomjegyzék 4.41 Űrlap táblázatos formában197 4.42 Képek importja képerőforrássá (odonkegif, pontgif) 198 4.43 Keretek elnevezése 199 4.44 Szerkezet létrehozása199 4.45 Lapok létrehozása 202 4.46 Beágyazott szerkezet használata 203 4.47 Keretkészlet létrehozása 206 4.48 Keret tartalmának definiálása 208 4.49 Honlap lap létrehozása forróponttal 210 4.410 Adatbázismegnyitás beállítása211 4.5 Továbbfejlesztés212 4.51 Dokumentumok törlése212 4.52 Nézetnavigációs eszközök megváltoztatása (beágyazott nézet) 212 4.53 Nézet megjelenítése Javával 214 4.54 Rich Text mező Java módra216 4.55 $$Return – A Form processed felirat megváltoztatása217 4.6 További webes tippek217 4.61 Webes keresés lapjainak megváltoztatása 218 4.62 File upload control220 4.63 ACL beállítása a Webes adatbázistípusokra220 5. Programozási környezet222 5.1 Hol használhatjuk az egyes programozási lehetőségeket? 222 5.11 Mit is jelentenek az egyes
programozási lehetőségek? 223 5.12 Mikor használjunk képleteket és mikor scriptet? 223 5.2 Képletek224 5.21 Kiértékelési sorrend227 5.22 @függvények 230 5.23 Kapcsolat a felhasználóval 250 5.24 @Parancsok 254 5.25 Kiértékelési sorrend255 5.26 Néhány fontosabb @parancs 256 5.3 LotusScript 260 5.31 Áttekintés 260 5.32 Programozási környezet261 5.33 Script szintaxis264 5.34 A LotusScript front-end és back-end osztályai274 6. Rendszeradminisztráció alapjai 296 6.1 Néhány alapfogalom296 6.2 Az elmélet297 6.21 Példarendszer tervezése 297 4 Tartalomjegyzék 6.22 A domain297 6.23 Hierarchikus elnevezési rendszer (X500)297 6.24 A hitelesítők és ID fájlok rendszere299 6.3 A gyakorlat 300 6.31 A számítógépek és azok előzetes beállításai300 6.32 Első szerver telepítése301 6.33 Domino Administrator telepítése303 6.34 Az adminisztrációs felület bemutatása 304 6.35 Hitelesítők (certid fájlok) létrehozatala 306 6.36 Szerver
regisztrálása 307 6.37 További szerverek telepítése308 6.38 Felhasználók regisztrálása, csoportok 308 6.39 Kliens telepítése309 6.4 Notes alapfunkciók309 6.41 Notes levelezés elmélete310 6.42 Replikáció 314 6.43 Replikációs konfliktus 317 6.44 Adminisztrációs folyamat 318 6.5 Amit egy adminisztrátornak még tudnia kell319 6.51 Szerver konzol 319 6.52 A Domino szerver mentése (backup)321 6.53 Adatbázisfájlok elhelyezése más lemezmeghajtón321 6.54 Több szervezet összekapcsolása 322 Tárgymutató.324 5 BEVEZETÉS Bevezetés Nekem szól ez a könyv? A könyvesboltban egy új könyvet kezünkben tartva mindig felmerül az a kérdés, hogy számunkra hasznos lesz-e, vagy sem. Ez a könyv a Lotus Notes R5 lényegéről, az adataink válogatásáról, rendezgetéséről, új nyilvántartások készítéséről és a Webről szól Bemutatja, hogy előképzettség nélkül hogyan tudunk percek alatt eredményt elérni. A “számítógépesek” hajlamosak a
géppel kapcsolatos dolgokat misztifikálni. Jelen könyv éppen azért készült, hogy egy eddig csak szövegszerkesztőt használt felhasználó számára bebizonyítsa, hogy mindenki képes a saját munkáját megszervezni, áttekinthetően nyilvántartani. Nemrégen jelent meg a Notes kezeléséről szóló Lotus Notes 4.5 című könyv Séra Tamás tollából (billentyűzetéből). Abban kezelési ismereteket kapott az olvasó: levelezés és naptárhasználat, egyszerű adatfelvitel, menürendszer. A most elkészült új könyv már nem a meglévő adatbázisok kezelésével és az egyszerű adatbevitellel foglalkozik, hanem ezeken túllép. Már használunk Lotust! Sokan használnak mindennapi munkájukban adatbázisokat. Nekik megmutatjuk, hogy a vállalati adatokból hogyan gyűjthetünk ki egy-egy részhalmazt. Hogyan lehet egy ügyfél listából leválogatott körről újabb adatokat rögzíteni, új formában megjeleníteni, nekik körlevelet küldeni. A legtöbb cégnél
külső partner fejleszti az alkalmazásokat. Ahhoz, hogy optimális rendszert rendeljenek meg, a cég saját alkalmazottainak is ismerni kell a Notes lehetőségeit, és meg kell érteniük a fejlesztők szavait. Nem bonyolult? A gyakorlati munka egy CD nyilvántartás előállításával kezdődik. A második próbálkozás egy ügyfélkezelő alkalmazás lesz, amelyben követhetjük az ügyfelek adatait, és a velük kapcsolatos összes eseményt (telefon, találkozó, levél, szerződés, stb.) A két alkalmazás elkészítéséhez a könyv segítségével kb 2 - 8 órára van szükség. Aki rá tud szánni két napot arra, hogy pótolhatatlan ismereteket szerezzen, és otthonosan mozogjon a Lotus Notes világában, annak mindenképpen megéri ezzel a könyvvel elhúzódva tanulni egy kicsit 6 BEVEZETÉS Nem akarunk új alkalmazást ! Azoknál a cégeknél, ahol nem tervezik új alkalmazás bevezetését, ott lényeges kérdés, hogy a meglévő levelezés és egyéb
adatbázisok adataiból a legtöbb információt lehessen hasznosítani. A negyedik fejezetben olyan egyközöket ismerhetünk meg, amely a mindennapi levelező, adatrögzítő munkában is hasznos lehet. Összezárható szakaszok, mutatók más dokumentumokra, fejléc és lábléc, Webes hivatkozások, táblázatok kezelése: ezek mind a Lotus Notes szövegszerkesztőjének olyan tulajdonságai, melyet mindenkinek érdemes tudnia. Nincs Lotus Notes szoftverem ! A könyv tartalmaz egy teljes Lotus Notes fejlesztő környezetet tartalmazó CD-t a tanulás céljára. A szoftver automatikusan felmásolódik a C: lemezre, és azonnal el lehet kezdeni a munkát. Akinek esetleg elveszik a CD lemeze, és Notes szerverre, vagy egyéb Notes verziókra lenne szüksége, keresse meg a Lotus Magyarországi Képviseletét (http://www.lotushu), ahonnan újabb másolatot kaphat postán. A Webhez mi köze van a Lotusnak ? Az ötödik fejezetben egy honlapot készítünk Lotus Notes segítségével.
Megismerjük azokat az eszközöket, amelyek a Lotus Notes fejlesztőket és felhasználókat Web fejlesztőkké és Web tartalom szerkesztővé teszi Megtapasztalhatjuk, hogy az összes felépített Notes adatbázis automatikusan megjeleníthető Web böngészővel is, külön energia befektetése nélkül. Tényleg csak ennyi? A záró fejezetekben a programozási háttérről és az üzemeltetési környezetről olvashatunk. Bevezetést kapunk a Notes formulanyelv és a Lotus Script programozási eszköztárába Külön fejezet foglalkozik a rendszeradminisztráció alapjaival Ezen fejezetek ízelítőt adnak a technikai háttérről, és a továbblépés irányairól. Remélem Önök is olyan örömmel forgatják majd Séra Tamás és Sudár András munkáját, és ugyanolyan hasznosnak fogják találni, mint jómagam. Zsigmond Olivér Lotus Magyarország 7 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS 1. Első lépések: CD nyilvántartás 1.1 Üres adatbázis létrehozása A
fejezetben az alapfogalmak tisztázása után egy egyszerű Notes alkalmazást fogunk létrehozni, ezen keresztül megmutatva, hogy a nulláról elindulva milyen gyorsan lehet a Notes lehetőségeit bemutató adatbázishoz jutni. 1.11 Előkészületek Mivel egy új adatbázis fejlesztéséről lesz szó, így szükséges, hogy a gépünkön telepítve (és elindítva) legyen egy Lotus Domino Designer (és ezzel együtt egy Lotus Notes) kliens. Milyen kliens van a gépünkön? Ha a munkahelyi gépünkön az 5-ös Notes van telepítve, annak típusát legegyszerűbben úgy állapíthatjuk meg, hogy a bal oldali könyvjelzőikonok felett megtalálható-e a Designer ikonja. Ha igen, akkor fejlesztői kliensünk van, egyébként pedig szükségünk lesz a Designer telepítésére. Lehetőleg egy olyan számítógépre telepítsük a fejlesztő kliensünket, ahonnan nagyobb kárt nem okozhatunk a céges rendszerünkben. Hogyan szerezzünk telepítőkészletet? A telepítőkészlet
mellékletként megtalálható a könyvben, az elkészülő adatbázisok sablonjai és a szükséges ikonok a http://www.aloha2000hu honlapról tölthetők le !" GYAKORLAT R4 FELHASZNÁLÓKNAK !" !" A bal oldali Adatbázisok (Databases) feliratú könyvjelzőt nyissuk ki, majd válas??szuk a legfelső, Munkaterület (Workspace) feliratú ikont. Így egy külön ablakban megjeleníthetjük azt a munkaterületet, amely a Notes 4-es verziójából már ismerős lehet számunkra. Ha azt szeretnénk, hogy a Notes elindításakor ez a munkaterület jelenjen meg az eredeti kezdőlap helyett, akkor a könyvjelzőn belül kattintsunk az egér jobb gombjával a Munkaterület feliratra, majd válasszuk a Könyvjelző beállítása kezdőlapként (Set Bookmark as Home Page) menüpontot. 1.12 Alapfogalmak Lotus Notes alkalmazás Notes környezetben a végfelhasználók az információkat egy Notes alkalmazáson keresztül érik el. A Lotus Notes 5-ös verziója alaphelyzetben
egy konfigurálható kezdőlappal indul Készíthető olyan kezdőképernyő, amely a cégen belüli összes alkalmazást tartalmazza, így a felhasználó egyből a megadott alkalmazáshoz juthat. Egy alkalmazás egy, vagy több adatbázisból is állhat. 8 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS Tipikus Notes alkalmazások: !" Vita alkalmazások (Discussion): Tipikus információmegosztó alkalmazás; a csoportos kommunikációt támogatja azzal, hogy a felvetett témába hely- illetve időkorlát nélkül bárki beleszólhat. Az ötletek és a válaszok pedig hierarchikusan jeleníthetők meg !" !" !" Projektkövetés A feladatok, felelősök, határidők, tevékenységek és ezek összefüggései nyomon követhetők ezzel az alkalmazással. Iktatás A beérkező iratok automatikusan felelőst, határidőt kaphatnak, mindig tudni lehet, hogy egy adott irat éppen kinél található és hol lesz legközelebb. Tudásbázis (Knowledge Base) A cég bizonyos
problémákra adott megoldásait tárolhatja egy adatbázisban, ahonnan a visszakeresés gyors lehet. !" Munkafolyamat alkalmazások (Workflow) Egyes dokumentumok valamilyen szisztéma szerint továbbíthatók a szervezeten belüli egyéb személyhez. Példa erre egy anyagigénylő alkalmazás, ahol az elfogadás összeghatáronként más-más személyhez tartozik. !" Összetett alkalmazáscsoport Az előbb említett alkalmazáselemeknek a fejlesztési feladatnak megfelelő kombinációjával összetett alkalmazások készíthetők. Ilyen például egy teljes ügyfélszolgálati rendszer, vagy egy ISO minősítés megszerzését és teljes dokumentációját karbantartó rendszer (pl. ISO Achiever Plus) Lotus Notes adatbázis A Notes adatbázisok egy-egy ikonként jelennek meg a munkaterületen (és a könyvjelzők között), az ikonokat a Fájl/Adatbázis/Megnyitás (File/Database/Open) menüpont vagy a Ctrl+O billentyűkombinációval vehetjük fel a
munkaterületünkre. Az adatbázisfájlok kiterjesztése .NSF, azaz Notes Storage Facility (Notes tárolóeszköz), alaphelyzetben csak az ilyen fájlok jelennek meg a fenti ablakban. Az adatbázis dokumentumok formájában tárolja az információkat. Űrlap Az űrlap az egyik alapvető tervezési elem a Notesban, ez a dokumentum sablonja, amely a struktúrát biztosítja az adatok beviteléhez. Miután az adatokat a felhasználó beírja az űrlapra, azok dokumentumként tárolódnak az adatbázisban. 9 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS Mező A mező az űrlapnak azon része, amely az információ egységét tárolja. Minden mező valamilyen típusú adatot fogad el, az egyes mezők kitöltése lehet automatikus is. Dokumentum A dokumentumot az űrlap kitöltésével hozhatjuk létre. Az információ itt tárolódik Nézet A nézetek használatával juthat hozzá a felhasználó a dokumentumokhoz, továbbá itt láthatók a dokumentumok bizonyos mezőinek tartalma is. A
nézetek tartalmazhatják az adatbázis összes dokumentumát, vagy annak egy részhalmazát is. A további tervezési elemeket később a gyakorlatban fogjuk megismerni. 1.13 Új alkalmazás létrehozása Az adatbázisok tényleges elkészítése egy új Notes alkalmazás létrehozási folyamatában csak egy részfolyamat. Az alkalmazás sikere a pontos problémaazonosításon, a rendszerterv készítésén, az alapos tesztelésen és a sikeres bevezetésen legalább annyira múlik, mint egy szép adatbázis létrehozásán. 10 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS I. Megoldás keresése a problémákra !" !" Azonosítsuk a problémát! A Notes alkalmazás sikere nagyban múlik a problémák, üzleti igények pontos azonosításán. Ezek módja általában a már használt rendszerek, papíralapú űrlapok, munkafolyamatok megismerése folyamatosan konzultálva a leendő felhasználókkal. Minél több szemszögből látjuk a problémát, annál pontosabb
megoldást tudunk nyújtani. Az itt befektetett munkát a felhasználó/megrendelő sokszor nem igényli, pedig ez a siker kulcsa. Figyelemmel kell lenni arra is, hogy a Notes nem képes minden problémára megoldással szolgálni, viszont amire képes, azt más szoftver nem tudja ilyen hatékonysággal nyújtani! Rendszerterv készítése Tervezzük meg az adatbázist vázlatosan papíron! A rendszerterv elkészítésénél az alábbiakat kell alaposan körbejárni: !" !" !" !" II. Adatbázis létrehozása !" !" !" !" !" III. Hozzuk létre az NSF fájlt! Hozzuk létre az űrlapokat az egyes mezőkkel! Készítsünk nézeteket! Tervezzük meg az elérési jogosultságokat adatbázis és űrlap szintjén! Csinosítsuk adatbázisunkat! Tesztelés !" !" IV. Mik az elvárások a rendszerrel kapcsolatban? Milyen nyomtatási képekkel szeretnének a felhasználók találkozni? Milyen ellenőrizendő összefüggések vannak az
egyes adatok között? Mik az egymás után végrehajtandó lépések szabályai? Másoljuk adatbázisunkat a szerverre és adjunk jogosultságot a tesztfelhasználók számára! Az eredmények, visszajelzések alapján módosítsuk az adatbázisunkat! Kiterjesztés !" !" !" Dokumentáljuk az adatbázist segítségül a felhasználáshoz és a további fejlesztéshez! Az alkalmazás összes felhasználójának adjuk jogosultságot, és értesítsük őket az adatbázis(ok) létezéséről! Szükség esetén külön felhasználói oktatást is tartsunk! A továbbiakban az adatbázis létrehozatalára tesszük a hangsúlyt. 11 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS 1.14 Új adatbázis létrehozása Egy adatbázist az alábbi módokon hozhatunk létre: !" létező adatbázist másolunk át !" adatbázissablon (template) segítségével !" új, üres adatbázisból indulunk ki Létező adatbázis másolása A munkaterületen jelöljük ki egy
létező adatbázis ikonját, majd a Fájl/Adatbázis/Új másolat (File/Database/New Copy) menüpontra megjelenő dialógusablakban töltsük ki a megfelelő adatokat: szerver neve, adatbázis címe és fájlnév. Az így létrejövő új adatbázisnak semmi hatása nem lesz a régi adatbázisra, viszont ugyanolyan felépítésű lesz és akár még a dokumentumokat is tartalmazhatja. 1.1 ábra Új másolat ablak Új adatbázis sablonból A sablonok felhasználásával egyszerűen hozhatók létre üzleti igényeket kielégítő adatbázisok, amelyeket kisebb változtatásokkal testre is szabhatunk. Az adatbázissablon nem tartalmaz dokumentumokat, hanem csak a tervezési elemek, vagyis az űrlapok, nézetek, stb. vannak benne A sablonok fájlkiterjesztése NTF, azaz Notes Template Facility (Notes sabloneszköz), a Notes telepítésekor a rendszersablonok és néhány alapvető adatbázissablont is kapunk. A legfontosabbak a következők (néhány 4-es verziójú sablon is van a
listában): !" !" !" !" Dokumentum-könyvtár/Doc Library Notes és web (R5) (doclbw50.ntf) Microsoft Office könyvtár (R5) (doclbm50.ntf) Lotus SmartSuite könyvtár (R4) (doclibl4.ntf) Erőforrás-foglalás/Resources (R4.5) (resrc45ntf) 12 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS !" !" !" Jóváhagyási ciklus/Approval Cycle (R4) (approve4.ntf) Személyes napló/Personal Journal (R4) (journal4.ntf) Vita/Discussion - Notes és web (R5) (discsw50.ntf) A sablonokról további információ az Új adatbázis ablakban olvasható. Mielőtt egy új adatbázist létrehoznánk üres állapotból, először a könyv ezen fejezetében használt példaadatbázisról szólunk egy pár szót. Mit is takar a példánk? A probléma, vagyis az „üzleti igény” teljesen mindennapi: akinek sok CD-je van, az egy bizonyos szám fölött már nem tudja naprakészen megmondani, hogy !" egy adott CD megvan-e a gyűjteményben, !" vagy pontosan hol
található egy adott CD. Szükség van tehát egy CD nyilvántartásra, amely alapján naprakészen válaszolhatunk a fenti kérdésekre. Új adatbázis létrehozása üres állapotból Új adatbázis létrehozását a Designerből Új adatbázis létrehozása (Create a New Database) ponttal, vagy a kliensből a Fájl/Adatbázis/Új (File/Database/New) menüponttal vagy a Ctrl+N billentyűkombinációval tehetjük meg. 1.2 ábra Új adatbázis ablak Új adatbázis létrehozásakor a következőket kell kitöltenünk: 13 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS Szerver (Server): A szerver nevét kell megadnunk. Új fejlesztés esetén használjuk a Helyi (Local) beállítást, így a saját gépen hozzuk létre az új adatbázist, azaz mások nem érhetik el a még félkész adatbázist. Majd csak kész állapotban másoljuk vagy replikáljuk át az adatbázist a szerverre. Cím (Title): Itt adhatjuk meg az adatbázisnak a munkalapon lévő ikonon szereplő megnevezését. A
megnevezés legyen tömör és egyszerűen megjegyezhető, szóközökkel együtt 32 karakteres lehet ez a név. Fájlnév (File Name): Automatikusan generálódik a cím beírásakor nsf kiterjesztéssel. Ügyeljünk arra, hogy a fájlnévnek követnie kell a számítógép operációs rendszerének konvencióit (pl. 8+3 karakter) Szerveren, illetve a helyi gépen is az itt beírt fájlnév a telepítéskor megadott adatkönyvtár (data directory) útvonalához relatíven értendő, azaz példánkban a CDnyilv.nsf beállítással a fájl a c:lotus otes5wmdataCDnyilv.nsf helyen található meg a könyvtárstruktúrában Az ablak alsó fele szolgál a sablon beállítására. Új adatbázis esetén az -Üres- (Blank) címke legyen kiválasztva. !" GYAKORLAT !" !" !" !" Válasszuk a Fájl/Adatbázis/Új menüpontot Kitöltendő mezők: !" Szerver: Helyi !" Cím: CD nyilvántartás !" Fájlnév: CDnyilv.nsf A sablonok listája maradjon az
-Üres- beállításon Nyomjuk meg az OK gombot Az OK gomb megnyomására létrejön az új adatbázis, majd utána meg is nyílik az űrlapok tervezési elemnél. Kattintsunk a legfelső könyvjelzőre (Legutóbb megnyitott adatbázisok, Recent Databases), ekkor láthatók az egyes tervezési elemek. Ha a Notes kliensből hoztuk létre az adatbázist, akkor lépjünk vissza a munkaterületre, ahol az új adatbázis ikonjára jobb gombbal rákattintva a Megnyitás Designerben (Open in Designer) menüpontot válasszuk ki, hogy ugyanide jussunk. 14 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS 1.3 ábra Teljes képernyőkép a tervező panellel együtt A tervező panelen a kibontás után az alábbi tervezési elemeket láthatjuk: !" !" !" !" !" !" !" !" !" Szerkezetek (Outlines) Keretkészletek (Framesets) Lapok (Pages) Űrlapok (Forms) Nézetek (Views) Gyűjtők (Folders) Navigátorok (Navigators) Ügynökök (Agents) Erőforrások
(Resources) Az erőforrások között találhatjuk meg a részűrlapokat, osztott mezőket, parancsfájl-könyvtárakat, képeket, stb. Az elemtípusokon végighaladva láthatjuk, hogy egy üres adatbázisban mindössze egy (névtelen)-nek (untitled) nevezett nézetet láthatunk. Az adatbázisban először egy űrlapot hozunk létre. 15 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS 1.2 Űrlapok 1.21 Új űrlap létrehozásának folyamata 1. 2. 3. 4. 5. 6. A felhasználókkal egyeztetve tervezzük meg az űrlap általános kinézetét. Hozzunk létre egy új űrlapot. Hozzuk létre azokat a szövegeket, amelyek a mezőket jelölik meg, illetve útmutatást adnak. Hozzuk létre a mezőket, ezek tárolják majd az adatokat. Mentsük el az űrlapot. A tesztelés után a felhasználói igényeknek megfelelően módosítsuk az űrlapot. Példánkban a felhasználóval egyeztetve az alábbi nyilvántartó lapot tartjuk szükségesnek és elégségesnek ahhoz, hogy a CD-k körüli káosz
otthonunkban végre megfelelő szervezéssel elháruljon. Statikus szöveg Kép Mezők 1.4 ábra Kitöltött CD űrlap Az adatbázisunkban így egyetlen űrlapot fogunk használni, a fenti illusztráción bekarikáztuk azokat az elemeket (statikus szöveg, mezők, kép), amelyeket majd külön fogunk létrehozni. 16 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS 1.22 Új űrlap létrehozása Háromféle módon hozhatunk létre új űrlapot: !" Kattintsunk a Létrehozás/Tervezés/Űrlap (Create/Design/Form) menüpontra !" az !" vagy az (New Form) gombra, ikonra kattintva Ekkor egy üres űrlap és három képernyőpanel jelenik meg. 1.23 A Lotus Domino Designer felület használata Az új űrlap létrehozatala esetén láthatjuk a Designer felületét: 1.5 ábra Képernyőkép az űrlaptervezés négy paneléről Alaphelyzetben három panel jelenik meg. A felső részen (építő panel) hozhatjuk létre az űrlapunk elemeit, míg az alsó részen (tervező
panel) az űrlaphoz és műveletekhez tartozó eseményeket és tulajdonságokat írhatjuk le. Az alsó panel két részből áll: a bal oldali panelben az objektumok, míg a jobb oldalon a hozzájuk tartozó kód látható. A jobb oldalon látható (egyenlőre üres) kód a bal oldali objektumhoz tartozik. Más objektumhoz más kód tartozhat majd. Az egyszerű képletet, formulát (@függvény, @parancs), LotusScript, Java, illetve JavaScript programot a kód részbe kell beírni a 17 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS megfelelő típus (Futtatás utáni mező, Run) kiválasztásával. A képletbeírást könnyíti meg a bal oldali panel Hivatkozás (Reference) része. Innen az adatbázis mezőneveit, illetve a megfelelő nyelvi elemeket hozhatjuk elő. Az egyes programnyelveket vázlatosan leíró 5 fejezetben az adott Hivatkozásokat részletesebben taglaljuk. A két panelt elválasztó vízszintes vonalat egérrel megfogva mozgathatjuk, szükség szerint növelve, ill.
csökkentve a panelek méretét Az építő panel jobb oldalát elmozdítva bukkan elő a negyedik, műveletek panel, ahol alaphelyzetben néhány művelet található meg. 1.24 Szövegek elhelyezése A továbbiakban az építő panelben hozzuk létre a megtervezett nyilvántartó lapot, azon belül először a statikus szövegeket. Statikus (nem változó) szöveget a mezők címkézésére használhatjuk, hogy a felhasználók az egyes mezők rendeltetését megértsék. Ezek a szövegek lehetőleg rövidek és kifejezőek legyenek, továbbá olyan attribútumok állíthatók be, mint a szín, méret és betűtípus. A továbbiakban helyezzük el a statikus szövegeket, majd később a képe(ke)t! 1.6 ábra Képernyőkép a statikus szövegeket tartalmazó félkész űrlapról A szövegek beírása után formázzuk meg azokat a Notes szövegszerkesztőjéből már ismert Tulajdonságok ablak segítségével. Előhívása: !" Szöveg/Szövegtulajdonságok (Text/Text
Properties) menüpont, !" vagy ikon 18 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS 1.7 ábra A Tulajdonság ablak első és második füle Az első fülre kattintva a betűtulajdonságok, a második fülön a bekezdéssel kapcsolatos tulajdonságok láthatók. Néhány jellemzőt az ikonsorból, ill a bal alsó sarokban található betűtípus, illetve -méret ikonokkal is egyszerűen beállíthatunk 1.8 ábra Részlet az ikonsorból, és az állapotsorból Hogyan nézzen ki egy Notes űrlap? Irányelvek a mezők elhelyezésére: !" A legfontosabb elemeket a űrlap felső részére tegyük. !" Logikailag összetartozó mezőket együtt helyezzük el. Betűk tulajdonságai: !" Az egyes betűtípusok nagymértékben meghatározzák az olvashatóságot. A Helv (ez az alap betűtípus) elsősorban a képernyőn olvasható jól, míg a Times New Roman és az Arial a papíron mutat jól. !" Kétféle karaktertípusnál többet ne használjunk. 19 1.
ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS Szövegek színei: !" Ha különbözők a szövegek és a mezők színei, az sokat segít az űrlap megértésében. !" Nagyon kirívó színeket ne használjunk. !" A színekből se használjunk túl sokfélét. !" GYAKORLAT A CD nyilvántartó űrlapra a következő statikus szövegeket helyezzük el: !" !" !" !" !" !" !" !" CD nyilvántartás Előadó: Cím: CD-k száma: Stílus: Minőség: Kinél van: Részletek: A következő színeket és karaktertípusokat használjuk: !" !" !" A címsor (CD nyilvántartás) legyen középen, betűtípus: Arial félkövér, -méret: 14 A többi szöveg legyen balra rendezve, betűtípus: Arial, -méret: 12 Az Előadó és Cím alatt egy üres sor maradjon ki, továbbá a Kinél van fölött és alatt is legyen egy-egy üres sor. (Ezzel jól elkülönülnek a logikai egységek) 1.25 Kép beillesztése Díszítő jellegű
képeket és grafikákat (akár forgó GIF-et) is bárhova elhelyezhetünk az űrlapon. A képek a beillesztés után a képtulajdonságok előhívásával újraméretezhetők Az űrlapra beillesztett kép a dokumentumok mindegyikén megjelenik. Fontos! Az űrlap és az űrlappal – a felhasználó által – elkészített dokumentum külön tárolódik el. Így lehetséges az, hogy az űrlapra beillesztett kép minden dokumentum megnyitásakor megjelenik, viszont a tárolókapacitást csak egyszer foglalja. Kétféleképpen illeszthetünk be képet a Notes űrlapjára: !" a vágólap/clipboard segítségével 1. Menjünk át egy grafikai programba, például a Paint-be, és hozzunk létre a képet. 20 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS 2. Jelöljük ki a képet (Szerkesztés/Mindet kijelöli, Edit/Select All), majd másoljuk fel a vágólapra: Szerkesztés/Másolás (Edit/Copy) 3. A Notesban álljunk a megfelelő helyre (címsor alatti sor), majd
Szerkesztés/Beillesztés (Edit/Paste, Ctrl+V) !" grafikus elemek importjával A Létrehozás/Kép (Create/Picture) segítségével importálhatunk egy képet az űrlap tetszőleges helyére. A megfelelő képet grafikus fájl formátumában kell a fájlrendszerből kiválasztanunk. Ebben az esetben például az animált GIF mozgása is megjelenik, valamint a kép lehet 64K vagy 16M színmélységű is. !" GYAKORLAT !" !" Hozzunk létre egy CD-t ábrázoló képet a Paintben 32x32 képkockás méretben (Alakzat/Tulajdonságok (Image/Attributes) menüponttal beállíthatóan). Az első módszernek megfelelően a vágólap segítségével illesszük be az űrlapra a címsor alá. 1.26 Az űrlap mentése Űrlapunkat a !" Fájl/Mentés (File/Save) menüparanccsal, !" !" ikonnal menthetjük el. vagy a (Ugyanezt érhetjük el az ESC gomb megnyomásával is.) Az első elmentéskor megjelenő párbeszédablakban az űrlap nevét kell megadnunk. Az
űrlap neve kis- és nagybetűérzékeny, továbbá szóközt is tartalmazhat. Mindezek mellett lehetőleg rövid és kifejező nevet válasszunk. !" GYAKORLAT !" Mentsük el az űrlapot kilépéssel együtt (az ESC billentyűvel) !" Adjuk a “CD” nevet az űrlapnak. !" Nyomjuk meg az OK gombot. Az OK gomb megnyomására a tervelemek között az elmentett új űrlap is szerepel. Sőt, a Létrehozás/CD (Create/CD) menü aktiválására már megjelenik az űrlap, így létrehozhatunk olyan dokumentumot is, amely erre az űrlapon alapul. (Csak adatot nem tudunk beírni a dokumentumba, mivel még nincsenek mezők az űrlapon) Az űrlap újbóli szerkesztéséhez a Tervek közti CD névre kell kettőt kattintanunk, vagy az ablaklistában visszakapcsolni a “CD-űrlap” feliratú ablakba. 21 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS 1.9 ábra Ablakok elnevezései Ezzel újra megnyithatjuk a szerkesztett űrlapot, majd a Tulajdonság ablak előhívása után az
ablak címsorában található listából az űrlapra vonatkozó tulajdonságokat hozzuk elő. 1.10 ábra Az űrlap Tulajdonság ablaka A fenti ablakban az űrlap neveként beírhatjuk a “CD” feliratot. Az a név, amit itt megadunk, szerepel a Létrehozás menüben, sőt az űrlappal létrehozott dokumentumokon egy belső mezőként (Form=”CD”) is megjelenik. Az űrlap nevéhez szinonimát is rendelhetünk, azaz kettéválaszthatjuk az előbbi két funkciót a | (függőleges vonal) segítségével. !" GYAKORLAT !" Az űrlaptulajdonságok ablakába írjuk az alábbit az űrlap nevéhez: CD űrlap | CD Ezzel a Létrehozás menüben a „CD űrlap” név szerepel, míg az űrlap belső neve a „CD” marad. Ezzel a másodlagos név funkcióval a felhasználó kívánságainak megfelelően 22 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS változtathatjuk meg az űrlap nevét úgy, hogy közben a dokumentumokat nem kell megváltoztatnunk. Ezt használhatjuk ki egy
adatbázis idegen nyelvre való fordításánál is 1.27 Mezők létrehozása A mezők létrehozása előtt zárjuk be a Tulajdonság ablakot, ha nyitva van. Kiindulópontként tehát a szerkesztett űrlapot láthatjuk a mezőket magyarázó statikus szövegekkel Az új mező létrehozásához az űrlapon a megfelelő helyen: !" Válasszuk a Létrehozás/Mező (Create/Field) menüpontot, vagy !" kattintsunk a ikonra. !" GYAKORLAT 1. Helyezzük a kurzort az űrlapon oda, ahová a mezőt szeretnénk elhelyezni. Példánkban az “Előadó:” statikus szöveg után üssünk egy tabulátor karaktert, ez lesz a mező helye. 2. ikonra katVálasszuk a Létrehozás/Mező (Create/Field) menüpontot, vagy a tintsunk. Ekkor megjelenik az űrlapunkon egy új mező Névtelen névvel, és megnyílik a mezőre vonatkozó Tulajdonság ablak. 1.11 ábra A Tulajdonság ablak új mező esetén 3. Ezután kell a mező megfelelő paramétereit beállítanunk. A mező nevére
vonatkozó korlátozások: 23 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS !" Egy űrlapon belül a mező nevének egyedinek kell lennie. !" Hosszát tekintve maximálisan 32 karaktert tartalmazhat, viszont lehetőleg használjunk rövid és kifejező mezőneveket. !" Nem kezdődhet számmal, dollár ($) és kukac (@) karakterrel. Szóközt nem, ékezeteket viszont tartalmazhat. !" Néhány mezőnév már valamilyen jelentéssel bír, tehát ezeket csak a Notes konvenciókat figyelembe véve használjuk. A foglalt mezőnevek: Form, SendTo, CopyTo, Sign, EncryptSaveOptions, MailFormat, DeliveryPriority, Categories Példánkban azt a konvenciót követjük, hogy a mezőnevek első betűje nagybetű, a többi kisbetű és ékezetet tartalmazhatnak. #" Tipp Professzionális programozók nem használhatnak ékezeteket a mezőnevekben, mivel a LotusScript programozási nyelv nem tudja azokat értelmezni. Angol nyelvű kliensen is célszerű ékezet nélküli
mezőneveket használni az “ő” és “ű” betűk megjelenítése és értelmezése miatt. Egy mező típusai lehetnek: !" !" !" !" !" !" !" !" Szöveg (Text) Szám (Number) Dátum/idő (Date/Time) Kulcsszó típus-csoport: !" Párbeszédpanel-lista (Dialog List) !" Jelölőnégyzet (CheckBox) !" Választógomb (Radio Button) !" Lista (ListBox) !" Kombinált lista (ComboBox) Rich Text Szerzők (Authors) Nevek (Names) Olvasók (Readers) Mostani példánkban a szöveg, szám, kulcsszó, illetve a Rich Text típusú mező fordul elő, azokat részletezzük. További típusok a 2 fejezetben található példában fordulnak elő Szöveg típus 24 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS A szöveg betűket, számokat, írásjeleket, szóközöket tartalmazhat. Lényege, hogy semmilyen matematikai műveletet nem akarunk végezni az ilyen típusú mezővel. !" GYAKORLAT !" !" Nevezzük el az
első mezőnket úgy, hogy a Tulajdonság ablak Név mezőjébe beírjuk az Előadó szót. A példánkban található Előadó és Cím mező szöveg típusú mezők, ezért az Előadó mező típusára a szöveg-et állítsuk be. Amikor a kurzorral az űrlap más pontjára kattintunk, a mező beállított tulajdonságai elmentődnek. Láthatjuk, hogy a mező neve már az űrlapra is átvezetődik. 1.12 ábra Mezők elnevezése !" Hasonlóképpen hozzuk létre a Cím mezőt is, szintén szöveg típussal a Cím: elnevezés után két tabulátorral elválasztva (az Előadó mező alatt helyezkedjen el az új mező). Szám típus A szám típusú mező olyan adatokat tartalmaz, amelyeket a későbbiekben valamilyen formában fel szeretnénk dolgozni, például összegezni. Ide a számjegyeken kívül a plusz és mínusz karaktereket (pl. +14 és -46), a tizedesvesszőt/pontot (operációs rendszer beállítástól függően), továbbá a tudományos/normálalakú formátumot
(pl. 4E+06) írhatunk be. A szám típuson belül számformátumokat is választhatunk a második fülnél: Decimális (Decimal), Százalék (Percent), Tudományos (Scientific), illetve Pénznem (Currency). Ezekről bővebben a Súgóban olvashatunk. 25 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS 1.13 ábra Számformátumok beállítási lehetőségei !" GYAKORLAT !" A példabeli CD-k száma: felirat után (a tabulátort most se felejtsük el!) hozzunk létre egy Cdszám mezőt, amely szám típusú. Ezt a mezőt azért számként definiáljuk, hogy szükség esetén majd összegezhessük is a CD állományunkat. Kulcsszó mezőtípus-csoport A 4-es Notesban a következő típusok a kulcsszó (keyword) típus altípusai voltak, az 5-ös verzióban pedig külön típusként szerepelnek. Ezeknek a mezőknek a közös tulajdonsága, hogy egy szöveges listát adunk meg, amiből a felhasználó választhatja ki a számára megfelelő kifejezéseket. Fejlesztőként
egyrészt a megjelenési formát választhatjuk meg (ez az egyes típusok közti eltérés), másrészt azt, hogy mik szerepeljenek a listában. 26 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS 1.14 ábra A Tulajdonságablak Alapok című lapja a Stílus nevű mezőnél 1.15 ábra A Tulajdonság ablak második lapja Bármely kulcsszótípusról van is szó, a Tulajdonság ablak második lapján, a Kiválasztás mezőben adhatjuk meg a listában szereplő elemeket. Példánkban a „Választható elemek beírása (soronként egy)” (Enter choices (one per line)) esetén az alatta lévő téglalapba kell beírnunk a listába kerülő szavakat. Másik, gyakran használt választási lehetőség a „Kiválasztás képlet alapján” (Use formula for choices), így a listát egy függvénnyel képezhetjük. A kulcsszómezők megjelenési formáit a mezőtípus adja meg; az alábbi megjelenési formák láthatók az űrlapon: !" Párbeszédpanel-lista (Dialog list) 27 1. ELSŐ
LÉPÉSEK: CD NYILVÁNTARTÁS 1.16 ábra A Stílus nevű mező megjelenési formája a felhasználó felé Itt a fenti listából választhat a felhasználó. A Tulajdonság ablak második fülére kattintva további lehetőség is adódik: !" A listán nem szereplő értékek engedélyezése (Allow values not in list) Ezzel új elemet is felvehet a felhasználó, és nem kell kötelezően a megadott listából választania. (Az új elem helye látható a fenti ábrán is az “Új kulcsszó” alatt.) Vigyázzunk arra, hogy nem megfelelő tervezés és használat esetén előfordulhat, hogy ennek a paraméternek az engedélyezésével elveszhet egy mező kulcsszó mivolta, mivel mindenki új kifejezéseket ír be. Jó kulcsszavak esetén csak ritkán kell új kulcsszót beírni. A Tulajdonság ablak első fülén pedig egy másik fontos lehetőség: !" Több érték engedélyezése (Allow multiple values) Ezzel a kapcsolóval a lehetőségek közül többet is választhat
a felhasználó. Kiválasztás után a mező tartalma az egyes kulcsszavak listája lesz vesszővel elválasztva. (Figyelem: Az egyes kulcsszavak között nem lehetnek vesszőt tartalmazó elemek, ugyanis a Notes az értelmezés után a két vessző közötti kifejezéseket külön elemként veszi!) !" Jelölőnégyzet (Checkbox) 28 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS Itt már az űrlapon megjelenítve láthatjuk az összes kiválasztható kulcsszót, viszont a lehetőségek közül a felhasználó többet is választhat. !" Választógomb (Radio button) Itt is az űrlapon megjelenítve láthatjuk az összes kiválasztható kulcsszót. A lehetőségek közül csak egy választható. Kulcsszó mező esetén is hozhatunk létre szinonimákat (lásd űrlap elnevezése); a cél itt is a könnyű változtathatóság. Belső hivatkozásnál mindig a szinonimát kell használni, a mezőn pedig az első változat jelenik meg. Például: Egy angol fordításnál Igen Nem
esetén Yes | Igen No | Nem esetén az összes mezőhivatkozás változatlan maradhat. !" GYAKORLAT Készítsük el példabeli kulcsszó mezőinket! !" !" !" A Stílus: szöveg és egy tabulátor után a Stílus mezőt hozzuk létre. Legyen ez párbeszédpanel-lista, kezdeti értékei legyenek: klasszikus, pop, rock A listán nem szereplő értékek engedélyezésével tegyük bővíthetővé a listát. A Minőség: után hozzuk létre a Minőség nevű választógombot, alapértékek: AAD, ADD és DDD. A második fülön a megjelenítése legyen szegély nélküli, 3 oszlopos Így egy sorba kerülhet mindhárom érték. A Kinél van: felirat és egy tabulátor után hozzuk létre a Kinél mezőt, amelyet szöveg típusúra definiáljunk. Később, ha már kialakult az a kör, akinek továbbadjuk a CDinket, akkor ezt is kulcsszóvá változtathatjuk Rich Text Általánosan elterjedt szokás, hogy minden űrlap alsó részén található egy ilyen típusú
mező. Rich Text mezőket olyan szövegek tárolására használhatjuk, melyeknek betűtípusát és színét meg akarjuk változtatni, és/vagy félkövér, dőlt vagy aláhúzott stílusban akarjuk 29 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS megjeleníteni. Ide helyezhet el a felhasználó képeket, grafikákat, forrópontokat, csatolásokat és beágyazott objektumokat is, vagy akár kedvenc zeneszámainkat MP3 formátumban. Fontos tudni, hogy egy Rich Text típusú mező tartalmát nem jeleníthetjük meg a nézetekben. !" GYAKORLAT !" Hozzuk létre a Részletek: felirat alatti sorban a Részletek nevű mezőt, ami Rich Text típusú legyen. (Az angolok tipikus Rich Text mezőnévként a Body-t használják) Ezzel létrehoztuk az összes mezőt, amit első körben terveztünk. Az űrlapot mentsük el A programozóknak tesztelési lehetőségek is adottak: 1.17 ábra Megtekintés Notesban és böngészőkben A Tervezés/Megtekintés Notesban (Design/Preview in
Notes) menüponttal, vagy a képen látható második ikonnal az imént tervezett űrlappal létrehozható Notes dokumentumot láttathatjuk. A Tervezés/Megtekintés webböngészőben (Design/Preview in Browser) menüpontban pedig választhatunk, hogy az alapértelmezett böngészővel szeretnénk látni az űrlapot, a Notes böngészőn keresztül, vagy pedig Internet Explorerrel / Netscape Navigatorral. Az utóbbi két változatot a jobb oldali két ikon is jelképezi !" GYAKORLAT Mivel még nincs egy dokumentumunk sem, célszerű a nézetek definiálása előtt létrehozni egy párat. !" Kattintsunk a Notes megtekintés ikonjára. Ekkor a Notes kliens automatikusan elindul, és gyakorlatilag ott hozhatjuk létre a dokumentumokat. (Ugyanezt kapjuk a Létrehozás/Dokumentum/CD űrlap menüponttal, illetve Notes kliensről a Létrehozás/CD űrlap menüpont kiválasztása esetén!) !" Hozzunk létre dokumentumokat az alábbi táblázatban megadott sorrendben és
mezőértékekkel. !" Minden űrlap kitöltése után az Esc gomb megnyomásával lépjünk ki, majd mentsük el az így létrejött dokumentumokat! 30 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS Előadó Cím Lokomotív Gt. Lokomotív Gt. Carl Orff Metallica Ringasd el magad Lokomotív Gt. Carmina Burana Ride the Lightning CD-k száma 1 1 1 2 Stílus Minőség Rock Rock Klasszikus Heavy metal AAD AAD ADD DDD Kinél van Péter Gabi nálam nálam Az űrlapok kitöltése közben a felhasználó szemszögéből értékes dolgokat vehettünk észre, így hát következhet a mezők finomítása. 1.28 Mezők finomítása Alapértelmezett érték definiálása Ha létrehozunk egy dokumentumot, vagyis kitöltjük a CD űrlapot, észrevehetjük, hogy némely mezőnek kezdeti értéket kellene adni: a CD-k száma általában 1, míg a Kinél van? mező tartalma legtöbbször a “nálam”. !" GYAKORLAT A Cdszám mezőre kattintva a képernyő alsó részén található
tervezés panelen a rá vonatkozó események, tulajdonságok és azokkal kapcsolatos képletek, függvények olvashatók: 1.18 ábra A Cdszám mező a tervezés panelben Az “Alapértelmezett érték” (Default Value) nevű tulajdonságnál adhatjuk meg egy mező kezdeti értékét, a Cdszám esetén pl. az 1-et (Idézőjel nélkül kell a számokat megadni) Hasonlóan a Kinél mezőben állítsuk be kezdőértékként a “nálam”-ot. (Egy szöveges értéket idézőjelek között adható meg.) A képletmezőben nem csak állandó értékeket alkalmazhatunk hanem képleteket is. A képletek/formulák beírásában segít a Hivatkozás (Reference) fül. Ha nem látszana a második fül, akkor az elválasztó függőleges vonalat jobbra kell húzni, amíg a Hivatkozás meg nem jelenik. 31 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS Bemenetet átalakító képlet használata Előfordulhat, hogy a felhasználó az előadó nevének beírásakor a név elé véletlenül egy
szóközt is beír. Ekkor a nézetekben való kereséskor nem fogjuk megtalálni az adott személyt. Ennek elkerülésére használhatjuk a tervezés panel mezőkre vonatkozó Bemenet átalakítása (Input Translation) nevű eseményét. A bemenetet átalakító képlet módosítja a felhasználó által kitöltött mező értékét, például kijavítja a gépelési hibákat, vagy szabványosítja a formátumot. !" GYAKORLAT Az Előadó mezőben lévő adat elején és végén található felesleges szóközök eltávolításával küszöböljük ki a fent említett hibát. A Bemenet átalakítása eseményre az adott mezőnél a következő függvényt kell írnunk: @Trim(Előadó) 1.19 ábra Az Előadó mező átalakító képlete Az egyes függvényekről a Hivatkozások címke Súgó gombjára kattintva, illetve az 5. fejezetben további információ kapható. “Bemenet érvényesítése” esemény használata A bemenetet érvényesítő képlet (Input Validation) az
előre meghatározott feltételek szerint ellenőrzi a mező tartalmát, ezzel biztosítva, hogy a bejegyzés kielégít bizonyos követelményeket. Ilyen követelmény lehet az például, hogy a felhasználónak ki kell töltenie az Előadó mezőt. !" GYAKORLAT A fenti követelményt az Előadó mező “Bemenet érvényesítése” eseményére írt következő képlettel elégíthetjük ki: @If(Előadó = ""; @Failure("Kérem írja be az előadó nevét."); @Success) 32 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS A fenti függvényt úgy kell értelmezni, hogy ha az Előadó mező értéke a mentés pillanatában üres (“”), akkor a Notes egy hibaüzenetet ad vissza a megfelelő szöveggel, egyébként nem történik mentés. A képletekről bővebben az 5 fejezetben olvashat Mezők méretének és színeinek beállítása Ha egy kitöltött űrlapot megtekintünk, észrevehetjük, hogy a CD előadója és címe nem válik el jelentősen a többi
mezőtől, holott ezek a legfontosabb mezők. A mező színét és egyéb attribútumait (a statikus mezőkhöz hasonlóan) a Tulajdonság ablakban állíthatjuk feliratú fülön. be, méghozzá a negyedik, !" GYAKORLAT Az Előadó és a Cím mezőket tegyük félkövérré és válasszunk ki egy sötétzöld színt hozzá. A Minőség mező betűtípusának méretét csökkentsük 10-esre, mivel a 12 aránytalanul naggyá teszi ezt a mezőt. 1.3 Nézetek A nézetek – hasonlóan egy tartalomjegyzékhez – a dokumentumok megjelenítői, ezen keresztül találhatja meg a felhasználó a keresett információt. A nézetek tervezésénél a legfőbb szempont, hogy a keresést megkönnyítsük. A nézet sorai egy dokumentumot, vagy egy kategória nevét jelenítik meg, míg a nézet oszlopai egy-egy információt mutatnak meg a dokumentumból. Ez az információ általában egy mező tartalma, némely esetben pedig egy képlet eredménye. A következő példa egy általános
nézetet ábrázol, ahol az egyes oszlopok egy-egy mező tartalmát mutatják meg: Előadó Lokomotív Gt. Cím Ringasd el magad Cdszám 1 Stílus rock Mielőtt létrehoznánk egy nézetet, el kell döntenünk a nézet célját. Ez segít meghatározni, hogy milyen nézetre lesz szükségünk, illetve hogy milyen dokumentumokat jelenítsünk meg benne. Célszerű az alábbi főbb kérdésekre adott válaszokat végiggondolni, mielőtt egy nézetet megtervezünk: !" !" !" Megjelenítsük-e az összes dokumentumot, vagy pedig csak egy részhalmazt? Rendezést valósítsunk-e meg az egyes oszlopokban, illetve kategorizáljunk-e? Mit tartalmazzanak az egyes oszlopok? Egy nézetet az alábbi módokon hozhatunk létre: 33 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS !" !" !" új, üres nézetet hozunk létre új nézetet hozunk létre egy másik nézeten alapulva létező nézetet másolunk le 1.31 Első új nézet létrehozása (Előadó szerint)
Feladat: Olyan nézet létrehozása, amelyikben az összes CD szerepel, és könnyen kereshetünk benne előadó szerint (legyen rendezve ezen mező szerint). A nézetben az előadó neve mellett a cím, a CD-k száma, továbbá a stílus is jelenjen meg. A Nézetek (Views) pontra kattintva nézhetjük meg a már létező nézeteket. 1.20 ábra Az új adatbázis névtelen nézete Egy új adatbázisban egyetlen nézet már létezik, ez pedig a (névtelen) vagy (untitled) nevet viseli. Ennek szerkesztése helyett most egy új nézetet hozunk létre Új nézet létrehozása: !" Kattintsunk a Létrehozás/Nézet (Create/View) menüpontra, !" vagy az !" vagy a (New View) gombra ikonra. Ekkor az alábbi ablak jelenik meg: 34 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS 1.21 ábra Új nézet létrehozásának ablaka A Nézet neve felirat alatti Névtelen helyett írhatjuk be a nézetünk nevét. A nézet neve legyen kifejező, használhatunk ékezeteket, szóközöket
és számokat is. Mivel az adatbázis nézetei ABC rendben jelennek meg, ezért bevett szokás az, hogy a nézetek neve elé egy számot helyezünk a számunkra megfelelő rendezettség eléréséért. A számokkal kezdődő nézetek megelőzik a betűvel kezdődőket. A nézeteket úgy rendezzük, hogy a fontosabb nézetek legyenek felül (tehát kisebb sorszámmal). Ugyanebben az ablakban kell megadnunk, hogy a nézet milyen típusú legyen: !" Osztott (Shared) nézet (ez az alapállapot) Az osztott nézeteket mindenki láthatja, tehát ez a típus a leggyakrabban használt. Legalább tervező jog kell a létrehozásukhoz, mivel ezek az adatbázisban kerülnek tárolásra. A következő két típusvariáció egyedi, a Súgóban részletesen áttekinthető. A továbbiak: !" Saját (Private) nézet Az ilyen típusú nézetet csak egy felhasználó használhat. Ha a felhasználónak van jogosultsága az adatbázisban saját nézetet létrehozni, akkor az ilyen nézet ott
tárolódik el, így bármely gépről bejelentkezve elérheti a saját nézetét. Ha nincs joga ehhez, akkor a nézet a felhasználó gépének a desktop.dsk nevű fájljában tárolódik, ekkor csak a saját gépén tekintheti meg a nézetet. 35 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS !" Osztott, első használattól saját (Shared, private on first view) Ezek olyan mindenki által elérhető nézetek, amelyeknek a tervét az adatbázis tervezői határozzák meg, viszont az első használat után saját nézetté válnak. Olyan nézetet tervezhetünk ilyenné, mint például a Kedvencek nézet, amelybe mindenki a saját kedvenc dokumentumait helyezheti el, viszont a kinézetét központilag szabályozhatjuk. !" Megosztott, a munkaasztal saját első használatkor (Shared, desktop private on first view) Az előzőhöz hasonló típus, viszont csak a saját gépnél bejelentkezve láthatjuk. Az ablak alján található kiválasztási feltételek ablakban adhatnánk meg
azt, hogy milyen dokumentumokat szeretnénk látni a nézetben. !" GYAKORLAT !" !" Példánkban az első nézet neve legyen „1. Előadó szerint”, így ez lehet az első a nézetünk sorában. Az előadó szerinti nézetünk legyen osztott, és mivel az összes dokumentumot láttatni akarjuk itt, ezért az alsó részt hagyjuk üresen. Nyomjuk meg az OK gombot. Az OK gomb megnyomására létrehoztuk az új, osztott nézetünket, aminek neve meg is jelenik a Nézetek között. Kattintsunk duplán a nézet nevére, így szerkeszthetjük az új nézetünket. Oszlop értékének meghatározása Új nézetünkben csak egy oszlopot láthatunk, ez a # feliratot viseli és az egyes dokumentumok sorszámai láthatók 1-től 4-ig (mivel négy dokumentumot hoztunk létre). 1.22 ábra Az alapnézet négy dokumentummal Térjünk vissza az előadó szerinti nézet tervezéséhez a Designerbe. 36 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS ikonra kattintva láthatjuk a
tervezett nézetünk A bal felső sarokban található megjelenési formáját (azaz jelenleg a fenti képen látható négy számot). Ha bármit változtatunk majd, akkor ugyanerre kell kattintanunk ahhoz, hogy a meglévő dokumentumainkat a nézet definíciója alapján láthassuk. Ugyanezt érhetjük el az F9 billentyűvel is !" GYAKORLAT !" Ha az oszlop megnevezésére egyet kattintunk, akkor a tervező panelben láthatjuk az oszlop definícióját, ha duplán kattintunk, akkor a Tulajdonság ablak is megjelenik. Most kattintsunk duplán! 1.23 ábra A nézettervezés teljes képernyőképe !" !" A Tulajdonság ablakban adhatjuk meg azt, hogy az első oszlop az Előadó nevet viselje, írjuk tehát ezt a Cím mezőbe. A ikonra vagy az ablak egyéb részére kattintva jóváhagyhatjuk a beírt nevet, azt már az oszlop fejlécében láthatjuk is. Az oszlopban a tényleges előadók neveit szeretnénk látni. Jelenleg a tervező panelben az Egyszerű
függvény, és azon belül a Szám a nézetben lehetőség van kiválasztva. Ehelyett kattintsunk a Mező kapcsolóra; az alatta lévő ablakban az űrlapokon definiált mezők megnevezései találhatók. Ezek közül válasszuk ki az Előadó-t 37 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS 1.24 ábra A tervező panel az Előadó oszlopra vonatkoztatva !" A nézetben az adott oszlopban a dokumentumok helyén kérdőjelek jelennek meg. A ikonra kattintva megjelennek az előadók nevei. Új oszlop hozzáadása !" !" !" Az éppen kijelölt oszlopunk elé újat a Létrehozás/Új oszlop beszúrása (Create/Insert ikonnal szúrhatunk be. New Column) menüponttal, vagy a A kijelölt oszlop mögé újat a Létrehozás/Új oszlop hozzáfűzése (Create/Append New Column) menüponttal hozhatunk létre. Az utolsó oszlop mögé további lehetőségként a fejlécre kettőt kattintva is létrehozható új oszlop. !" GYAKORLAT !" !" !" Készítsük
el a további oszlopokat a fejlécen az Előadó oszlop mögé kettőt kattintva. A második oszlop címe legyen Cím és a Cím mező tartalmát tegyük ide. További létrehozandó oszlopok: Oszlop címe CD szám Stílus Tartalma Cdszám mező Stílus mező Oszlop méretének megváltoztatása A nézet frissítése után láthatjuk, hogy a CD-k címeinek nem lesz elég az alaphelyzetbeli szélesség, ezért az oszlop méretét kell megváltoztatnunk. Két lehetőségünk van erre: !" A Tulajdonság ablakban a Szélesség mező tartalma jelenleg 10 (alaphelyzet), a mellette lévő nyilakkal növelhetjük, illetve csökkenthetjük méretét. 38 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS !" Az oszlop fejlécének vége felett tartva az egeret az ikon alakja megváltozik egy jobbra-balra nyíl formájúvá: módosíthatjuk méretét. Ekkor az egérrel megfoghatjuk a határolóvonalat és !" GYAKORLAT !" Legyenek az egyes oszlopok méretei a következők:
Oszlop címe Hossza 14 14 5 10 Előadó Cím CD szám Stílus Sorba rendezés oszlop szerint A nézeteket akkor tudjuk jól használni, ha sorba rendezhetjük az egyes oszlopait. Általában az első néhány oszlop van sorrendezve, így egy megfelelő oszlop (mező) szerinti nézeteket kapunk. Ilyenek a dátum vagy a dokumentum szerzője szerinti nézet, illetve példánkban az előadó szerinti nézet. Egy nézeten belül megadható, hogy valamely más oszlop szerint is rendezhessük a teljes nézetet. Példánkban az előadó szerinti nézet akkor teljes, ha az első oszlop, vagyis az előadó neve szerint rendezzük növekvő sorrendbe, utána másodlagosan a második oszlop, azaz a cím szerint rendezzük. Beállítjuk azt is, hogy a stílus szerint a felhasználó rendezhesse növekvő sorrendbe a nézetet. !" GYAKORLAT !" Kattintsunk az első oszlop fejlécére, majd hozzuk be a Tulajdonság ablakot. Itt a második, Rendezés nevű lapot válasszuk ki. 39
1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS 1.25 ábra Egy oszlop rendezésének beállítása !" !" !" Láthatjuk, hogy az Előadó oszlop Rendezés pontja a Nincs-en (None) áll. Ezt változtassuk meg Növekvő-re (Ascending) A Típus rész maradjon a Szokásos (Standard) beállításon. A nézetet felfrissítve láthatjuk, hogy a nézet már növekvő sorba rendeződött, vagyis Carl Orff sora lett az első. Ugyanezt kell a Cím mezővel megtennünk, vagyis állítsuk ezt az oszlopot is növekvő sorrendbe. Ekkor tapasztalhatjuk, hogy a Notes egy nézet rendezését mindig balról jobbra értelmezi, vagyis ha az első oszlop (előadó mező) tartalma ugyanaz, csak akkor rendez a második oszlop (cím mező) szerint. A nézetünkben így a Ringasd el magad címet megelőzi a Lokomotív Gt. sora Igény szerinti rendezés Ez a típusú rendezést azt takarja, hogy az adatbázis fejlesztője nem rendezi az adott oszlopot, hanem a felhasználóra bízza a rendezés
lehetőségét. !" !" Kattintsunk a Stílus oszlopára, itt fogjuk az igény szerinti rendezést engedélyezni. A Tulajdonság ablak második lapján a Rendezés pontot a Nincs állapotba kell tennünk, hiszen alapesetben nem rendezzük az oszlopot. Az „Az oszlopfejlécre kattintva a rendezés/Click on column header to sort” kapcsolót bekapcsolva adódnak az alábbi lehetőségeink: 40 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS Megjelenés a nézetben Ha a felhasználó az oszlop fejlécére kattint, akkor a teljes nézet az adott oszlop szerint növekvő sorba rendeződik, és a fekete színű nyíl világoskék színűvé változik. A sorrendezés megszüntetése a nyílra való újbóli kattintással érhető el. Az előbbihez hasonlóan a lefelé mutató nyíl a csökkenő sorrendet jelképezi. Ez az oszloptípus az előző kettő keveréke. Ha a felhasználó először rákattint, akkor a felfelé mutató nyíl színe világoskékre változik és a nézet az
oszlop értéke szerinti növekvő sorrendbe rendeződik. Másodszori kattintással a lefele mutató nyíl világít és csökkenő lesz a nézet sorrendje. Harmadik kattintásra az oszlop szerinti sorrendezés megszűnik. Ez a lehetőség az előzőekhez képest teljesen más célt szolgál. Itt az állítható be, hogy a nyílra kattintva egy másik nézetre juthatunk el, amit a Tulajdonság ablakban állíthatunk be. Növekvő (Ascending) Csökkenő (Descending) Mindkettő (Both) Váltás nézetre (Change to View) !" A felhasználó szemszögéből Használjuk a Stílus oszlop esetén a Növekvő beállítást. Nézetre vonatkozó beállítások Mielőtt ezt a nézetünket befejeznénk, vessünk egy pillantást a nézet beállításaira. !" Ha a Tulajdonságok ablakunk nyitva van, akkor kattintsunk a nézet középső területére, ekkor megjelennek a nézetre vonatkozó beállítási lehetőségek. Ugyanezt a Tervezés/Nézettulajdonságok (Design/View Properties)
menüponttal hozhatjuk be. 1.26 ábra A nézettulajdonságok első címkéje 41 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS A nézetre vonatkozó Tulajdonságok ablak első lapján találhatjuk meg a nézet nevét, amit az új nézet ablakban definiáltunk. Itt szükség esetén módosíthatjuk is azt Másodlagos név nézeteknél A nézetek nevénél is állíthatunk be szinonimát, azaz másodlagos nevet (Alias). Ekkor az összes hivatkozást erre a másodlagos névre állíthatjuk be, míg a nézetek között az előző név jelenik meg. A nézet tulajdonságai ablak második, „i” feliratú címkéjére kattintva a következőket láthatjuk: 1.27 ábra Nézettulajdonságok opciói Itt a következő fontosabb beállítások találhatók: !" Az adatbázis első megnyitásakor ez az alapértelmezés (Default when database is first opened) Ezt a kapcsolót beállítva választhatjuk ki az elsőként megnyíló nézetet. Célszerű a legfontosabb nézetnél beállítani. A
beállítást a Tervek/Nézetek jelzi. között a nézet neve előtti !" Ez az alapértelemzett terv új gyűjtők és nézetek számára (Default design for new forlders and views) További új nézetek létrehozásánál ez lesz az alapsablon. !" Megnyitáskor: Ugrás az utoljára megnyitott dokumentumra (On Open: Go to last opened document) Általában ez a szokásos beállítás, viszont itt van lehetőségünk arra, hogy megnyitáskor az első vagy utolsó dokumentumra ugorjunk. 42 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS !" GYAKORLAT !" !" Az előadók nézet esetén a név a „1. Előadó szerint”, míg a másodlagos név legyen „eloado” Állítsuk be az alábbiakat is a nézetünkre: !" Az adatbázis első megnyitásakor ez az alapértelmezés !" Ez az alapértelmezett terv új gyűjtők és nézetek számára 1.32 Kategorizált nézet létrehozása (Stílus szerint) Feladat: Olyan nézet létrehozása, amelyben az összes CD
szerepel, és külön kategóriaként láthatjuk az egyes stílusokat. Kategorizálást néhány kulcsszó esetén célszerű használni A nézetben az előadó neve, a cím és a CD-k száma jelenjen meg. Új nézet létrehozása egy másik nézet alapján Előző nézetünket – az előadó szerintit – új, üres nézetként hoztuk létre. A stílus szerinti nézetünk nagy részben hasonlít az előzőre, így az új nézet létrehozásakor egy már létező nézet stílusát örököltethetjük. Ezt az öröklődést a Nézet létrehozása (Create View) ablakban található Másolás innen (Copy From) nyomógombbal állíthatjuk be. 1.28 ábra Új nézet opciói Ha az előző nézetnél beállítottuk az alapértelmezett terv kapcsolót, akkor automatikusan ez adja az új nézet oszlopsorrendjét, definícióit. A Másolás innen ablakkal viszont bármely más nézetből „örökölhetünk”. Ez az „öröklődés” viszont kizárólag egyszeri, csak a létrehozáskor
értendő művelet. !" GYAKORLAT !" Kattintsunk a Létrehozás/Nézet (Create/View) menüpontra. 43 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS !" !" Nyomjuk meg a Másolás innen (Copy from) gombot, majd az ablakban állítsuk be, hogy az új nézet az „1. Előadó szerint” nézetből keletkezzen A nézet nevének adjuk a „2. Stílus szerint” nevet és legyen megosztott Kettős kattintással tegyük szerkesztő módba a nézetet. Oszlopok cseréje Jelen pillanatig a nézet teljesen megegyezik az Előadó szerint nézettel. Feladatunk az, hogy a stílus oszlopát az előadó oszlopa elé helyezzük és beállítsuk a kategória megjelenítést. Az áthelyezést a vágólap segítségével fogjuk végrehajtani !" GYAKORLAT !" !" !" Jelöljük ki a Stílus oszlopát az oszlop fejlécére kattintva Ezután a Szerkesztés/Kivágás (Edit/Cut), egér jobb gomb és Kivágás, vagy Ctrl+X paranccsal az oszlopot kivágjuk a helyéről.
A Véglegesen törli a kijelölt oszlopo(ka)t a nézetből? kérdésre Igennel válaszolunk. Ezután az Előadó oszlopot jelöljük ki, majd a Szerkesztés/Beillesztés (Edit/Paste), a jobb gomb+Beillesztés, vagy Ctrl+V paranccsal beilleszthetjük a Stílus oszlopunkat az Előadó oszlop elé. Az oszlopok így már a megfelelő helyen szerepelnek, meggyőződhetünk erről úgy is, hogy a nézet frissítése után megtekintjük a dokumentumokat. A kategorizálás létrehozása Egy nézet valamely oszlop szerinti kategorizálása a Tulajdonság ablak második címkéjén a Típus pont Kategorizált-ba (Categorized) való átállításával történik. 1.29 ábra A kategorizált stílus oszlop A kategorizált oszlop szélességét a jobb átláthatóság kedvéért kisebbre szokták venni. Ugyanilyen okból a kategóriákat más karakterszínnel és általában félkövér betűtípussal is emelik ki. 44 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS A Tulajdonság ablak harmadik,
attribútumaiért. feliratú címkéje felelős az oszlop karaktereinek A felhasználó egy kategóriát úgy bonthat ki, hogy kettőt kattint rá. A kategória neve elé egy háromszöget is tehetünk, így a háromszögre csak egyet kell kattintani, hogy egy kategóriát kinyissunk, illetve bezárjuk. A háromszög megjelenéséhez a Stílus oszlop Tulajdonság ablakának első címkéjén található „Háromszög megjelenítése kiterjeszthető sornál” (Show twistie when row is expandable) kapcsolót kell bejelölnünk. Nézetfrissítés után az eredmény: 1.30 ábra Kategórianevek háromszöggel A kategóriával kapcsolatosan egy további tulajdonságot kell megemlíteni. Ha a Tulajdonság ablakot a nézetre vonatkoztatva tekintjük meg, akkor az Opciók címkén találhatunk egy ilyen beállítást: „Teljes összezárás az első megnyitáskor (Collapse all when database is first opened). Ez azt jelenti, hogy a felhasználó a nézet megtekintésekor összezárt
kategóriákat láthat, ezzel ösztönözhetjük őket, hogy csak a számukra érdekes kategóriák alatti dokumentumokat tekintsék meg. !" GYAKORLAT !" !" !" !" !" !" A Stílus oszlopra hozzuk be a Tulajdonság ablakot. A második címkén az „Az oszlopfejlécre kattintva a rendezés” paraméter kijelölését szüntessük meg, hiszen jelen nézetben nincs rá szükség. A rendezés legyen Növekvő, míg a típus Kategorizált. A nézet frissítése után az egyes kategóriákat és a kategóriákra osztott dokumentumokat láthatjuk. A Stílus oszlopnál állítsunk be Félkövér stílust és az oszlop színének a jobb alsó második színt (bordó) válasszuk ki. Láthatjuk azt is, hogy az oszlopon belüli igazítást is ebben az ablakban állíthatjuk be. A CD-k száma oszlopnál állítsuk be, hogy az középre legyen rendezve. Az első címkén a nézetnek adjuk a stilus másodlagos nevet. 45 1. ELSŐ LÉPÉSEK: CD
NYILVÁNTARTÁS 1.33 Kategorizált nézet egyszerű formulával (Kinél van) Feladat: Olyan nézet létrehozása, amelyben az összes CD szerepel, és kizárólag két kategóriát láthatunk: az egyik a nálam, a másik a másnál. A nézetben az előadó neve, a cím, a stílus és a tartózkodási hely (ha nem nálam van a CD) jelenjen meg. Új nézet létrehozása egy másik nézet másolásával Új nézetünket az előadó szerinti nézet vágólapos másolatával készítjük el, majd létrehozunk két új oszlopot. !" GYAKORLAT !" !" !" !" !" A Tervek/Nézetek panelon jelöljük ki az „1. Előadó szerint” nézet sorát, majd használjuk a Szerkesztés/Másolás (Ctrl+C) és Szerkesztés/Beillesztés (Ctrl+V) menüpontokat. Erre megjelent egy: „Másolat: 1. Előadó szerint” elnevezésű nézet Dupla kattintással tegyük tervező módba, majd a nézetre vonatkozó Tulajdonság ablakot hívjuk elő. Itt javítsuk ki a nézet nevét:
„3 Kinél van”, továbbá adjunk egy másodlagos nevet is: kinel Hozzuk létre a két új oszlopot. Jelöljük ki az Előadó oszlopát, majd szúrjunk be elé ikon) egy új oszlopot ( Itt most nem egy mező tartalma fog megjelenni az oszlopban, hanem egy kifejezés értéke. A tervezés panelben jelöljük ki a Képlet (Formula) részt, majd írjuk be az alábbi képletet: @If(Kinél="nálam";"nálam";"másnál") Ez a képlet azt jelenti, hogy ha a Kinél mező tartalma “nálam”, akkor a “nálam” felirat jelenjen meg az oszlopban, egyébként a “másnál”. !" !" !" Az oszlopnál állítsuk be a növekvő rendezést kategorizálással, továbbá a stílus megtartása végett csökkentsük az oszlop szélességét és állítsunk be bordó színt és félkövér betűtípust is. A Stílus oszlopra nem lesz szükségünk, így töröljük azt a Del billentyűvel (Szerkesztés/Törlés menüpont). A CD száma oszlopot írjuk
át Kinél van feliratú oszloppá, oda pedig a következő képletet kell beírni: @If(Kinél="nálam";"";Kinél) Azaz: Ha a Kinél mező értéke “nálam”, akkor az oszlopban ne jelenítsen meg semmit, ha pedig valami más van a Kinél mezőben, akkor jelenítse azt meg. Ha jól dolgoztunk, akkor elkészült a nézetünk: 46 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS 1.31 ábra A “3 Kinél van” nézet 1.34 Szűkített listájú nézet (Rockzenék) Feladat: Olyan nézet létrehozása, amelyben nem szerepel az összes CD, hanem csak a rockzenei CD-k listáját láthatjuk. A nézetben az előadó neve, a cím és a CD-k száma jelenjen meg. Először is láthatjuk, hogy az új nézetünk a Stílus szerint nézetre hasonlít, így abból célszerű kiindulni. Választhatjuk a fentebb leírt bármelyik módszert arra, hogy másolatot készítsünk a „2. Stílus szerint” nézetből Ha Létrehozás/Nézet ablakkal hozzuk létre nézetünket, akkor
irányítsuk figyelmünket annak alsó, A kijelölés feltételei (Selection conditions) feliratú részére. Ide kell beírnunk a szűkítő feltételt. Ezt kétféleképpen tehetjük meg: !" !" feltételkészítő segítségével (Feltétel hozzáadása gomb, Add Condition) képlettel (Kijelölés képlet szerint kapcsoló, Select by formula) Az alábbiakban az ablak aljának kétféle formáját láthatjuk ennek megfelelően. vagy 47 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS 1.32 ábra Kiválasztási feltétel megadása képlet szerint, illetve anélkül Ha az új nézetünket a vágólapos másolással hoztuk létre, akkor a nézet tervező panel részén a Nézet kijelölése tulajdonságot válasszuk ki. 1.33 ábra Kiválasztási feltétel megadása a tervező panelen Ekkor is ugyanúgy két választási lehetőségünk van: !" !" feltételkészítő („Könnyű” kapcsoló, Easy) képlettel („Képlet” kapcsoló, Formula) Feltételkészítő A
képletekkel az 5.2 fejezet foglalkozik részletesebben, most a specifikációnak megfelelő egyszerű feltételt határozzuk meg. A feltételek fajtái lehetnek: !" !" !" !" !" Dátum szerint (időpont előtti, utáni, stb.) Használt űrlap szerint (ha több űrlapunk lenne, azok közül választhatnánk) Mező szerint (mezőértékre vonatkozóan) Szerző szerint (a dokumentum szerzője ki) Űrlap szerint (összetettebb feltétel) Esetünkben a mező szerinti feltételt kell használni, ahogy azt az alábbi ábra mutatja: 48 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS 1.34 ábra Az egyszerű feltételkészítő !" GYAKORLAT !" !" !" !" Hozzunk létre egy új nézetet. Az új nézetünk neve „4 Rockzenék” legyen, másodlagos neve pedig legyen: rock Kattintsunk a Feltétel hozzáadása gombra, majd töltsük ki úgy, hogy Mező szerinti (By Field) feltétel legyen, továbbá a Stílus tartalmazza: rock beállítással
(contains). Az OK gomb megnyomására a feltétel beíródik a megfelelő ablakba, szürke hátterű szövegként. A nézet teljes létrehozása és frissítése után láthatjuk, hogy már csak a rock kategóriájú dokumentumok szerepelnek a nézetben. Mivel a Stílus oszlopnak már nincs értelme, ezért nyugodtan törölhetjük azt az oszlopkiválasztás után Del billentyűvel. Csoportosított nézet A létrehozott “4. Rockzenék” nézet erősen kötődik a stílus szerinti nézethez Lehetőségünk van csoportosított nézet létrehozására, azaz a nézeteket így szeretnénk látni: 1.35 ábra Csoportosított nézet !" GYAKORLAT !" Ehhez a nézet nevét változtassuk meg a következőre: “2. Stílus szerintRockzenék” Ezután a Rockzenék nézetünk a Stílus szerint nézetnek egy alnézete lesz. A nézetek további tulajdonságai 49 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS A kategorizálást és a rendezést is azért használtuk, hogy bizonyos
dokumentumokat a felhasználó gyorsan megtalálhasson. Egy nézetnél fontos az is, hogy megfelelően sok információ szerepeljen egy dokumentumról. Így a nézetekben az információk megkeresését segítheti az egyes dokumentumok elkülöníthetősége és láthatósága Az ezzel kapcsolatos beállítások a nézet Tulajdonság ablakának harmadik címkéjén találhatók meg: 1.36 ábra Nézetek stíluselemei Négy fontos stíluselemet emelünk ki: !" Szín: Háttér (Color: Background) Itt állíthatjuk be a nézetek háttérszínét. Külön színnel jelölhetjük például a fontos, vagy az egy témakörrel kapcsolatos nézeteket. A színválasztásnál ügyeljünk arra, hogy ne erős, éles kontrasztú színeket használjunk, hanem inkább a pasztell árnyalatokat. !" Szín: Olvasatlan sorok (Color: Unread rows) Ha egy nézetnél fontos az, hogy elkülönüljenek a még el nem olvasott dokumentumok, akkor azoknak más színt állíthatunk be. Általában a
fekete karakterszínű dokumentumok közül kitűnik a piros színű elolvasatlan dokumentum. !" Szín: Minden második sor (Color: Alternate row) Jobban olvashatóvá tehetjük egy ömlesztett adatokat tartalmazó nézetünket, ha beállítjuk, hogy minden második dokumentumsor a már előbb beállított háttérszíntől eltérő színnel jelenjen meg. !" Sor/dokumentum (Lines per row) Egy dokumentumot több sorban is megjeleníthetünk ezzel biztosítva, hogy minden lényeges információ megjelenjen a nézetben. Az itt beállított szám jelenti azt, hogy egy dokumentum hány sort jelentsen, míg az alatta található „Sorok tartalomhoz igazítása” (Shrink rows to content) kapcsoló beállításával mindezt dinamikussá tehetjük: csak annyi sorban jelenik meg egy dokumentum, ahányra szükség van. 50 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS !" GYAKORLAT !" A példánkban a rockzenék nézetét állítsuk be úgy, hogy váltakozó sorokban
jelenjenek meg a dokumentumok, színnek pedig a sárga egy halvány változatát válasszuk ki. 1.35 Nézet törlése Mivel a legelső (névtelen) (untitled) nevű nézetünkkel nem kezdtünk semmit, így távolítsuk azt el a nézetek listájából. (Bármely tervezési elemet hasonlóan törölhetünk) !" GYAKORLAT !" !" !" Jelöljük ki a (névtelen) nézet sorát a Nézetek listában. A nézetet a Szerkesztés/Törlés (Edit/Clear) menüpont, vagy a DEL billentyű segítségével törölhetjük. A nézet akkor törlődik, ha a “Véglegesen törli az x nézetet az adatbázisból?” kérdésre Igen-nel felelünk. Az adatbázis végső elkészítése után következnek az utolsó simítások. Ezek egy része az adatbázist széppé, másik része használhatóbbá teszi. 1.4 Utolsó simítások 1.41 Az űrlapok és nézetek felülvizsgálata Az űrlapok és nézetek elkészítése után újra és újra felül kell vizsgálnunk a felhasználókkal
közösen, hogy az elkészült adatbázis minden tekintetben megfelel-e a követelményeknek. Bővülő kulcsszólista készítése egyes mezőkhöz (rejtett nézet) Példaadatbázisunk teszthasználata esetén a felhasználó észrevette, hogy egy előadótól több CD-je is van, ekkor viszont pontosan ugyanúgy kell beírnia a nevet. Sokkal egyszerűbb lenne a helyzete akkor, ha a lista a már felvett előadók nevét felajánlaná. !" GYAKORLAT !" Ehhez létre kell hoznunk egy, az előadó szerint kategorizált szerviznézetet. Azért nevezem szerviznézetnek, mivel megjeleníteni nem akarjuk a felhasználó felé, viszont értékeket szeretnénk kinyerni belőle. Rejtett nézet létrehozása úgy történhet, hogy a nézet nevét zárójelbe kell tenni. A nézet neve legyen így: (Előadó kategorizált), míg a másodlagos név legyen: eloadokat 51 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS !" A rejtett nézet létrehozása után az űrlapunkat tervező
módba kell tenni és az Előadó mező definícióját megváltoztatni. A mezőt szövegről párbeszédpanel-listává kell átminősíteni, majd a következő képletet kell használnunk (Kiválasztás képlet alapján) a listabeli értékek kiválasztásához (1.37 ábra): @DbColumn( "" : "NoCache" ; "" : "" ; "eloadokat" ;1) !" !" !" Ennek vázlatos értelmezése a következő (bővebbet az egyes függvényekről a Súgó tartalmaz): A @DbColumn függvény az eloadokat nevű (másodlagos név!) nézet első oszlopából választja ki az ott lévő elemeket, vagyis az előadók neveit. Mivel a nézet kategorizált, ezért nem szerepel az első oszlopban kétszer ugyanaz az érték. Ne felejtsük el a A listán nem szereplő értékek engedélyezése kapcsolót beállítani, mert különben új elemeket nem tud a felhasználó felvenni. Hasonlóan valósítsuk meg a kulcsszóbővülést a stílust jelképező
mezőnél. Itt már létezik a stílus szerinti kategorizált nézet, tehát a következő képletet használhatjuk: @DbColumn( "" : "NoCache" ; "" : "" ; "stilus" ;1). 1.37 ábra Az Előadó mező bővülő listája 1.42 Műveletek (Action) létrehozása A Notesban műveleteknek hívják a nézet tetején levő sorban megjelenő nyomógombokat. (A műveletek a Műveletek menüben is megjelennek.) Ezeket használhatjuk például új dokumentumok létrehozatalára, ugyanis így nem a menüsorbeli Létrehozás/CD pontot kell a felhasználónak kiválasztania, hanem csak az „Új CD” gombot megnyomnia. A „gomb megnyomása” eseményhez összetett függvényeket és scripteket is írhatunk, ezek a weben is használhatók. 52 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS A műveleteket nézetekhez vagy űrlapokhoz illeszthetjük. 1.38 ábra Új CD: egy tipikus nézetbeli művelet Példánkban négy gombot hozunk létre. A nézetekben
az “Új CD” gombot használhatjuk arra, hogy a felhasználók a Notes lehetőségeit nem ismerve hozhassanak létre új űrlapot. Az űrlapon pedig a “Szerkesztés”, “Kilép” és a “Ment és kilép” gombokat fogjuk használni. Ezekből a “Szerkesztés” gombra csak akkor lesz szükség, amikor az űrlap megtekintő módban van, és ezzel válthatjuk át azt szerkesztő módba. Szerkesztő mód esetén pedig a “Kilép” és a “Ment és kilép” gombokkal segítjük a felhasználót. (Ekkor a “Szerkesztés” gombnak már nincs értelme.) Kétféleképpen lehet műveleteket létrehozni: !" !" egyedi műveletként osztott műveletként Egyedi művelet létrehozása Mivel példánkban egyetlen űrlap létezik, ezért az ott található műveleteket hozzuk létre egyedi műveletként. Osztott művelet használata akkor javasolt, ha egy művelet ugyanazzal a funkcionalitással és beállításokkal többször használható. Az előre definiált
műveleteket az űrlap szerkesztése után a ikon megnyomásával láthatjuk a művelet panelben. 1.39 ábra Az űrlap művelet panelje alaphelyzetben Az itt található műveleteket felhasználhatjuk úgy, hogy a végrehajtott parancsot nem, de a művelet egyéb tulajdonságait (ikon, megnevezés, hely) megváltoztathatjuk. 53 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS !" GYAKORLAT !" !" !" Hozzunk létre egy teljesen új műveletet a Létrehozás/Művelet (Create/Action) menüponttal (1.40 ábra) Ekkor a lista végén látható a (Névtelen) feliratú művelet A Név mezőben adjuk meg a nevet, amely a gomb felirata lesz, példánkban legyen ez a “Kilép”. A Megjelenítés részben választhatunk, hogy a művelet a gombok között (műveletsorban), illetve a Műveletek menüben jelenjen-e meg. Célszerű az általunk használt műveleteknél mindkét variációt beállítani, míg a szükségteleneknél (pl. alaphelyzetbelieknél) egyiket sem 1.40 ábra
A művelet Tulajdonság ablakának első címkéje !" !" A Pozíció a menüben, illetve a gombsorban elfoglalt helyet jelképezi. Ha az új műveletünk a 7., viszont az előző hat esetén nincs beállítva a “Művelet felvétele a műveletsorba” kapcsoló, akkor az új műveletünk lesz az első a gombok között. A Grafika részben az alaphelyzet a Nincs, viszont célszerű valamilyen ikont beállítani. A Kilép gombunknál legyen ez a Notes képecskéi közül a piros X-et ábrázoló. A Tulajdonság ablak következő fülére kattintva az elrejtéssel kapcsolatos beállítások találhatók. 54 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS 1.41 ábra A művelet tulajdonságainak második lapja A felső részben választhatunk, hogy a műveletet a Notes kliensben vagy a webböngészőben elrejtsük-e. A pl kizárólag weben keresztül használt művelet esetén a “4.6-os vagy újabb Notes elől” kapcsolót állítsuk be A példánkban nem kell ilyen elrejtést
alkalmaznunk. A középső részen választhatjuk ki, hogy olvasó (“olvasásra nyitotta meg”), illetve szerkesztő módban (“szerkeszti”) rejtsük-e el a műveletet. Célszerű ezek párjait (“a Megtekintésben.”) is beállítani, egyébként a megtekintő (preview) panelben mást lehetne csinálni, mint az alapablakban. A Kilép gombunkat mindkét esetben látnunk kell, mivel olvasó illetve szerkesztő módban is a nézetbe léphetünk vissza az aktuális ablak bezárásával. Az alsó részben pedig tetszőleges képletet adhatunk meg, ami szerint láttathatunk/tüntethetünk el műveleteket. Itt használhatjuk pl a @UserRoles függvényt, hogy az adott felhasználó szerepkörének megfelelően jelenítsünk meg gombokat. A művelet lényegét, vagyis hogy mit hajtson végre, a tervezés panelbe kell beírni az objektum Click eseményéhez. 1.42 ábra A művelet képlete 55 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS !" GYAKORLAT !" !" !"
!" !" !" Írjuk be a Kilép gombhoz tartozó műveletet, ami az ablakbezárás képlete, vagyis a: @Command([FileCloseWindow]). A képlet beírása után mentsük el műveletünket. Hozzuk létre a példabeli “Ment és kilép” gombot is, az ehhez tartozó képlet a: @Command([FileSave]); @Command([FileCloseWindow]) A művelet jelenjen meg a műveletsorban a Kilép gomb után következő valamelyik ) legyen. pozícióban (8.) Ikonja a zöld pipa ( Ezt a gombot viszont el kell rejteni, amikor olvasó módban vagyunk, hiszen nem sok értelme lenne ott használni, vagyis állítsuk be “a Megtekintésben olvassa” és az “olvasásra nyitotta meg” kapcsolókat. Az űrlap bezárásakor mentsük el az űrlapunkon végzett változtatásokat. Osztott művelet létrehozása Osztott műveletet akkor használunk, ha ugyanaz a művelet több űrlapban vagy nézetben is előfordul. Ekkor csak egy helyen hozzuk létre a műveletet és ha ott módosítjuk, akkor az összes
helyen, ahol használjuk, felfrissül. Felhasználói igény lehet például, hogy az ikont, vagy a megnevezést változtassuk meg (pl. Mégsem helyett Mégse legyen); központilag megváltoztatva ezt sok munkától kímélhetjük meg magunkat. Figyelni kell viszont arra, hogy csak a pozíciót változtathatjuk meg egyedileg, minden egyéb változtatás központilag történik. Az osztott művelet így nem használható olyankor, amikor pl. különböző elrejtéseket kell használnunk !" GYAKORLAT !" !" !" A Tervek között található Erőforrások, majd Egyéb elemekben van az Osztott műveletek rész. Ide lépjünk be, majd hozzunk létre egy új osztott műveletet a Létrehozás/Osztott művelet (Create/Shared action) menüponttal. Ekkor a már megszokott mezőket töltsük ki a Tulajdonság ablakban és a tervezés panelben. Hozzuk létre osztott műveleteinket: Művelet neve Szerkesztés Új CD Ikonja Elrejtés Rejtsük el, ha szerkesztő módban
vagyunk: “a Megtekintésben szerkeszti” és “szerkeszti” kapcsolókkal Nincs 56 Képlete @Command ([EditDocument]) @Command ([C ] "CD") 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS ([Compose];"CD") !" !" !" !" Mentés után az osztott művelete(ke)t be kell illeszteni a űrlaphoz vagy a nézethez. A megfelelő űrlapot, vagy nézetet megnyitva a Létrehozás/Osztott művelet beszúrása (Create/Insert shared action) menüponttal illeszthetjük be a kívánt művelete(ke)t. A Szerkesztés műveletet az egyetlen űrlapunkra kell beilleszteni, míg az “Új CD”-t pedig az összes nézetbe kell elhelyezni. Ezért célszerű ezért előbb létrehozni az összes osztott műveletet, majd egyszerre beilleszteni azokat az egyes nézetekbe. A Szerkesztés művelet az űrlapon legyen a 9-es pozícióban, tehát a Ment és kilép mögött. Az Előadó szerinti nézetünkben az Új CD a 7-es pozícióba kerüljön. A többi nézetnél nem
vesszük fel ezt a műveletet, szorgalmi feladatként az Olvasóra hagyjuk ezt. A beillesztés után az adott nézetnél vagy űrlapnál egyedül a pozíciót változtathatjuk meg. Minden egyéb változtatás központilag az Erőforrások elemeknél történhet, a változások a mentés után automatikusan megjelennek az űrlapokon és nézeteknél. A műveletsor és a művelet gombok stílusa A műveletek Tulajdonság ablakát nézve válthatunk át a műveletsor tulajdonságaira. Az ablak három címkéjén találhatjuk azokat a beállításokat, amelyekkel megváltoztathatjuk a gombok stílusát, helyzetét, méretét (1.43 ábra) Ezek részletes tárgyalása meghaladja ezen könyv terjedelmét. 1.43 ábra A műveletsor tulajdonságai 1.43 Ikon tervezése A munkaterületen található adatbázist jelentő négyzeteken található egy képecske. Az 5-ös Notesban ezen képek jelentősége már csökkenhet a 4-eshez képest, hiszen a felhasználó 57 1. ELSŐ LÉPÉSEK: CD
NYILVÁNTARTÁS által elsőként látott kezdőkép valószínűleg egy “profibb” ábrát tartalmaz. A könyvjelzők közé viszont ez az ikon kerül, úgyhogy nézzük meg a létrehozásának módját. A Tervek között található Erőforrások, majd Egyéb elemek a következők: !" !" !" !" !" Ikon (Icon) “Adatbázis használata“ dokumentum (“Using Database” Document) “Adatbázis névjegye” dokumentum (“About Database” Document) Adatbázis-parancsfájl (Database Script) Osztott műveletek (Shared Actions) !" GYAKORLAT !" Kattintsunk az első, Ikon feliratú sorra. Itt láthatjuk az ikontervezőt, amely nagy mértékben hasonlít az egyszerű grafikai programokhoz (mint pl. a Paint): 1.44 ábra Az ikontervező ablaka Az itt szükséges ikon 32x32 képikont tartalmaz, bármely más grafikai programmal is elkészíthető, majd a vágólapra másolás után a Notes ikonszerkesztőjébe hozhatjuk a Beillesztés gombbal. Az
adatbázis ikonjának kifejező ábrát válasszunk vagy készítsünk, ugyanis a munkalapon ez vonhatja a felhasználó figyelmét az adatbázisra. 1.44 “Adatbázis névjegye” dokumentum Az egyéb tervezési elemek közül a következő fontos elem: az adatbázis névjegye. Itt néhány mondatban a fejlesztőnek kell megfogalmaznia, hogy mit is tartalmaz az adatbázis, mire lehet használni, esetleg az adatbázis fejlesztőjéről is szolgálhat adatokkal. 58 1. ELSŐ LÉPÉSEK: CD NYILVÁNTARTÁS Szerkesztésekor olyan elemeket használhatunk, mint a Rich Text mezőknél, vagyis például képeket illeszthetünk a szövegrészek közé. Az itt létrehozott ismertető alaphelyzetben az adatbázis első megnyitásakor jelenik meg. Ennek beállítása az adatbázis Tulajdonság ablakának ötödik lapján található: Névjegy megjelenítése az adatbázis első megnyitásakor (Show „About database” document when database is opened for first time). 1.45 ábra
Beállítások az adatbázis megnyitásakor A névjegyet bármikor előhívhatjuk a Súgó/Adatbázis névjegye (Help/About Database) menüponttal. 1.45 “Adatbázis használata” dokumentum Az adatbázis használatáról szóló ismertetőt a felhasználó a Súgó/Adatbázis használata (Help/Using This Database) menüponttal hívhatja elő. Általában ennek az ismertetőnek kell tartalmaznia az adatbázis használati útmutatóját, azt, hogy mely űrlapokat hogyan kell kitölteni, mire kell ügyelni, hogy jól használják az adatbázist, stb. 59 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS 2. Egy komolyabb feladat: Ügyfélkövetés Ebben a fejezetben egy összetettebb feladatot fogunk megoldani. A feladat egy kisebb cég mindennapos problémájára ad (egy lehetséges) megoldást. 2.1 A feladat megfogalmazása A probléma a következő: a cégnek sok ügyfele van, és ezeket a cégeket, ill. a velük kapcsolatos összes kisebb-nagyobb problémát, eseményt folyamatosan
nyomon kell követni. Ez több dolog miatt is fontos lehet a cég számára Először is, a partner cégek minden ügyes-bajos dolga fel van jegyezve visszakereshetően és rendszerezve, nem vesznek el a cetlik, jegyzetek, amire a céggel kapcsolatban álló belső ember felirogatná. Másodszor, könnyebb a keresés, mintha egy dossziéban helyezné, harmadszor, ha minden felírásra kerül, akkor a kapcsolattartó betegsége, netán a cégtől való távozása után is minden elérhető a partner céggel kapcsolatban, rendezetten, és bárki átveheti a kapcsolattartó dolgait (nem lesz nélkülözhetetlen ember a cégnél). Végül, de nem utolsó sorban a főnök folyamatosan „felügyelheti” beosztottjai munkáját: gyorsan átlátja, ki mennyit dolgozik, kinek melyik céggel van elmaradása. Pontosítsuk tehát, hogy mit is kell ennek az alkalmazásnak tudnia. Azt mindenképpen előre le kell szögeznünk, hogy a fenti feladatot nagyon sokféle módon meg lehet oldani, még
Lotus Notes segítségével is. Így, mi itt csak egy lehetséges specifikációt és egy lehetséges Notes megoldást tudunk mutatni. Az alkalmazásnak mindenképpen tárolnia kell valahogy a partner cégek alapadatait (név, cím, telefonszám, faxszám, számlaszám, adószám, e-mail cím, honlap stb.), ill a partner cégen belüli kapcsolattartók adatait (név, beosztás, céges telefon, mobil száma stb.) Regisztrálni kell tudnia bárkinek az ügyféllel kapcsolatos eseményt: pl. egy bejövő faxot, levelet, telefonhívást, egy árajánlatkérést, egy hiba bejelentését stb. Ezen kívül a belső kapcsolattartónak fel kell tudnia jegyezni mindent, amit a céggel kapcsolatban elvégzett: egy lefolytatott telefonbeszélgetés lényegét le kell tudnia írni, fel kell tudnia vinni egy, a cégnek kimenő faxot, árajánlatot, sőt, akár egy találkozót is fel kell tudnia vinni az adatbázisba (helyszín, időpont stb.) A céggel kapcsolatos, fentebb leírt eseményekre
válaszokat kell tudni adnia annak, aki azért felelős. Hogy ez mit is jelent? Példának vegyünk egy egyszerű esetet: az egyik partner cégtől érkezik egy árajánlatkérés. Ennek regisztrálása után ki kell jelölni egy feladatot: valakinek (nem szükségszerűen annak, aki felvette az ajánlatkérést az adatbázisba) meg kell írnia az ajánlatot. Ezt ki lehet adni feladatként: így ez például lehet egy „válasz” a felmerült eseményre, de lehet válasz pl. egy megjegyzés is, amit a főnök ír az ajánlatkérés mellé, miszerint az ajánlat megírásakor az ügyfélnek adjanak különleges kedvezményt, mert fontos ügyfél. Fontos, hogy ha valaki részére kijelölnek egy feladatot, akkor a feladat kijelöléséről tudomást is szerezzen azonnal: vagyis, kell neki küldeni 60 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS automatikusan egy levelet, amiben felhívjuk a figyelmét arra, hogy meg kell néznie az adatbázist. A feladat végiggondolása után
eljutottunk oda, hogy ezt a feladatot Notes alapon is megfogalmazzuk. Jól látható, hogy három nagy részre oszthatjuk az adatbázis egyik alapját, az űrlapokat (form). Így három űrlapra lesz szükségünk: az egyiken a partner cég adatait és a partner cégen belüli kapcsolattartóik adatait tartjuk nyilván, a másodikon a céggel kapcsolatos eseményeket regisztráljuk, a harmadikkal pedig az eseményekre adott válaszokat, akciókat visszük fel. Természetesen, ahogy a fejezet elején jeleztük, lehet más megfogalmazása is a feladatnak. Például külön űrlapot hozhatunk létre a kapcsolattartóknak, ill a belső kapcsolattartókat (vagyis munkatársainkat) is nyilvántarthatnánk egy-egy űrlapon (sőt, saját munkatársainknak külön adatbázist hozhatnánk létre), de ez már túl bonyolulttá tenné az alkalmazást, amit e könyv keretei nem engednek meg. Ha már megvannak az űrlapok, akkor azt kell eldönteni, milyen nézetek legyenek benne. Mindenképpen kell
egy nézet, ahol az egyes cégekkel kapcsolatosan mindent láthatunk, ahol az egyes cégek alatt rendezetten megjelennek a hozzájuk kapcsolódó események, válaszok, akciók, és az is, hogy ezek milyen státuszban vannak, milyen határidőkkel rendelkeznek. Kell egy nézet, ahol a belső emberek szerint rendezetten megnézhetjük, kinek milyen feladata van még, ill. mit nem készített el (valószínűleg erre a nézetre lesz a főnök leginkább kíváncsi). Szükséges lehet egy nézet, ahol a feladatok határidejük szerint vannak rendezve, amely nézetben minden nap meg lehet nézni, hogy aznapra, ill. a következő napra mit kell mindenképpen elkészíteni. Egy olyan nézet is kell, ahol csak a cégkártyák vannak felsorolva, hiszen nem biztos, hogy ha valamely cégnek akarunk küldeni valamit, vagy felhívni őket, akkor meg akarjuk nézni a céggel kapcsolatos összes eddigi tevékenységet. 2.2 Űrlapok létrehozása 2.21 Új adatbázis létrehozása Kezdjük el
létrehozni a fent vázolt feladatot megoldó adatbázist! Hozzunk létre egy új adatbázist. A második fejezetben (CD nyilvántartás) megtanultak alapján ezt már könnyen megtehetjük: 61 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS !" GYAKORLAT !" Válasszuk a Fájl/Adatbázis/Új menüpontot (File/Database/New) 2.1 ábra Új adatbázis létrehozása menüpont !" Hozzunk létre egy üres adatbázist, az Üres (Empty) sablonból (template), például Ügyfélkövetés névvel, és ugyfel.nsf fájlnévvel (22 ábra) !" Nyissuk meg a Designerben az adatbázist: kattintsunk az adatbázis ikonjára jobb gombbal, majd a megjelenő menüből válasszuk a Megnyitás Designerben (Open in Designer) menüpontot. 62 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS 2.2 ábra Új adatbázis létrehozása 2.22 A Cégnyilvántartó űrlap Hozzuk létre a fenti példában említett űrlapok közül az elsőt, a Cégnyilvántartó űrlapot. Milyen mezőknek kell
szerepelniük a lapon? Természetesen kellenek a cég adatai, legyenek ezek a következők: Leírás A partner cég neve Címe A partner cég központi telefonszáma A partner cég központi faxszáma A telephely(ek) címe(i) A partner cég központ e-mail címe A honlapjuk címe A partner cég adószáma Bankszámlaszám(ok) A partner cég beszállító vagy vevő, esetleg mindkettő A partner cég által gyártott, forgalmazott termékek felsorolása, vagy a cég egyéb kategóriák szerinti besorolása A belső kapcsolat (aki velük tartja a kapcsolatot a cégen belül) A mező neve CégNév Cím CégTelefon CégFax Telephely CégEmail Céghonlap Adószám Bankszám Típus A mező típusa Szöveg, szerkeszthető Szöveg, szerkeszthető Szöveg, szerkeszthető Szöveg, szerkeszthető Szöveg, szerkeszthető Szöveg, szerkeszthető Szöveg, szerkeszthető Szöveg, szerkeszthető Szöveg, szerkeszthető Párbeszédpanel-lista Termékek Párbeszédpanel-lista, választás bővülő
listából Kapcsolat Nevek típusú, szerkeszthető, választás a név- és címjegyzékből 63 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS Az utolsó két mezőről még később részletesen lesz szó. Most lássuk, milyen adatokat kell még majd tárolni. Kell néhány mező a külső, a partner cégnél lévő kapcsolatok számára. Ide, pl a következő adatokat vehetjük fel: !" !" !" !" !" !" !" A kapcsolattartó neve Beosztása A közvetlen, céges telefonja A közvetlen céges fax Mobiljának száma Céges, vagy saját e-mail címe Saját honlapjának címe Mivel kapcsolattartóból több is lehet egy cégnél, ezért ezekből a mezőkből többre is szükség lehet. Alapesetben kettő vagy három biztosan kelleni fog, és mivel egy űrlapon nem lehet két azonos nevű mező, ezt valahogy át kell hidalni. Kézenfekvő megoldás: a mezőnevek után egy számmal jelezzük, melyik emberhez tartozik. Pl: lesz majd Név1, Név2, Név3
mező, vagy amennyi kapcsolattartót szeretnénk. Legyen a mostani példánkban két kapcsolattartó. Ehhez a következő mezőket kell felvenni: Leírás Az első kapcsolattartó neve Beosztása A közvetlen, céges telefonja A közvetlen céges fax Mobiljának száma Céges, vagy saját e-mail címe Saját honlapjának címe A második kapcsolattartó neve Beosztása A közvetlen, céges telefonja A közvetlen céges fax Mobiljának száma Céges, vagy saját e-mail címe Saját honlapjának címe A mező neve Név1 Beosztás1 Telefon1 Fax1 Mobil1 E-mail1 Honlap1 Név2 Beosztás2 Telefon2 Fax2 Mobil2 E-mail2 Honlap2 A mező típusa Szöveg, szerkeszthető Szöveg, szerkeszthető Szöveg, szerkeszthető Szöveg, szerkeszthető Szöveg, szerkeszthető Szöveg, szerkeszthető Szöveg, szerkeszthető Szöveg, szerkeszthető Szöveg, szerkeszthető Szöveg, szerkeszthető Szöveg, szerkeszthető Szöveg, szerkeszthető Szöveg, szerkeszthető Szöveg, szerkeszthető Érdemes felvenni
az űrlapra egy „Megjegyzés” nevű mezőt is, amit Rich Text típusúnak definiálunk, ahová a partner céggel kapcsolatos mindenféle egyéb 64 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS információinkat írhatjuk. Ha kevés kapcsolattartó mezőt definiálunk, akkor ide még mindig felvehetjük őket. 2.23 Statikus szöveg létrehozása: a megvalósítás első lépése !" GYAKORLAT !" Hozzuk létre az adatbázis első űrlapját: válasszuk a Létrehozás/Tervezés/Űrlap (Create/Design/Form) menüpontokat !" Adjunk nevet az űrlapnak, legyen ez a „Cégkártya” !" Válasszunk kellemes, pasztellszíneket a háttérnek, a feliratoknak pedig a háttértől élesen elütő színeket, hogy jól olvashatóak legyenek a feliratok. !" Először a statikus (állandó) szövegeket helyezzük el az űrlapon, és csak ezek után hozzunk létre mezőket. Tervezzük meg, hogyan nézzen ki az űrlap: hol helyezkedjenek el a feliratok, a mezők, melyik
mező melyik mellé (alá) kerüljön. Érdemes az összetartozó mezőket egymás közelében elhelyezni, világosan elkülöníteni az űrlap különböző részeit (pl. a cégadatokat és a cég kapcsolattartóinak adatait) Azt szeretnénk, hogy ha valahogy a 2.3 ábra szerint nézne ki az űrlapunk Ahhoz, hogy az űrlapunk így is nézzen ki, kell egy kis segítség: Táblázatok Az űrlapon létrehozhatunk táblázatokat, amelyek nem csak az összetartozó, és táblázatszerűen megjeleníteni kívánt adatok megmutatásakor használhatók nagyon jól, hanem az űrlap áttekinthető és szép kivitelezésében is segíthetnek. A táblázatokról részletesen a 3.112 fejezetben lesz szó A Táblázat létrehozásához: !" Használjuk a menüsor alatt lévő SmartIcon sor utolsó tagját: létrehozása - Create Table), vagy !" Válasszuk ki a Létrehozás/Táblázat (Create/Table) menüpontot (Táblázat Itt megadhatjuk a táblázat induló méretét, de természetesen
a táblázatból bármikor törölhetünk, ill. hozzáfűzhetünk, beszúrhatunk sorokat vagy oszlopokat. 65 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS . . . . . . . . . 2.3 ábra A cégnyilvántartó űrlap felső és alsó része Ha létrejött a táblázat, figyeljük meg, hogy ha a táblázatban állunk a kurzorral, akkor a menüben előjön egy új menüpont (Táblázat - Table) és a SmartIconok is megváltoznak, három új SmartIcon gomb is feltűnik: segítségével az aktuális sor (amelyikben a kurzor áll) elé beszúrhatunk egy új sort, (Sor beszúrása - Table Insert Row) segítségével a táblázat aktuális sorát törölhetjük (Kiválasztott sor(ok) törlése - Table Delete Selected Rows), gombbal előhozhatjuk a Táblázattulajdonságok ablakot, ahol a táblázat különféle paramétereit állíthatjuk be (Táblázattulajdonságok). Ezek a paraméterek lehetnek a táblázat színei, a keretének vastagsága, az egyes cellák keretének vastagsága, az
egyes cellák hátterének színe, stb. 66 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS !" GYAKORLAT Legyen egy táblázat, amely a partner cégre vonatkozó adatokat fogja össze, és alatta még egy táblázat a kapcsolattartókra vonatkozó adatokkal. Az első táblázat 12 sorból és két oszlopból áll: azért ennyiből, mivel 12 mező tartozik az űrlap első részéhez (a képen csak az első négy és fél látszik), és azért két oszlop, hogy mező feliratát az első cellába, magát a mezőt pedig a második cellába lehessen tenni. A második táblázat pedig 7 sorból (hét mező tartozik egy kapcsolattartóhoz) és 4 oszlopból áll, mivel itt két-két mező és felirat kerül egy sorba (pl. a „Név1” és a „Név2” mezők és a felirataik). Hozzuk létre ezt a két táblát: az előbb megtanult módon válasszuk a Létrehozás/Táblázat menüpontot, majd adjuk meg a megfelelő sor- és oszlopméreteket. Ahhoz, hogy a mezők és a feliratok a
megfelelő helyre kerüljenek egy soron belül, változtassuk meg a sorokon belül az egyes oszlopok méreteit: ehhez állunk a megváltoztatni kívánt oszlopba, majd hozzuk elő a Táblázattulajdonságok (Table properties) ablakot: !" a már korábban említett SmartIcon segítségével, vagy !" a Táblázat menüpont Táblázattulajdonságok pontjának kiválasztásával 2.4 ábra A Táblázattulajdonságok ablak első lapja Az ablakban nagyon sok paramétert lehet beállítani, számunkra most csak az ablak Cella (Cell) részében lévő Szélesség (Width) paraméter érdekes: itt 67 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS lehet megadni az aktuális oszlop szélességét. Ide írjuk be minden oszlopban a kívánt értéket. Azért ennél egyszerűbb módszer is van az oszlopszélességek beállítására: használjuk a Vonalzót. A Vonalzó (Ruler) A vonalzó megjelenítéséhez , vagy !" Használjuk a SmartIcon sor utolsó előtti tagját: !"
Válasszuk a Nézet/Vonalzó (View/Ruler) menüpontot, ill. !" Használjuk a gyorsbillentyűt (Ctrl+R) A vonalzót három dologra használhatjuk: !" Mint egy szokásos szövegszerkesztőben a bekezdések behúzását állíthatjuk be (pl. egy bekezdés első sora kezdődjön beljebb), !" a tabulátorok helyét határozhatjuk meg: ha a vonalzó valamely pontjára kattintunk, ott létrejön egy tabulátor-pozíció, amit jobbra - balra tolhatunk ill., ha a tabulátor jelre kattintunk, akkor eltűnik. A tabulátor jelre jobb gombbal kattintva egy kis menü ugrik elő, ahol beállíthatjuk, hogy a tabulátor jobbra, balra, középre stb. rendezze a szöveget !" a táblázat cellaszélességeit így a legegyszerűbb beállítani. Ez a lehetőség természetesen csak akkor létezik, ha egy táblázat valamely mezőjében állunk. Az aktuális cella által kijelölt oszlop szélességét a vonalzó táblázathatár jelének mozgatásával lehet változtatni, de csak a jobb
oldalon levővel. A bal oldali jel nem mozgatható, ott csak a bekezdés behúzását lehet beállítani. Megjegyzendő, hogy táblázaton belül tabulátort nem lehet használni, a billentyűzet Tab gombja a kurzort a táblázat következő cellájába viszi, így ilyenkor természetesen tabulátor-pozíciót sem lehet kijelölni. !" GYAKORLAT Használjuk a Vonalzót az oszlopok megfelelő szélességűre állításához. Ahhoz, hogy a táblázatunk megfelelően nézzen ki, változtassuk meg az egyes cellák színét. Ehhez ismét hozzuk elő a Táblázattulajdonságok ablakot 68 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS Itt válasszuk a harmadik lapot: 2.5 ábra A Táblázattulajdonságok ablak harmadik lapja A Táblázat színe (Table color) résznél a táblázat egészére vonatkozóan lehet megadni színezéseket. A Cellaszín (Cell color) részben az aktuális vagy a kijelölt cellák színeit lehet beállítani: a Szín (Color) pontban beállíthatjuk az
aktuális, vagy a kijelölt cellák színét. !" GYAKORLAT Válasszunk színeket a táblázatunk különböző celláinak azért, hogy a táblázat még olvashatóbb legyen (vagy egyszerűen csak azért, hogy szép legyen). !" GYAKORLAT Hozzuk létre az összes statikus szöveget egy - egy cellába egymás alá. Válasszuk a Szövegtulajdonságok ablakot. Az ablak első három lapja ismerős lehet az első fejezetből, azért emlékeztetőül, röviden összefoglalva a következőket lehet beállítani: Az ablak megjelenítéséhez: !" Használjuk a SmartIcon sor első tagját: (Tulajdonságok), vagy !" Válasszuk a Szerkesztés/Tulajdonságok (Edit/Properties) menüpontot, vagy !" Használjuk a gyorsbillentyűt: Alt+Enter A szövegtulajdonságok ablak első lapján megadhatjuk a szöveg 69 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS !" Betűtípusát, !" Méretét, !" Stílusát: egyszerű, félkövér, dőlt, aláhúzott, stb. és van
három speciális betűstílus: árnyékolt, kidomborított, bemélyített !" A szöveg színét A Szövegtulajdonságok ablak második lapján a bekezdés formázását végezhetjük el: 2.6 ábra A Szövegtulajdonságok ablak második lapja Az Igazítás pontban megadhatjuk, hogy a bekezdés balra, középre, jobbra, sorkizárással legyen rendezve, avagy egyáltalán ne legyen rendezve. Az Első sor pontban megadhatjuk a behúzás stílusát (ugye még emlékszünk, hogy a Vonalzó segítségével ez beállítható), a Lista pontban (List) megadhatjuk, hogy a bekezdés lista típusú legyen-e, amely lehet sorszámozott és felsorolás típusú, amikhez sokféle sorszámozási ill. felsorolási ikon tartozhat A sorszámozáskor lehet pl. római kis, ill nagy számok, arab számok, betűs sorszámozás, stb. Beállíthatjuk a Térköz pontban (Spaces) a sorközt ill., a paragrafus alatt és felett lévő sorközt. A harmadik lapon beállíthatjuk az oldal margóit
(százalékosan és abszolút is) és a tabulátorokat (utóbbit a Vonalzó segítségével is megtehetjük), a többi lapról pedig majd a későbbiekben szólunk. !" GYAKORLAT Igazítsuk jobbra a létrehozott statikus szövegeket, míg a mellette lévő cellában lévő mezőket majd később igazítsuk balra, így létre lehet hozni az 70 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS előbbiekben bemutatott űrlapot. Létrehozhatunk egyéb feliratokat is, például a kapcsolattartókat tartalmazó táblázatnak adhatunk egy fejlécet. !" GYAKORLAT A két táblázat közé helyezzük el az egyetlen mező feliratát, amely nem szerepel a táblázatokban: ez a „Megjegyzés” mezőhöz tartozó felirat. Ez alá hozzuk majd létre a Rich Text típusú mezőt. 2.24 Mezők létrehozása a Cégnyilvántartó űrlapon: a második lépés !" GYAKORLAT Hozzuk létre a Cégnyilvántartó űrlaphoz tartozó mezőket, a második fejezetben (CD nyilvántartás)
megtanultak alapján. Egy kivételével minden mezőt létre tudunk hozni, mivel az első rész alapján már ismert lehet a három előforduló mező típusból kettő: a szöveg és a kulcsszó (Checkbox, Dialog list stb.) típusok Egyedül a „Kapcsolat” nevű mező típusa ismeretlen számunkra, ezért erről (Nevek típusú) most egy kicsit részletesebben szólunk. A Mezőtulajdonságok ablak megnyitása után a Mező adatai (Field info) lapon a mező neve alatt megtalálhatjuk a mező típusát meghatározó részt. 2.7 ábra Egy Nevek típusú mező létrehozása 71 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS Itt kiválaszthatjuk egy legördülő listából, hogy milyen típusú mezőt szeretnénk. A szöveg, a kulcsszó típusokat (Párbeszédpanel-lista - Dialog list, Jelölőnégyzet - Checkbox, Választógomb - Radio button, Lista - Listbox, Kombinált lista - Combobox) és a Rich Text mezőt már ismerjük, lássuk a Nevek típust (Names), a többi típussal
pedig majd később foglalkozunk. Nevek típus Ez a mezőtípussal először most, a „Kapcsolat” nevű mező létrehozásakor találkozunk. Ebben a mezőben kell megadni majd a felhasználónak, hogy a Cégnyilvántartó lapon szereplő külső cégnek ki a saját cégünkön belüli kapcsolata, ki az, aki a céggel tartja a kapcsolatot, aki „felel” a cégért. Ez természetesen lehet több személy is. Mivel belső emberről van szó, feltételezzük, hogy rendelkezik Notes-szal, így benne van a nyilvános Név- és címjegyzékben (Public Name & Address Book) is. Ekkor kézenfekvő az ötlet, hogy ebbe a mezőbe ne kelljen begépelni az illető nevét, hanem a Notes ajánlja fel a Név- és címjegyzéket, amilyből ki tudjuk választani a megfelelő embert (embereket). A Nevek típus pontosan ezt teszi: ha elvárjuk, hogy pontosan gépeljék be a nevet, vagy nem akarjuk, hogy sokat gépeljen a felhasználó, akkor felajánlhatunk létező névlistákat. Névlisták
származhatnak a hozzáférési listából (HL, vagy Access Control List, ACL) vagy a Név- és címjegyzékből, ill. egy nézet panel is lehet, amely egy nézet oszlopában szereplő neveket kínálja fel. A Nevek típus nem csak ezekért jó, hanem azért is, mert a neveket a Notes azonosítók formájában jeleníti meg (pl. a Nagy József/Marketing/HU módon a CN=Nagy József/O=Marketing/C=HU helyett.) Lássuk, mit lehet beállítani, ha a Nevek típust választottuk ki. Először is ki kell választani, hogy a választások listája honnan legyen felajánlva a felhasználónak. Ezt a Mezőtulajdonságok ablak második lapján tehetjük meg (Vezérlő - Control), a Kiválasztás (Choices) részben (2.8 ábra) 1. Nincs (None) 2. A nyilvános Név- és címjegyzékből (Kiválasztás a Cím párbeszédpanellel Use Address dialog for choices), vagy 3. A hozzáférési listából (Kiválasztás a Hozzáférési listával - Use Access Control List for choices), vagy 4. Egy nézet
valamely oszlopából (Kiválasztás a Nézet párbeszédpanellel - Use View dialog for choices) 72 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS Ha az első lehetőséget választottuk, akkor nem jelenik meg a választhatóságot jelentő kis háromszög a felhasználónak a mező sarkában, így nem tud semmilyen panelből választani. A második lehetőségnél további lehetőségeink vannak. A Névkeresés az egyes karakterek beírásakor (Look up names as each character is entered) opciót kiválasztjuk, akkor a mezőbe gépeléskor a Notes minden karakter bevitele után lefolytat egy keresést a Név- és címjegyzékben, és ha már eldönthető valamelyik névre a keresés, akkor azzal kitölti a mezőt. Nagy- és kisbetűk különbsége alapesetben nem számít. 2.8 ábra A Nevek típusú mező Mezőtulajdonságok ablakának második lapja Ezen felül A listán nem szereplő értékek engedélyezése (Allow values not in list) opció is rendelkezésre áll, azaz nem csak
a Címjegyzékből választhatunk elemeket, hanem új neveket is beírhatunk. A harmadik esetben a listát a hozzáférési listából felépített panelből választhatja ki a felhasználó és itt is rendelkezésre áll A listán nem szereplő értékek engedélyezése opció. A negyedik esetben egy kicsit több adatot kell megadni ahhoz, hogy helyes névsor jelenjen meg. Meg kell adnunk, hogy melyik adatbázisból akarjuk a neveket venni. Ezek után ki kell választani az adott adatbázis nézetei közül 73 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS azt, amelyiket meg akarjuk jeleníteni, majd azt, hogy, ha a felhasználó kiválaszt a nézetpanelből egy sort, akkor annak a sornak hányadik elemét szeretnénk a mezőbe írni. Ennek természetesen előfeltétele, hogy legyen egy ilyen nézetünk. A példánknál maradva, létre lehetne hozni egy adatbázist, ahová a cég összes dolgozóját felvennénk (azokat is, akiknek nincsen Notesa), és amikor ki akarunk választani
valakit, akkor ebből az adatbázisból ajánlanánk fel egy nézetet a választásra. Ezen a Vezérlő lapon (második lap) még beállíthatjuk a következőket is: !" A Megjelenítés (Display) részben a Mezőhatárolók megjelenítése (Show field delimiters) kiválasztása után a mezőben megjelennek az egyes választások között az elválasztó jelek (pl. egy-egy vessző) !" A Beállítások (Options) részben: !" A listán nem szereplő értékek engedélyezése (Allow values not in list): Kiválasztásakor nem csak egy, hanem több nevet is választhatunk, ill. írhatunk be. !" Névkeresés az egyes karakterek beállításánál (Look up names as each character is entered): Egy-egy karakter beírása után a Notes mindig megnézze-e, hogy már fel tudja-e ismerni a listából a kívánt nevet. Ha igen, akkor azt azonnal felajánlja a felhasználónak. !" Elem súgógombjának megjelenítése (Display entry helper button): Ezt az opciót
kiválasztva, a felhasználónak a mező sarkában megjelenik a választhatóságot jelentő kis háromszög. !" GYAKORLAT Hozzuk létre a „Kapcsolat” nevű mezőt. Nyissuk meg a Mezőtulajdonságok ablakát, majd a mező típusának (az előzőekben megtanult módon) válasszuk a „Nevek” típust. A Mezőtulajdonságok ablak második lapján a Kiválasztás részben válasszuk a Kiválasztás a Cím párbeszédpanellel opciót. A második lapon Beállítások részében a Névkeresés az egyes karakterek beállításánál opciót is állítsuk be, hogy a felhasználónak könnyebb legyen a név kiválasztása. A mezők többi paramétereiről az Egyéb mezőbeállítások fejezetben szólunk. 74 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS 2.25 Műveletek felvétele a Cégnyilvántartó űrlapra !" GYAKORLAT Vegyünk fel az űrlapra műveleteket is, a második fejezetben megtanultak alapján. Legyen először csak két művelet: a Kilép és a Ment és
kilép műveletek. Legyen a Kilépés művelet @ képlete: @Command ([FileCloseWindow]) A Ment és kilép művelet @ képlete pedig legyen a következő: @Command ([FileSave]); @Command ([FileCloseWindow]) Egy, a Cégnyilvántartó űrlappal létrehozott dokumentum tetején lévő műveletsor ezek után így nézhet ki: 2.9 ábra A műveletek elhelyezkedése Ezzel készen is van a Cégnyilvántartó lapunk, mentsük el, és próbáljuk is ki. Hozzunk létre több dokumentumot, teszteljük az űrlapunk működését. Miután létrehoztuk a Cégnyilvántartó lapot, létre kellene hoznunk a többi űrlapot, ehhez viszont még egy kis kitérőt kell tennünk a válaszűrlapok világába. 2.26 A válaszűrlapok Többféle olyan űrlap van, amelyek a Lotus Notes-ban speciális jelentéssel bírnak. Mindegyik űrlap, amelyet egy Notes adatbázisban létrehozunk, az alábbi három űrlap típus valamelyike: !" „Dokumentum” űrlap A "Dokumentum" űrlap az űrlapok
hierarchiájában a legfelső szinten áll. Tartozhat hozzá nulla vagy több válasz űrlap. !" „Válasz” űrlap A válasz típus egy fődokumentumhoz tartozó válaszdokumentumokat hoz létre. Egy válaszdokumentum az alatt a fődokumentum alatt jelenik meg, 75 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS amely éppen ki van jelölve akkor, amikor a felhasználó a választ készíti. A tervezők gyakran készítenek olyan válaszdokumentumot, amely adatokat örököl a fődokumentumtól, például a témakör címét. !" „Válasz a válaszra” űrlap A "Válasz a válaszra" típus egy fődokumentumhoz vagy egy válaszdokumentumhoz tartozó válaszdokumentumot készít. Az alapértelmezett űrlap típus a „Dokumentum”. Ha csak egy űrlap van az adatbázisban, akkor annak „Dokumentum” típusúnak kell lennie. A hierarchiát szemlélteti az alábbi ábra: „Dokumentum” típus „Válasz” típus „Válasz a válaszra” típus 2.10 ábra
A Dokumentum - hierarchia A válaszdokumentumok behúzása a fődokumentumok alatt akkor hasznos, amikor az olvasók látni akarják, pl. egy vita fejlődését A válaszoknak 32 szintjét jeleníthetjük meg, minden szint három karakteres behúzással jelenik meg szülődokumentuma alatt. Erre egy tipikus példa a Notes vita (discussion) adatbázisa, amely sablonját a telepítéskor a Notes automatikusan elhelyezi a többi sablon között. 76 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS Ezt az adatbázist például egy munkacsoport használhatja ötleteik és elképzeléseik megosztására. A vita adatbázis jól használható minden olyan csoport számára, amelynek tagjai információkat osztanak meg egymással. Például: egy tervezői csoport megvitathatja a készülő termékkel kapcsolatos információkat, vagy egy reklámügynökség a következő reklámkampány elemeit. Ebben az adatbázisban az egyes felvetett problémákra, vagy ötletekre érkezik válasz, majd a
válaszra válasz, stb. Mindez egy hierarchiába rendezve könnyen áttekinthetővé teszi az egyes vitákat, beszélgetéseket. A mi esetünkben, az Ügyfélkövetés adatbázisban a logika az lesz, hogy az egyes cégdokumentumokhoz válaszdokumentumként hozzárendeljük a céggel kapcsolatban felmerült eseményeket (levelet kapunk vagy küldünk, telefonhívást kapunk, vagy felhívjuk, esetleg árajánlatkérés érkezik, vagy mi adunk a cég felé egy árajánlatot), majd az eseményekre „válaszokat” adunk (pl. kijelölünk valakinek egy feladatot, elvégzünk egy feladatot, vagy csak egyszerűen megjegyzést fűzünk az eseményhez). Ezek a dokumentumok pedig valamilyen hierarchiában jelennek meg, valahogy így: 2.11 ábra Az Ügyfélkövetés adatbázis hierarchiája Válaszűrlapok létrehozása Egy űrlap alapesetben fődokumentumokat (szülő dokumentumokat) hoz létre, hacsak át nem alakítjuk olyan űrlappá, ami válaszdokumentumokat készít. Ehhez a
következőket kell tennünk: 1. Nyissuk meg az űrlapot tervezés módban 2. Válasszuk a Tervezés/Űrlaptulajdonságok menüpontot 77 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS 3. Az Űrlap adatai (Form info) lapon, a Típusnál (Type) tegyük az alábbiak egyikét: !" Válasszuk a „Válasz” (Response) beállítást, ha az űrlapot fődokumentumokra adott válaszok készítésére kívánjuk használni. !" Válasszuk a „Válasz a válaszra” (Response to response) beállítást, ha az űrlapot fődokumentumokra és más válaszokra adott válaszok készítésére kívánjuk használni. Ahhoz, hogy egy nézet (view) a fentiekben bemutatottan nézzen ki, a következőket igényli: !" A „Válasz” („Response”) és a „Válasz a válaszra” („Response to Response”) típusú válaszűrlapok elérhetők legyenek a felhasználók számára, vagyis lehessen „Válasz” és „Válasz a válaszra” típusú dokumentumot létrehozni. !" A
nézet (view) tulajdonság paneljén az Opciók lapon a „Válaszdokumentumok megjelenítése hierarchiában” („Show response documents in a hierarchy”) beállítást ki kell választani, és dokumentum kiválasztási képletként a SELECT @All képletet használjuk, vagy egy olyan képletet, amely megengedi a válaszdokumentumok megjelenítését is, mint például a következő: SELECT Form = „Alap” | @IsResponseDoc !" A nézetnek legyen egy csak-válaszok oszlopa. Hozzuk létre a válaszok oszlopot közvetlenül balra attól az oszloptól, amely alatt azt szeretnénk, hogy a válaszok behúzva jelenjenek meg. Hagyjuk az oszlop címét üresen, a szélessége legyen 1, és az oszloptulajdonságok panel Alapok lapján válasszuk ki a „Csak a válaszok megj.” („Show responses only”) opciót. Írjunk olyan oszlopképletet, amely olyan információkat jelenít meg az oszlopban mutatott válaszdokumentumokról, mint a szerzők vagy a létrehozási dátumok, cím,
stb. Arról, hogy a nézetnek milyen feltételeket kell teljesítenie, hogy helyesen jelenítse meg a hierarchiát, a nézetekről szóló fejezetben még szó lesz. 2.27 Az Esemény űrlap megtervezése Most lássuk, milyen mezők szükségesek egy esemény rögzítéséhez az Ügyfélkövetés adatbázisunkban! 78 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS Leírás A mező neve Az esemény típusa (pl. Faxküldés, Esemény Telefon, Találkozó megbeszélése, Bejövő levél stb.) A partner cég neve, amelyikhez az CégNév esemény tartozik A partner céghez tartozó külső Küldö kapcsolat neve A partner céghez tartozó belső Kapcsolat felelőse A nap, amikor az esemény bekövetkezett Az óra, perc, amikor az esemény bekövetkezett Egy rövid leírás A teljes leírás, dokumentum, akár képekkel, hangokkal, stb. A pontos nap, óra, perc, amikor a dokumentumot létrehozták Nap Óra Röviden Leírás Dátum A mező típusa Párbeszéd-panel lista, szerkeszthető
Párbeszéd-panel lista, szerkeszthető, választás az eddigi cégek közül Szöveg, szerkeszthető Nevek típus, szerkeszthető, választás a név- és címjegyzékből Dátum/idő, szerkeszthető, dátum típusú Dátum/idő, szerkeszthető, Idő típusú Szöveg, szerkeszthető Rich Text, szerkeszthető Dátum/idő, nem szerkeszthető, dátum típusú Szöveg, nem szerkeszthető Annak a neve, aki a dokumentumot Rögzítö felvitte Az utolsó két mezőre azért van szükség, mivel a dokumentum felvitele és a esemény bekövetkezése nem biztos, hogy egy időben történik, sőt az sem biztos, hogy ugyanaz a személy viszi fel, akihez az esemény tartozik. Az idő típusról később fogunk részletesen beszélni. 2.28 Az Esemény űrlap létrehozása !" GYAKORLAT Hozzunk létre egy új űrlapot, aminek legyen a neve „Esemény”. A Cégkártyák űrlap létrehozása során szerzett tapasztalatok és az első fejezet (CD nyilvántartás) alapján hozzunk létre egy
új űrlapot, amire vegyük fel a statikus szövegeket, ill. a már ismert típusú mezőket (kulcsszó típusok, szöveg, nevek, Rich Text). Ismét hívjuk segítségül a táblázatot, hogy az űrlap áttekinthető legyen. Tegyük egy táblázatba az összetartozó mezőket: mint pl 79 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS az Esemény, CégNév, Küldő, Nap, Óra és a Kapcsolat. Azt szeretnénk, hogy ha valahogy így nézne ki az űrlap: 2.12 ábra Az Esemény űrlap A Dátum/idő típusú mezőkről a 3.112 fejezetben lesz majd szó Az Esemény nevű mező – mint tudjuk – párbeszéd-panel lista típusú, amely értékeit mi adjuk meg előre. Ehhez a mező Mezőtulajdonságok ablakának második lapján a Kiválasztás pontban válasszuk a Választható elemek beírása (soronként egy) opciót, majd írjuk be a lehetséges eseményeket, legyenek ezek: !" !" !" !" !" !" !" !" Árajánlatot kér Árajánlatot kérünk
Bejövő csomag Bejövő fax Bejövő levél Bejövő számla Hibabejelentés Kimenő csomag 80 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS !" !" !" !" !" !" Kimenő fax Kimenő levél Munkalap Találkozó Telefon Egyéb A CégNév mező – amelyik szintén egy párbeszéd-panel lista típusú – értékeit viszont ne adjuk meg előre, hanem alkalmazzuk az első fejezetben (CD nyilvántartás) a bővülő kulcsszólistákról tanultakat, és ajánljuk fel a felhasználónak az eddig meglévő cégek nevét. Ehhez létre kell hozni egy nézetet (amit célszerű el is rejteni), amelyben csak a Cégnyilvántartó űrlappal készült dokumentumok vannak megjelenítve, és csak egy oszlopa van, a CégNév mező tartalma, és a nézet rendezve is van ezen oszlop szerint. Ha ennek a nézetnek a „Cégek” nevet adjuk, és az Esemény űrlapunkon a CégNév mező Mezőtulajdonságok ablakának második lapján a Kiválasztás részben a Kiválasztás
képlet alapján opciót választjuk, akkor képletnek ezt írhatjuk: @DbColumn("":"NoCache";"":"";"Cégek";1) Az Esemény űrlap sok újdonságot tartalmaz az előbbiekben létrehozott űrlaphoz (Cégnyilvántartó adatlaphoz) képest. Az egyik legfontosabb, hogy ahhoz, hogy az ezzel az űrlappal felvitt események a megfelelő cég adatlapja „alatt” legyenek (a később elkészülő „Válasz” űrlappal készültek pedig a megfelelő esemény dokumentumok alatt), ehhez alkalmazni kell a válasz űrlapokról már megtanultakat. !" GYAKORLAT Ahhoz, hogy ez az űrlap válasz űrlap legyen, nyissuk meg az Űrlaptulajdonságok ablakot, és az Alapok lapon az Űrlap típusánál válasszuk ki a „Válasz” típust. Ekkor, az ezzel az űrlappal létrehozott dokumentumok válasz típusú dokumentumok lesznek. Arról, hogy ezeket hogyan lehet jól megjeleníteni a nézetekben, már esett néhány szó a 2.26 fejezetben, de még
a 2.3 fejezetben is szó lesz róla részletesen Az űrlapunk további fontos újdonsága, hogy a szülő dokumentumból adatokat kellene átvennünk (örököltetnünk). 81 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS Mezőérték öröklése dokumentumból Azért, hogy a felhasználó ne végezzen felesleges gépelést, és hogy az összetartozó dokumentumokat ellentmondásmentesen tartsuk, egy dokumentum örökölhet információkat egy másik dokumentumból. Az öröklött információ automatikusan megjelenik a megjelölt mezőben. Az öröklődés aktiválásához az Űrlaptulajdonságok ablak Alapbeállítások (Defaults) lapján (második lap) van két opció, amelyek azt határozzák meg, hogy hogyan örököljön értékeket a dokumentum egy másik dokumentumból. 2.13 ábra Az értéköröklés beállítása !" Értéköröklés a kijelölt dokumentumból (Formulas inherit values from selected document) opciót akkor használjuk, ha azt szeretnénk, hogy azok a
dokumentumok, amelyek ezzel az űrlappal készülnek, örököljenek értékeket a kiválasztott dokumentumból. Viszont: 1. A kiválasztott dokumentumban lévő mezők értékét csak a létrehozáskor veszi figyelembe a Notes, később, ha már megváltozik az eredeti dokumentum, akkor az örökölt mezők értékei már nem változnak meg. (Azaz, nem kapcsolat – link – jön létre a két mező között, hanem csak egy egyszeri értékátadás) 82 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS 2. A létrehozott új dokumentum bármilyen űrlap-típusú lehet, azaz lehet akár „Dokumentum”, vagy „Válasz”, vagy akár „Válasz a válaszra” típus is. !" Teljes dokumentum öröklése ebbe az RTF mezőbe (Inherit entire selected document into rich text field) opció akkor hasznos, ha a teljes kiválasztott dokumentumot szeretnénk valamilyen módon elérhetővé tenni. Ha ezt kiválasztjuk, akkor megjelenik két mező, amelyekből az elsőben az űrlapon
található Rich Text mezők közül lehet kiválasztani egyet (amibe az öröklés történik). A második mezőben kiválaszthatjuk azt, hogy az öröklés milyen módon történjen: !" Lánc (Link) kiválasztása esetén egy dokumentum-lánc keletkezik, amire ha a felhasználó rákattint, akkor megnyílik a szülő dokumentum !" Az Összezárható rich text (Collapsible rich text) választásakor a mezőben egy szakasz keletkezik, amely tartalmazza a teljes szülő dokumentumot. A szakaszról a későbbiekben lesz majd szó. !" A Rich text választásakor a teljes szülő dokumentum beszúródik a kiválasztott Rich Text mezőbe. Ezek a lehetőségek akkor hasznosak, ha például egy válaszlevelet szeretnénk küldeni, amely az eredeti levelet teljes egészében tartalmazza. Az öröklés megvalósításához tehát a következőket kell tenni: !" Válasszuk ki az Értéköröklés a kijelölt dokumentumból opciót, !" Azonosítsuk, melyik mezőknek kell
örökölniük értékeket (az Esemény űrlapon például a CégNév és a Kapcsolat), !" Módosítsuk, ha kell a mező típusát. A mező, amely örökli az értéket, lehet: 1. Létrehozáskor számított (Computed when composed), 2. Szerkeszthető (Editable) E mező-típusokról még a későbbiekben szó lesz. !" Hozzunk létre a mezőben egy képletet: tegyük a hivatkozott mező nevét a mezőbe, vagy szerepeltessük azt a képletben. #" Tipp A mezőnek, amely az értéket örökli, bármi lehet a neve, azonban az egyes űrlapok és kapcsolatuk jobb áttekinthetősége kedvéért javasolt, hogy az öröklődő és az értéket átvevő mezőnek azonos legyen a neve. Néhány szó még az örökléssel kapcsolatban 83 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS Az öröklés nem függ össze a dokumentumok hierarchiájával, azaz nem számít a Dokumentum/Válaszdokumentum viszony. !" Ha az öröklés be van kapcsolva, akkor minden új dokumentum, amit
ezzel az űrlappal hoznak létre az adott mezőket örökölni fogja az éppen kiválasztott dokumentumból. !" A válasz típusú űrlapoknál is nekünk kell bekapcsolni az öröklést, ha akarjuk. !" A mezőnek, amely értéket vesz át, Szerkeszthető, vagy Létrehozáskor számított típusú mezőnek kell lennie, mert az öröklés csak egyszer történik: 1. Egy érték átvételéhez és megjelenítéséhez a Létrehozáskor számított típust válasszuk, 2. Ha azt akarjuk, hogy a mező értéke szerkeszthető is legyen, akkor a Szerkeszthető típust válasszuk #" Tipp Ha nincs olyan mező a kiválasztott dokumentumban, mint amit örökölni szeretne a létrehozó űrlap, akkor sincs semmi baj, egyszerűen üres lesz a mező, amelyik átvenné az értékeket. !" GYAKORLAT Visszatérve a példánkhoz, az Esemény űrlapon van két olyan mezőnk, amelynek a szülő dokumentumból kellene vennie az értékét: a CégNév, és a céghez tartozó, belső
ember nevét tartalmazó Kapcsolat mező. Az adatbázis használata során így a felhasználó csak kiválasztja a megfelelő céget, amellyel kapcsolatban valamilyen esemény történt, majd létrehozza az Esemény űrlap segítségével az eseményt rögzítő dokumentumot. Ha így hozza létre az új dokumentumot, és mi segítjük az öröklődéssel, akkor a létrehozás után már előre ki van töltve a felhasználónak a cég neve és a céghez tartozó belső ember neve. Legyen módosítható mind a két mező! Ehhez az Esemény űrlap Űrlaptulajdonságok ablakában válasszuk ki az Értéköröklés a kiválasztott dokumentumból opciót, a CégNév mező alapértelmezett értéke pedig legyen „CégNév”, a Kapcsolaté pedig „Kapcsolat”: 84 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS 2.14 ábra A CégNév mező alapértelmezett értéke A Válasz űrlapon található két öröklődő mező: a CégNév és az Esemény mező – hasonlóan az előzőekhez –
ugyanígy öröklődik majd. A Dátum/idő típusú mezők létrehozása Ahhoz, hogy az Esemény űrlapot teljes egészében létre tudjuk hozni, szükséges még egy mezőtípus megismerése. A Nap, az Óra és a Dátum mezők egy, eddig még nem tárgyalt típusúak: Dátum/idő mezőtípusúak. Ennek a mezőtípusnak az a tulajdonsága, hogy a beírt szöveget egy dátumnak próbálja értelmezni, és ha sikerült, akkor dátumként is tárolja. Ez azért jó, mert 1. Dátum típusú műveleteket tudunk az ilyen mezők között végezni. Pl ha kivonunk két ilyen mezőt egymásból (és azok dátumok voltak), akkor a kivonás eredménye a kettőjük között eltelt másodpercek száma. 2. Ha nem minden felhasználónak azonos a dátum-megjelenítés az alap operációs rendszerben (mert valaki, pl. a magyar megjelenítést kedveli, míg mások az angol típust), akkor is helyesen fog mindenkinek a saját maga által használt módon megjelenni a dátum, ill. az idő A helyes
dátumformát a Vezérlőpult segítségével éééé.HHnn értékre állítsuk be Problémát okozhat, ha a dátumforma végén egy felesleges pont van. Ha ezt a mezőtípust választjuk, a mező Mezőtulajdonságok ablakának első lapja a 2.15 ábra szerint néz ki Ezen a lapon van egy érdekes lehetőség: ha a Stílus részben a Dátum/idő gomb stílust használjuk (Calendar/time control), egyéb érdekes lehetőségeink is lesznek. Egy Date/Time típusú mezőt létrehozásakor, ha csak a dátum részt jelenítjük meg, akkor a mező sarkában egy kis naptár jel jelenik meg, amire a felhasználó, ha rákattint egy jól használható naptárhoz jut, amiből egyszerűen tudja kiválasztani a kívánt napot. Ez csak akkor jelenik meg, ha nem engedünk több értéket beírni a mezőbe (a Több érték engedélyezése paraméter nincs kiválasztva). 85 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS 2.15 ábra A Mezőtulajdonságok ablak első lapja Szintén Dátum/idő gomb
stílust választva, ha a Dátum/idő a típusnál csak az idő részt jelenítjük meg, akkor egy kis óra jelenik meg, amelyre kattintva ugyancsak egyszerűsödik az óra/perc bevitel. Itt még egy további lehetőségünk is van: ha engedélyezzük a több érték bevitelét és a Mezőtulajdonságok ablak Speciális lapján az Elválasztójel adatbevitelkor az Üres sort (Blank line) is engedélyezzük, akkor nem egy időpontot, hanem egy időtartományt lehet kiválasztani, és az is jelenik meg a mezőben. A Mezőtulajdonságok ablak második lapján beállíthatjuk, hogy a dátum és az idő közül melyiket (vagy mindkettőt) és milyen formában jelenítse meg a Notes. A Dátum/idő típusú mezőről részletesebben a 3.112 fejezetben lesz szó !" GYAKORLAT Az Esemény űrlapunkon a „Dátum” mezőnek legyen a típusa Dátum/idő, csak a dátumot jelenítse meg (Mezőtulajdonságok ablak második lapja), és maradjon Notes stílusú (ez a mező majd automatikusan
kitöltésre kerül). A „Nap” mező is legyen Dátum/idő típusú mező, ez is csak a dátumot jelenítse meg, viszont válasszuk a Dátum/idő gomb stílust, mivel ezt majd a felhasználó fogja kitölteni. Az „Óra” mező szintén Dátum/idő típusú lesz, itt viszont válasszuk ki, hogy csak az időt jelenítse meg a Notes, és szintén 86 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS válasszuk a Dátum/idő gomb stílust, hogy a felhasználó könnyen kiválaszthassa az esemény bekövetkeztének az óráját és percét. Mezők értékének ellenőrzése, ill. átalakítása Ahhoz, hogy egy felhasználó helyes adatokat adjon meg egy-egy mezőben, szükséges lehet, hogy ellenőrizni tudjuk elmentés előtt a mező tartalmát. Ez lehetséges, az első fejezetben (CD nyilvántartás) már esett erről szó: erre a célra a mező objektum Bemenet érvényesítése (Input Validation) eseménye szolgál. A Cégkártya űrlapon és az Esemény űrlapon a CégNév mező
lehetne kötelezően kitöltendő mező: legalább a cég nevét kötelező legyen egy ilyen cégkártyán és eseményen beírni. Ehhez a következőt kell tenni: !" GYAKORLAT !" Nyissuk meg a Cégkártya vagy az Esemény űrlap tervét a Notes Designerben !" Kattintsunk a CégNév mezőre !" Válasszuk ki a Programozói ablakból (lent) az Objektumok lap Bemenet érvényesítése eseményét !" Ide írjuk be a következő feltételt: !" @If(CégNév="" & @IsDocBeingSaved; @Failure("A cégnév kötelező!"); @Success) 2.16 ábra A Cégnév mező ellenőrzése Nem csak azt lehet egy mezőnél megnézni elmentéskor, hogy megfelel-e egy feltételnek, hanem automatikusan át is lehet alakítani egy másik formára. Ezt is már ismerjük az első fejezetből: erre a Bemenet átalakítása (Input Translation) eseményt kell használni. A két eddigi űrlapunknál (Cégkártya és Esemény) arra használhatjuk ezt az eseményt, hogy a
„Nevek” típusú mezőknél, ha kiválasztunk a feljövő ablakból valakit, akkor a neve az ún. hierarchikus formában jelenik meg (pl: 87 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS Nagy József/Marketing/HU). Viszont elképzelhető, hogy nekünk elég lenne csak a neve, a további részre nincs szükségünk. !" GYAKORLAT Mindkét űrlapunkon meglévő mező a „Kapcsolat”. Írjuk a következő képletet a mezők Bemenet átalakítása eseményébe, és ezután a mezőben csak a kiválasztott ember neve fog megjelenni, a többi adat nem: @Name([CN];Kapcsolat) 2.17 ábra A Kapcsolat mező átalakítása A @Name függvény egy Név típusú adatból a paraméterként kapott részt adja vissza: a CN a Common Name rövidítése, amely a név általános név részét adja. #" Tipp A fenti két esemény helyettesíthető a mező Exiting ill. az űrlap QuerySave és QueryClose eseményeinek kezelésével is, amit a LotusScript segítségével tehetünk meg. Ez
persze egy kicsit nehézkesebb, viszont sokkal részletesebb ellenőrzést lehet elvégezni. #" Tipp Ez az esemény (Bemenet átalakítása) elég sok mindenre használható; nem csak arra, hogy egy mező tartalmát átalakítsuk, hanem – mivel ezek az események (minden mezőé) lefutnak a dokumentum elmentése előtt – ezekbe bátran lehet olyan akciókat is írni, aminek igazából nincs is köze a mezőhöz, viszont szeretnénk, ha elmentés előtt lefutna. Arra kell csak vigyázni, hogy ez az esemény, mint ahogyan az előzőekben szó volt róla, nem csak akkor fut le, amikor elmentődik a dokumentum, hanem ha frissítődik, ill. újraszámítódik Viszont ezt ellenőrizni lehet egy @ függvény segítségével (@IsDocBeingSaved), tehát ezt a függvényt alkalmazni kell a képletünkben. 88 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS A mentés előtt természetesen lefut az űrlap QuerySave eseménye is, amit szintén alkalmazhatunk, és a Lotus Notes 5-ös
verziójának megjelenése óta már ide is írhatunk képletet, de az előző verziókban ide sajnos csak LotusScriptet írhattunk. Megjegyzés A Bemenet átalakítása esemény a mentés előtt előbb hajtódik végre, mint a Bemenet érvényesítése esemény. A levélküldésről szóló (Levélküldés a Válasz űrlapról) fejezetben egy, a Bemenet átalakítása eseményt használó példát is bemutatunk. Szerkeszthető és számított mezők Egy mezőnél függetlenül attól, hogy milyen típusú, beállítható, hogy az adott mező szerkeszthető legyen-e, vagy sem, ill., ha nem, akkor az értékét hogyan vegye fel. Ehhez a Mezőtulajdonságok ablak első lapjának Típus (Type) részét használhatjuk. Miután itt beállítottuk a mező típusát, mellette beállíthatjuk, hogy a mező szerkeszthető legyen-e. Szerkeszthető mező esetén a felhasználó megváltoztathatja a mező tartalmát, például új értéket írhat be. Számított mező esetén a felhasználó nem
tudja megváltoztatni a mező tartalmát, ekkor egy képlet adja a mező értékét. 2.18 ábra Számított mező létrehozása 89 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS A számított mezők arra szolgálnak, hogy automatikusan megjelenítsenek valamilyen adatot, mint pl. a szerző nevét, a dátumot Az ilyen típusú mezőknek valamilyen képletre van szükségük arra, hogy értékük legyen, és ezt a Notes meg is követeli, azaz addig nem lehet elmenteni az űrlap tervét, amíg a számított mezőkbe valamilyen képletet nem írunk. A számított mezők általában akkor kerülnek újra kiszámításra, amikor !" A felhasználó létrehozza a dokumentumot, !" A Nézet/Frissítés (View/Refresh) menüt kiválasztja, ill. megnyomja az F9-et !" Elmenti a dokumentumot Az előbbiek függvényében tehát négy lehetőség közül választhatunk: !" Szerkeszthető (Editable): A mező mindig szerkeszthető !" Kiszámított (Computed): A mező
értékét a felhasználó nem tudja megváltoztatni. A kiszámított mezőtípus mindig újraszámítódik, ha a felhasználó létrehoz egy dokumentumot, újraszámolja, vagy elmenti. !" Létrehozáskor számított (Computed when composed): a mezőtípus képlete csak egyszer számítódik ki: amikor a felhasználó először létrehozza a dokumentumot. Ez a típus akkor használható, ha olyan információkat szeretnénk megőrizni, amelyeket a dokumentum keletkezésekor lehetett tudni: Ilyen lehet pl. a dokumentum létrehozója, létrehozásának időpontja, vagy a szülő dokumentumból örököltetett, megőrzendő adatok. Esetleg olyan mezőt is létrehozhatunk, amelyben az adatok, amiket tárolunk, nem változnak már: pl. a dokumentum egyedi (Notes) azonosítója !" Megjelenéshez számított (Computed for display) mezőtípus: itt a mező értékét mindig, amikor a felhasználó megnyitja ezt a dokumentumot, újra kiszámítja a Notes. Ez a mezőtípus akkor
használható jól, ha olyan információkat tárolunk benne, amelyek csak a megnyitott dokumentum nyitva tartása alatt érdekesek számunkra. Ilyen lehet pl a pillanatnyi idő, vagy egy olyan mező értéke, amely egy másik dokumentumban van, és sokszor változik, vagy olyan számítások eredménye, amelyet nem kell megőrizni. A Megjelenéshez számított mező értéke ugyanis nem tárolódik el, az mindig csak a dokumentum megnyitásakor jön létre. Ebből következik, hogy egy Megjelenéshez számított mező értékét nem lehet nézetben megjeleníteni, hiszen az nincs benne fixen a dokumentumban, mint az előző három típus értéke. Arra is használhatjuk ezt a mezőtípust, hogy egy szerkeszthető mező értékének egy másolatát mutassuk meg vele (és esetleg az eredetit elrejtsük). 90 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS Egy számított mező létrehozásához: !" Válasszuk bármelyik számított mezőtípust !" A Programozói ablak
Objektumok lapjáról válasszuk az Érték (Value) pontot !" Írjunk egy képletet, amely a mező típusának (Szöveg, Szám, stb.) megfelelő értéket ad vissza, vagy írjunk be egy mező nevét, esetleg idézőjelek közé valamilyen szöveget. !" Kattintsunk a zöld pipa jelre, hogy ellenőrizzük és elmentsük a változtatásokat. Még két opció van, amire érdemes odafigyelni: !" Számítás érvényesítés után (Compute After Validation): a Mezőtulajdonság ablak első lapján (Mező adatai) található meg. Ha kiválasztjuk (ezt csak akkor tehetjük meg, ha a Számított vagy a Megjelenéshez számított típust választottuk), akkor a mező értéke csak késleltetve számítódik ki: akkor, amikor már minden mezőn lefutott a Bemenet érvényesítése esemény. Ez akkor hasznos, ha a mező értéke olyan mezők értékétől függ, amelyeknél biztosak akarunk lenni, hogy lefut a Bemenet érvényesítése esemény. !" Mezők automatikus
frissítése (Automatically refresh fields): Ez az opció az Űrlaptulajdonságok ablak első lapján (Űrlap adatai - Form Info) található a Beállítások részben; a beállítása után a Notes az űrlap összes mezőjét minden mezőváltás esetén frissíti. Ez akkor hasznos, ha azt akarjuk, hogy a felhasználó mindig lássa, hogy amikor halad előre az űrlap kitöltésében, mindig változik az információ attól függően, hogy ő mit írt be. Viszont óvatosan bánjunk ezzel az opcióval: ha nagyos sok számított mezőnk van, akkor egy-egy ilyen frissítés elég sokáig tarthat, így egy űrlap kitöltése közben a gyakori frissítés erősen lelassíthatja a bevitelt. Megjegyzés: A későbbiekben meg fogunk ismerkedni az űrlap egyes részeinek elrejthetőségével is, a kapcsoló beállításával az ott alkalmazott képletek is felfrissülnek. !" GYAKORLAT Legyen számított mező az Esemény űrlap „Dátum” nevű mezője is, amely azt rögzíti, hogy a
felhasználó mikor hozta létre a dokumentumot. Ennél a mezőnél nem szabad engedni a felhasználónak, hogy szerkessze, mivel ez egyfajta ellenőrzést is megvalósít a többi felhasználó felé azzal, hogy mindenki megtudhatja, mikor lett a dokumentum létrehozva. A mező típusa legyen Létrehozáskor számított, mivel itt a létrehozáskor meglévő adatok a fontosak. A mező képlete lehet: @Date(@Now), amely a létrehozás pillanatában érvényes dátumot adja. 91 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS 2.19 ábra A „Dátum” mező értéke Az ellenőrzést továbbfejlesztjük azzal, hogy az Esemény űrlapra egy Rögzítő nevű mezőt is felviszünk, ahová a dokumentumot létrehozó személy nevét írjuk, és ezt sem hagyjuk szerkeszteni. Ez a mező is legyen Létrehozáskor számított, és a képlete pedig (lehetne más is): @Name([CN];@UserName). A @UserName függvény a felhasználó nevét adja vissza hierarchikus formában, a @Name pedig az
általános név részét. 2.20 ábra A „Rögzítő” mező értéke !" GYAKORLAT Még egy kicsit fejleszthetünk az Esemény és a Válasz űrlapunkon: létrehozhatunk olyan mezőket, amelyeknek igazából nincs konkrét beviteli szerepük, viszont egyes mezőket szebben jelenítenek meg. Ezzel a legfontosabb információkat kiemelhetjük a többi közül. Pl az Esemény űrlapon a cég neve – amelyikre az esemény vonatkozik – egy fontos információ. Létrehozhatunk egy mezőt, legyen ez a MegjCég mező, amelyet az űrlap elején elhelyezünk, nagyobb betűvel írunk, esetleg más színnel, és itt megismételjük a cég nevét. Ez a mező a Megjelenítéshez számított típusú, mivel nem ide fogjuk beírni a cég nevét, hanem az eredeti CégNév mezőbe, itt csak megjelenítjük. A képlete legyen „CégNév” 92 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS 2.21 ábra A „MegjCég” mező elhelyezése az Esemény űrlapon Ahhoz, hogy ez a mező mindig a
cég nevét mutassa, és ne csak amikor a felhasználó frissíti a dokumentumot, ahhoz a CégNév mezőben állítsuk be az automatikus frissítést (CégNév mező Mezőtulajdonságok ablaka/Vezérlő lap, Mezők frissítése kulcsszó változásakor). Ilyen megjelenítő mezőkkel egy kicsit áttekinthetőbbé tehetjük az űrlapunkat, főleg akkor, ha sok mezőt kell kitöltenie a felhasználónak. !" GYAKORLAT Hozzunk létre az Esemény űrlapra műveleteket (hasonlókat, mint a Cégkártya űrlapon vannak). Ezzel befejeztük az Esemény űrlapunk létrehozását, mentsük el és próbáljuk ki. Hozzunk létre dokumentumokat, teszteljük az űrlapot minden szempont szerint. 93 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS 2.29 A Válasz űrlap megtervezése A Válasz űrlaphoz szükséges mezők: Leírás Az eredeti esemény típusa A mező neve Esemény A partner cég neve, amelyikhez az esemény (és így a válasz dokumentum) tartozik A válasz típusa (Ez lehet,
pl. azonnal elvégzett tevékenység, feladatkijelölés valaki számára, megjegyzés, stb.) Ha feladatot jelölünk ki, akkor annak (azoknak) a neve(i) kerül(nek) ide, aki(k) számára a feladatot kijelöljük Feladatkijelölés esetén a feladat fontosságát (sürgősségét) is megadhatjuk. Feladatkijelölés esetén a feladat státusza: kész van-e vagy sem, esetleg egyéb állapotokat is felvehetünk. A partner céghez tartozó belső felelőse CégNév Feladatkijelölés esetén a feladat határideje Egy rövid leírás A teljes leírás, dokumentum, akár képekkel, hangokkal, stb. A pontos nap, óra, perc, amikor a dokumentumot létrehozták Annak a neve, aki a dokumentumot felvitte Nap A mező típusa Szöveg, Létrehozáskor számított Szöveg, Létrehozáskor számított Válasz Párbeszéd-panel lista, szerkeszthető Kinek Nevek típus, szerkeszthető, választás a név- és címjegyzékből Fontosság Párbeszéd-panel lista, szerkeszthető Állapot
Párbeszéd-panel lista, szerkeszthető Kapcsolat Nevek típus, szerkeszthető, választás a név- és címjegyzékből Dátum/idő, szerkeszthető, dátum típusú Szöveg, szerkeszthető Rich Text, szerkeszthető Röviden Leírás Dátum Rögzítö Dátum/idő, nem szerkeszthető, dátum típusú Szöveg, nem szerkeszthető Az Esemény, és a CégNév mezőkről még részletesen lesz szó a létrehozásukkor. 94 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS 2.210 A Válasz űrlap létrehozása !" GYAKORLAT Hozzunk létre egy új űrlapot, aminek a neve legyen „Válasz”. Az előző részek és az első fejezet (CD nyilvántartás) alapján hozzunk létre egy új űrlapot, amire vegyük fel a statikus szövegeket, ill. a már ismert típusú mezőket (kulcsszó típusok, szöveg, nevek, Rich Text, Dátum/idő). Ismét hívjuk segítségül a táblázatot, hogy az űrlap áttekinthető legyen. Itt is tegyük egy táblázatba az összetartozó mezőket: mint pl. az
Esemény, CégNév, Válasz, Kinek, Fontosság, Állapot és a Kapcsolat. Azt szeretnénk, hogy ha valahogy így nézne ki az űrlap: 2.22 ábra A Válasz űrlap !" GYAKORLAT Ezen az űrlapon a Dátum és a Rögzítö mezők megegyeznek az Esemény űrlapon lévőkkel, szerepük is azonos. Az űrlapon a CégNév és az Esemény mezőknél figyeljük meg, hogy a típusuk „csak” szöveg, nem kulcsszó. Ezen az űrlapon nem szabad megengedni a 95 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS szerkesztést a felhasználónak, hiszen ezek a szülő dokumentum részeit mutatják (vagyis a válasz során ezeket már csak megjelenítjük). Így ezen mezők Létrehozáskor számított típusúak legyenek, mivel az értékeiket már a Válasz űrlap létrehozásakor tudjuk, és később sem kell megváltoztatni. A képletük pedig a szülő dokumentum megfelelő mezőjének neve (példánkban ugyanaz, mint a saját neve), tehát a CégNév mezőnek a képlete legyen:
„CégNév”, az Esemény mezőnek pedig: „Esemény”. 2.23 ábra A CégNév mező értéke a Válasz űrlapon Az értékek örökléséhez ezen az űrlapon is be kell kapcsolni az űrlap Űrlaptulajdonságok ablakának második lapján (Alapbeállítások) az Értéköröklés a kijelölt dokumentumból opciót (ahogyan azt az öröklést tárgyaló fejezetben már láttuk). A „Válasz” mezőnél (amely párbeszéd-panel lista típusú) a Mezőtulajdonságok ablak második lapján a Kiválasztás részben válasszuk a Választható elemek beírása (soronként egy) opciót, majd írjuk be a lehetséges válaszokat, melyek legyenek a következők: !" Azonnal elvégzett tevékenység !" Feladatkijelölés !" Megjegyzés A „Kinek” mező (amely azt mondja meg, hogy kinek a számára szeretnénk a feladatot kijelölni) és a „Kapcsolat” mező esetében a választás történjen a Név- és Címjegyzékből, az előző két űrlap „Kapcsolat” mezőjéhez
hasonlóan. A „Fontosság” mező értékei is legyenek előre meghatározottak, mint a „Válasz” mezőnél, itt az értékek a következők legyenek: !" Nagyon fontos !" Fontos !" Kevésbé fontos 96 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS Az „Állapot” mező (amely a kijelölt feladat állapotát jelzi) értékei pedig a következők: !" Kész !" Még nincs kész A „Nap”, „Röviden”, ”Leírás” mezők megegyeznek az Esemény űrlap azonos nevű mezőivel. A fenti mezők közül nem mindnek kellene mindig látszódnia, hiszen pl. a feladat állapotát leíró mezőnek („Állapot”) nem sok értelme van egy megjegyzés beírásakor. Ebből következően néha el kellene tudni rejteni a tervünk egy-egy részét. 2.211 Az űrlap egyes tervelemeinek elrejtése Az űrlapunk bizonyos részeit elrejthetjük a felhasználó elől, erre szolgálnak az elrejtési opciók. Ezek segítségével a terv elemeinek bizonyos részeit
elrejtetjük, ill. elő is hozhatjuk Így bizonyos objektumok a háttérben futhatnak, segítve a felhasználót a dokumentum létrehozásában. Az elrejtés segítségével befolyásolhatjuk, hogy a felhasználó mikor mit lásson az űrlapon. Az ehhez szükséges lap (Bekezdés elrejtése - Paragraph Hide When) minden tulajdonság-ablakban megtalálható, pl. az egyszerű szöveg elrejtésére szolgáló Szövegtulajdonság ablak tartalma: 2.24 ábra A bekezdések elrejtését lehetővé tevő ablak Minden tulajdonság-ablakban hasonlóan néz ki ez a lap, ezt használhatjuk az elrejtések szabályozására. 97 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS Megjegyzés Ha egy mezőt vagy szöveget elrejtünk, akkor az egész bekezdést elrejtjük, nem csak a kijelölt részt. A bekezdés itt a sor végéig tart, azaz, ha egyetlen karakter van bejelölve elrejtésre, akkor is az egész bekezdés vele együtt elrejtésre kerül. Ez alól kivételt képez a táblázat celláinak
tartalma: ha azonos sorban lévő cellák közül rejtjük el valamelyiket, a mellette levők meg fognak jelenni. Mikor használjuk az adatbázis tervelemeinek elrejtését? Akkor, ha !" Van két mezőnk, amelyek ugyanazt az értéket jelenítik meg: az egyik, amikor csak olvassuk, a másik, amikor szerkesztjük. !" A szakaszunkat csak bizonyos emberek számára szeretnénk megmutatni. (A szakaszokról a későbbiek során lesz majd szó.) !" Az Akcióinkat más-más környezetben szeretnénk megmutatni. !" Olyan részt szeretnénk beilleszteni, amit nem kell mindenkinek látnia, csak bizonyos embereknek. !" Bizonyos mezőket csak az űrlap többi részén található számított mezők, vagy más dokumentumok, esetleg csak nézetek használnak. #" Tipp Az elrejtett mezők nem láthatók a felhasználó számára, de a képletekben ugyanúgy használhatók, mint a nem elrejtett mezők. Az elrejtés beállítása, pl. egy mező esetében: !" Nyissuk
meg az űrlapot a Designerben. !" Kattintsunk a kiválasztott mezőre, és jelenítsük meg a Mezőtulajdonságok ablakot. !" Kattintsunk a Bekezdés elrejtése lapra. !" Válasszuk ki azt az opciót, amikor az elrejtést szeretnénk, vagy válasszuk ki a Bekezdés elrejtése, ha a képlet igaz (Hide paragraph if formula is true) opciót, és írjunk egy feltételt az ablakba, aminek az eredménye akkor legyen igaz, amikor a paragrafust el kell rejteni. #" Tipp Ha az elrejtéshez képletet írunk, amely valamelyik mező értékétől függ, akkor fontos tudni, hogy a képletet a Notes (és vele együtt a láthatóságot) csak akkor frissíti fel, ha újraszámíttatjuk az űrlapot, vagy ha felfrissítjük. Ehhez 98 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS nyújt segítséget a Mezőtulajdonság ablak második (Vezérlő) lapja, ahol a Mezők frissítése kulcsszó változásakor (Refresh fields on keyword change) opciót kiválasztva a Notes felfrissíti az
űrlap mezőit és a láthatóságokat is minden alkalommal, amikor a felhasználó megváltoztatja a mező tartalmát. Fontos tudni, hogy ez az opció csak akkor választható ki, ha valamelyik kulcsszó típust választjuk a mező típusának (Párbeszédpanel-lista, Jelölőnégyzet, stb.) Ezt az opciót tehát érdemes beállítani annál a mezőnél, amelyik a láthatóságot vezérli. !" GYAKORLAT A válasz űrlapon van néhány mező, amelyeknek nem kell mindig látszania. A „Kinek”, „Fontosság”, „Állapot” mezőknek csak akkor szükséges, hogy látszódjanak, ha a válasz típusa („Válasz” mező) „Feladatkijelölés”, egyéb esetekben, pl. „Megjegyzés”, vagy „Azonnal elvégzett tevékenység”, nem kell, hogy látszódjanak. E cél elérése érdekében tegyük a következőket: !" !" !" !" !" !" !" Nyissuk meg a Válasz űrlapot a Designerben. Jelöljük ki a fent leírt három sort. Nyissuk meg a
Szövegtulajdonságok ablakot. Válasszuk ki a Bekezdés elrejtése lapot (negyedik lap). Jelöljük be a Bekezdés elrejtése, ha a képlet igaz beállítást. Írjuk be az ablakba a Válasz!="Feladatkijelölés" kifejezést. Kattintsunk a zöld pipa jelre, hogy ellenőrizze és elmentse a Notes az elrejtés feltételét. !" Mentsük el az űrlapot. 2.25 ábra Sorok elrejtése képlettel 99 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS Ha ezt megtettük, akkor ezek után, ha a felhasználó nem a Feladatkijelölést választja a „Válasz” mezőben ÉS felfrissíti az éppen készülő dokumentumot (pl. F9), akkor csak a megfelelő mezők fognak látszani Annak elkerülésére, hogy a felhasználónak mindig frissítgetnie kelljen a dokumentumot, a „Válasz” mező Mezőtulajdonságok ablakában a második lapon válasszuk ki a Mezők frissítése kulcsszó változásakor opciót. 2.26 ábra Mezők frissítése a kulcsszó megváltozása után Ezek után a
felhasználónak már nem kell kézzel frissítenie a dokumentum mezőit, hanem, ha másik kulcsszót választ a Válasz dokumentumban, akkor automatikusan csak a megfelelő mezők fognak látszani. !" GYAKORLAT Elrejteni és megjeleníteni nem csak a mezőket és a szöveget lehet, hanem pl. a műveleteket is. Ez már ismert előttünk az első fejezet (CD nyilvántartás) alapján. Hozzunk létre három műveletet a Válasz űrlapra! A Kilép művelet mentés nélkül bezárja a dokumentumot, a Ment és kilép művelet elmenti a dokumentumot, majd bezárja (ezt a kettőt már létrehoztuk a műveletekről szóló részben), a harmadik művelet, a Szerkesztés pedig szerkesztő módba teszi a dokumentumot, amelyet így a felhasználó kezdheti is szerkeszteni. Ennek a műveletnek a képlete: @Command( [EditDocument]; "1" ) 100 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS A másik két művelet mellett hozzuk létre ezt is. Ha viszont szerkesztési módban vagyunk,
akkor nincs értelme a Szerkesztés gombnak, ill., ha olvasási módban vagyunk, akkor nem tudjuk megváltoztatni a dokumentumot, így nincs értelme a Ment és kilép műveletnek. Tehát megfelelő körülmények között az egyes műveleteket el kell rejteni: Olvasáskor így nézzen ki az űrlap bal felső sarka: Szerkesztéskor pedig így: Ehhez segít művelet Művelettulajdonságok ablakának második (Művelet elrejtése - Action Hide When) lapja. Ez ugyanúgy néz ki, mint az eddig megismert ablakok, és itt beállíthatjuk a kívánt elrejtéseket. !" GYAKORLAT !" A Ment és kilép műveletnél beállítjuk, hogy a Megtekintésben olvasva (Previewed for reading) és az Olvasásra nyitotta meg (Opened for reading) esetében rejtse el. !" A Szerkesztés műveletnél pedig a másik kettőt, a Megtekintésben szerkesztve (Previewed for editing) és a Szerkesztésre nyitotta meg opciót (Opened for editing) választjuk ki. A fenti műveleteket nem csak a Válasz,
hanem mind a három űrlapunkra felvihetjük. 2.212 Utolsó ellenőrzések egy űrlap tervezésénél Miután létrehoztunk egy űrlapot, és fel is vittünk minden tervelemet, még egy utolsó ellenőrzést tegyünk meg: nézzük végig az alábbi listát, nehogy valamit lefelejtsünk az űrlapról. 101 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS !" !" !" !" !" !" !" !" !" Egy jól megtervezett és jól kivitelezett űrlapnál az alábbi elemeket kell ellenőrizni: A statikus szövegeket, mint például a fejlécet, mező feliratokat, egyéb az űrlapon szereplő szövegeket létrehoztuk-e. (Még egyszer: figyeljünk, hogy a háttér és a szöveg elütő legyen egymástól, vagyis jól olvasható legyen az űrlap. Ez vonatkozik a mezők olvashatóságára is!) A mezőket, és a hozzájuk tartozó mező feliratokat. A mező neveket mindenhol jól írtuk-e be. A mező típusokat jól határoztuk-e meg. Annak ellenőrzése, hogy
minden mezőre helyesen van-e beállítva az, hogy a felhasználó tölti-e ki, vagy sem. A mezők alapértelmezett értékei be vannak-e írva, már ahol szükséges. A mező segítségek be vannak-e írva, már ha szükségesek (ezekről később lesz szó). A mezők és a szövegek láthatósága jó-e minden esetben. Az ablak címsora mindig a megfelelő szöveget tartalmazza-e (ez az űrlap objektum Ablak címe (Window Title) tulajdonságánál állítható be). 2.27 ábra Az ablak címének beállítása !" Ha szükséges, akkor műveletek létre lettek-e hozva, és a láthatóságuk megfelelő-e. 2.3 Nézetek létrehozása Az előző fejezetekben létrehoztuk az ügyfélkövetés adatbázisunk három űrlapját: a Cégnyilvántartó lapot, az Esemény és a Válasz űrlapokat. Ezek segítségével már létre tudjuk hozni az ügyfélkövetéshez szükséges dokumentumokat, viszont rendezetten még nem tudjuk megjeleníteni őket. Ehhez nézeteket kell létrehoznunk. A
nézetekről már a CD nyilvántartás adatbázis elkészítésekor volt szó: ebben a részben erősen támaszkodunk az ott megszerzett ismeretekre, amit jelentősen ki is bővítünk majd. A nézetek létrehozásához azt kell még felidéznünk, hogy milyen nézeteket szerettünk volna létrehozni a feladat tervezésekor. 1. Cégkártyák nézet: ebben a nézetben csak a cégkártyák szerepeljenek, mintegy felsorolásszerűen, hogy gyorsan át tudjuk tekinteni az összes 102 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS céget, akivel üzleti kapcsolatunk van. Itt, ha szükségünk van egy cég valamely adatára, mindig gyorsan megtalálhatjuk. 2. Összes dokumentum: ebben a nézetben láthatjuk az összes dokumentumunkat, itt az egyes cégkártyáknak az események, eseményeknek pedig az egyes eseményre adott válaszok a „gyermekeik”. Itt minden egyes céggel az összes vele kapcsolatos tevékenységet megtalálhatjuk. Ha tehát kíváncsiak vagyunk, hogy mit történt
egy adott céggel, ebben a nézetben mindent megtudunk róla. Ezt a nézetet fogjuk a legtöbbször használni. 3. Belső kapcsolat: ez a nézet is tartalmazza az összes dokumentumot, de az előzőhöz képest teljesen más logikát követ. A dokumentumok a mi cégünkön belüli emberek szerint lesznek kategorizálva, mégpedig úgy, hogy cégkártyák, események és a nem feladatkijelölést tartalmazó válaszok esetén a céggel kapcsolatot tartó belső emberek szerint, a feladatkijelölést tartalmazó dokumentumoknál pedig a feladatot kapó emberek szerint lesz kategorizálva. Így, ha valaki tudni akarja, hogy számára (vagy valaki más számára) milyen feladatokat jelöltek ki, vagy mely cégek vannak hozzá rendelve, akkor itt meg tudja nézni. 4. Határidők: Ez a nézet a naptárat fogja megjeleníteni, ahol minden feladatkijelölés szerepel, a feladat elvégzési határidejének napján. Itt gyorsan meg lehet nézni, hogy például a mai napra milyen feladatokat kell
befejeznünk. Megjegyzés Természetesen a fenti nézeteken kívül még rengeteg nézetet lehetne létrehozni, de ezek létrehozását már az Olvasóra bízzuk. Sőt! A nézetekről tanultak alapján a felhasználóra is rá lehet bízni, hogy hozzon létre olyan saját nézeteket, amelyek neki a legmegfelelőbbek. Tervezzük meg és hozzuk is létre sorban a fenti nézeteket! 2.31 Cégkártyák nézet Ebben a nézetben a nézetekről eddig tanultakat használjuk. Minek kell szerepelnie ebben a nézetben? Először is, a nézetben csak a Cégkártyák űrlappal létrehozott dokumentumoknak kell szerepelniük, más dokumentumoknak nem. Az oszlopok a következő adatokat jelenítsék meg: !" A cég nevét, !" Címét, !" Telefonszámát, 103 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS !" Kapcsolattartók nevét, !" A forgalmazott, vagy vásárolt termékek, szolgáltatások nevét. Valahogy így kellene kinéznie a nézetünknek: 2.28 ábra Azt
szeretnénk, ha a nézetünk ilyen lenne !" GYAKORLAT Hozzunk létre egy új nézetet, legyen a neve „Cégkártyák”. Adjunk szinonim nevet is a nézetnek, legyen ez is Cégkártyák. A nézet objektum Nézet kijelölése (View selection) tulajdonságánál határozzuk meg, hogy csak a Cégkártya űrlappal létrehozott dokumentumok szerepeljenek ebben a nézetben. Ehhez válasszuk a Könnyű (Easy) választást, majd a Feltétel hozzáadása (Add Condition) gombbal hozzunk létre egy feltételt. Legyen ez a Feltétel (Condition) részben a Használt űrlap szerint (Used Form) kiválasztása után a Cégkártya űrlap választása. Hozzunk létre Cégnév, Termékek, Cím, Telefon, Kapcsolattartók feliratú oszlopokat! A Cégnév oszlopban értelemszerűen a CégNév mezőt jelenítsük meg, a többieknél ugyanígy: a Termékéknél a Termékek, a Címnél a Cím, a Telefonnál pedig a Telefon mezőt. A Kapcsolattartó oszlopban szerepeltessük mindkét kapcsolattartó
nevét, ves??szővel elválasztva: Ehhez egy kis képletet kell írnunk. Ez legyen a következő: Név1+", "+Név2 Rendezzük a Cégnév oszlop szerint a nézetünket. Ehhez a Cégnév oszlop Oszloptulajdonságok ablakában a második (Rendezés - Sorting) lapon a Rendezést (Sort) állítsuk Növekvőre (Ascending). Állítsuk be a nézet egyéb tulajdonságait is: !" Válasszunk valamilyen halvány háttérszínt. 104 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS !" Válasszunk váltakozó színű sormegjelenítést, így jobban követhető, hogy mely információk tartoznak egy sorba. (Nézettulajdonságok Stílus lapja, Váltakozó sorok). !" Engedjük, hogy egy dokumentum megjelenítése több sorból is álljon, mert előfordulhat, hogy egy cég neve, vagy a címe elég hosszú. Ezt a Nézettulajdonságok ablak Stílus lapján, a Sor/dokumentum opciónál állíthatjuk be. Engedjünk legalább kettő, de inkább három sort Azért, hogy ne minden sor
legyen ilyen magas csak amennyire szükséges, kapcsoljuk be a Sorok tartalomhoz igazítása kapcsolót. !" Engedjük, hogy az utolsó sor a képernyő széléig kiérjen, azaz kapcsoljuk be az Utolsó oszlop kiterjesztése ablakszélességig (Extend last column to window width) opciót. !" Állítsunk be igény szerinti rendezést, azaz engedjük a felhasználónak, hogy a dokumentumokat az általa igényelt oszlop szerint rendezze, a megfelelő oszlopra kattintva. Ilyen oszlop lehet például a Termékek, mert elképzelhető, hogy valaki egy meghatározott termékkel kapcsolatos vállalatot keres. Ezt a funkciót a Kapcsolattartóknál is be lehet állítani, hátha valaki egy konkrét kapcsolattartóról nem tudja, hogy melyik vállalathoz tartozik. Ezt az egyes oszlopok második (Rendezés) lapján Az oszlopfejlécre kattintva a rendezés (Click on column header to sort) kapcsoló használatával tehetjük meg. Ezzel létre is hoztuk az Ügyfélnyilvántartás adatbázis
első nézetét. 2.32 Egy segédnézet: a Termékek !" GYAKORLAT A Cégkártya űrlapon a Termékek mező kitöltését is segíthetjük: ehhez létre kell hozni még egy nézetet a fenti négyen kívül. A nézet neve legyen: Termékek, a szinonimája is legyen ugyanez. A nézetben, mint az előbbi nézetben csak a Cégkártya űrlap szerepel. A nézetben csak egyetlen oszlop szerepeljen: Termék névvel, és a Termékek mezőt tartalmazza. Az Oszloptulajdonságok ablak második lapján (Rendezés) kapcsoljuk be a Többszörös értékek külön bejegyzésként (Show multiple values as separate entries) kapcsolót azért, hogy ha a mezőbe több termék nevét is beírták, akkor is külön sorban jelenjenek meg, így helyesen rendezze sorba a Notes az oszlopot. Rendezzük az oszlopot növekvő sorrendbe, kategorizáljuk (hogy egy termék csak egyszer jelenjen meg), majd mentsük el a nézetet. A Termékek mező képlete pedig legyen a következő: @DbColumn( "" :
"NoCache" ; "" : "" ; "Termékek" ; 1 ) 105 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS A Termékek nézetre nincs szüksége a felhasználónak, nem fogja használni. Rejtsük el előle! Ahogyan azt már tudjuk az első fejezetből (CD nyilvántartás), ha a nézet nevét zárójelek közé tesszük, akkor az adatbázis megnyitásakor ez a nézet nem jelenik meg, viszont továbbra is használható a képletekben a nézet – például a fentihez hasonló bővülő listák létrehozásához. Az elrejtés után természetesen az előbbi képletben a „Termékek” szót zárójelek közé kell tenni, vagy a nézetnek adni kell egy „Termékek” nevű szinonim nevet. #" Tipp Még egy ide kapcsolódó ötlet: azért a rejtett nézeteket is elő lehet „varázsolni”: zárjuk be az adatbázist, majd úgy nyissuk meg, hogy a Shift és a Ctrl gombok nyomva tartása mellett kattintsunk kétszer az ikonjára. Ekkor az összes rejtett
nézet megjelenik, amelyek között ugyanúgy lehet váltogatni, mint a nem rejtettek között. Ha pedig az adatbázist bezárjuk, majd újra a megszokott módon nyitjuk meg, akkor megint csak a nem rejtett nézeteket látjuk. 2.33 Összes dokumentum nézet: a válaszdokumentumok megjelenítése Ebben a nézetben az összes dokumentumot szeretnénk megjeleníteni, méghozzá a dokumentum-hierarchiának megfelelően, azaz a dokumentumok között érvényes szülő-gyerek viszonyok bemutatásával. Ennek az lesz az eredménye, hogy a cégkártyák alatt lesznek a hozzájuk kapcsolódó események, az események alatt pedig az egyes eseményekhez kapcsolódó válaszdokumentumok. Mit szeretnénk látni a nézetben az egyes dokumentum-típusokból? !" Ha cégkártya a dokumentum, akkor a nézet mutassa a következőket: !" Cég nevét !" Címét !" Telefonszámát !" Amennyiben a dokumentum esemény, akkor !" Az esemény dátumát !" Típusát !"
Rövid leírását !" Ha válaszdokumentum, és feladatkijelölés, akkor szeretnénk látni: !" A válaszdokumentum típusát (vagyis azt, hogy feladatkijelölés) !" Azt, hogy a feladatot kinek adták 106 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS !" Mi a rövid leírása !" Mi a feladat befejezésének határideje !" A feladat állapotát: készen van-e, vagy sem !" Ha pedig válaszdokumentum, de nem feladatkijelölés, akkor: !" A válaszdokumentum típusát (megjegyzés, azonnal tevékenység, stb.) !" A rövid leírását Valahogy így képzeljük el a nézetet: elvégzett 2.29 ábra Ilyennek szeretnénk az Összes dokumentum nézetünket Mivel ebben a nézetben a válaszdokumentumokról tanultakat fogjuk alkalmazni, ezért a nézet elkészítéséhez egy kicsit fel kell elevenítenünk, amit az Űrlapok létrehozásánál megtanultunk a válasz űrlapokról. Ahhoz, hogy a hierarchia szerint meg tudjuk jeleníteni a
dokumentumokat, három dolgot kell megtenni: Kell olyan űrlapnak lennie, amelynél az űrlap típusa Válasz, ill. Válasz a válaszra. Ez már adott: az Esemény űrlapunk Válasz típusú, a Válasz űrlapunk pedig Válasz a válaszra típusú. (Ezeket az űrlap Űrlaptulajdonságok ablakának első lapján, a Típus pontban állíthatjuk be.) 4. A nézetben be kell kapcsolni a Nézettulajdonságok ablak második (Beállítások - Options) lapján a Válaszdokumentumok megjelenítése hierarchiában kapcsolót. 5. A nézetben kell, hogy legyen egy olyan oszlop, amely csak a válasz-dokumentumokat jeleníti meg (Tehát a mi esetünkben az Esemény és a Válasz űrlapok által készített dokumentumokat.) Ehhez az oszlop Oszloptulajdonságok ablakában az első lapon ki kell választani a Csak a válaszok megjelenítése (Show responses only) opciót. 5. 107 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS Most már tulajdonképpen hozzá is láthatunk elkészíteni a nézetünket.
!" GYAKORLAT Hozzunk létre egy új nézetet a Designer segítségével! Legyen a nézet neve Összes dokumentum. A Nézettulajdonságok ablak második lapján (Beállítások) állítsuk be, hogy mindig ez a nézet nyíljon meg az adatbázis megnyitásakor (Az adatbázis első megnyitásakor ez az alapértelmezés Default when database is first open). Ugyanitt állítsuk be az egyik, az előzőekben ismertetett feltételt: a Válaszdokumentumok megjelenítése hierarchiában opciót. 2.30 ábra Az Összes dokumentum nézet beállításai Ebben az ablakban van még két opció, amelyekről még nem esett szó: !" Megnyitáskor (On Open): Itt beállíthatjuk, hogy a nézet megnyitásakor mely dokumentum legyen kijelölve: !" Ugrás az utoljára megjelenített dokumentumra (Go to last opened document): a legutoljára megnyitott dokumentum legyen kijelölve, !" Ugrás a felső sorra (Go to top row): a legelső sor, !" Ugrás az alsó sorra (Go to bottom row): a
legutolsó sor legyen kijelölve, !" Frissítéskor (On Refresh): erről a 3.2 fejezetben lesz szó !" GYAKORLAT Hozzuk létre az oszlopokat. Csak négy oszlopra lesz szükségünk: !" A csak a válaszokat megjelenítő oszlop 108 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS !" A cégnevet, !" A címet, !" A telefont megjelenítő oszlop. 2.31 ábra Az Összes dokumentum nézet oszlopai !" GYAKORLAT Az első oszlop a kulcsa a nézetnek. Ennél kell beállítani a harmadik feltételt: az Oszloptulajdonságok ablakban az első lapon ki kell választani a Csak a válaszok megjelenítése opciót. Ekkor ez az oszlop nem fog megjelenni a nézetben, csak a tartalma (így a fejlécére sem kell írni semmit). Tulajdonképpen ezzel az oszloppal vezéreljük, hogy mi jelenjen meg a válasz és válasz a válaszra típusú dokumentumokból. Mivel nekünk két űrlapunk is ilyen dokumentumokat fog létrehozni, ezért ennek az oszlopnak a képlete nem
lesz egyszerű. 2.32 ábra Az első oszlop képlete Mit ír le a fenti képlet? Nagyjából azt, amit meghatároztunk az elején. Vagyis: !" Ha az űrlap Válasz és Feladatkijelölés, akkor a „Feladatkijelölés: ” szöveg után azok neve jelenik meg, akik számára a feladat ki lett jelölve, utána pedig a feladat rövid leírása, és a „Határidő: ” szöveg után a feladat elvégzésének határideje. 109 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS !" Ha az űrlap Válasz, de nem Feladatkijelölés, akkor a válasz típusa és a rövid szövege. !" Ha az űrlap nem Válasz (tehát Esemény, mivel ebben az oszlopban csak a válaszdokumentumokat jelenítjük meg), akkor pedig az esemény bekövetkezésének napja, az esemény típusa, ill. a rövid szövege jelenik meg A @If függvény az első paraméter igaz/hamis volta alapján visszaadja a második (igaz eset), vagy a harmadik (hamis eset) paraméterét. A @Text a paraméterként kapott adatot
szöveg típusúvá alakítja. !" GYAKORLAT Az oszlop Oszloptulajdonságok ablakában még érdemes bekapcsolni a Háromszög megjelenítése kiterjeszthető sornál (Show twistie when row is expandable) kapcsolót, mivel csak ekkor fog megjelenni a kis kék háromszög az olyan dokumentumok előtt, amelyekhez gyerekdokumentumok is kapcsolódnak. A második lapon viszont NEM kell bekapcsolni sem a rendezéshez, sem a kategorizáláshoz szükséges kapcsolót, mivel a válaszdokumentumok megjelenítésekor automatikusan megtörténik a kategorizálás (pontosabban a válaszdokumentumok megjelenítése hasonlóan néz ki, mint a kategorizálás), a rendezést pedig létrehozás ideje határozza meg. 2.33 ábra Az Összes dokumentum nézet első oszlopát nem kell rendezni !" GYAKORLAT A többi oszlop már elég egyszerű: csak a megfelelő mezőt kell megjeleníteni: a Cégnév oszlopban a CégNév mezőt, a Cím oszlopban a Cím mezőt, a Telefon oszlopban pedig a Telefon
mezőt. Ezek az oszlopok hatástalanok a válaszdokumentumokra: ha van egy olyan oszlop, amelyben be van kapcsolva a Csak a válaszok megjelenítése kapcsoló, akkor hiába van az oszlop képletébe írt mezőnévvel azonos nevű mezője egy 110 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS válaszdokumentumnak, akkor sem fog itt megjelenni a tartalma. Ez azt jelenti, hogy mindig a speciális oszlopban kell megjeleníteni a válaszdokumentumokból megjeleníteni kívánt adatokat. Több ilyen oszlopot is létre lehet hozni, de csak az első ilyen oszlopot veszi figyelembe a Notes, a többit nem: egyszerűen nem jeleníti meg. !" GYAKORLAT !" Érdemes a CégNév, Cím, Telefon oszlopokat más színnel, mérettel kiemelni, mivel ezek fogják megjeleníteni a fő dokumentumokat, amelyekhez kapcsolódnak majd a válaszdokumentumok. !" Rendezzük a nézetet a Cégnév oszlop szerint növekvő sorrendbe, hogy könnyen lehessen majd keresni a nézetben. !" Ne
felejtsük el beállítani a szokásos paramétereket: nézet színét, a váltakozó sorok színét, a sorméretet stb. !" Még egy feladatunk van, mielőtt a nézet teljesen elkészül: kell egy oszlop, ahol azt jelenítjük meg, hogy ha feladatkijelölés van, akkor a feladat milyen státuszban van (kész-e vagy sem). 2.34 Ikonok megjelenítése egy oszlopban !" GYAKORLAT Azt, hogy egy kijelölt feladat milyen státuszban van, megjeleníthetjük egy egyszerű oszlopban is: hozzunk létre egy oszlopot, például első oszlopnak, majd jelenítsük meg benne az Állapot mező tartalmát, valahogy így: @If(Válasz = "Feladatkijelölés" & Állapot = "Kész" ;”A feladat kész” ;Válasz = "Feladatkijelölés" & Állapot = "Még nincs kész" ; ”A feladat még nincs kész”; "") Ekkor, ha kész a feladat, akkor az „A feladat kész” szöveg, ha nincs kész, akkor pedig a „A feladat még nincs kész”
szöveg szerepel majd az oszlopban a feladat mellett. Valójában viszont nincs szükségünk ezekre a hosszú szövegekre: mi lenne, ha csak egy kis ikon jelenne meg minden feladat mellett: 111 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS !" A !" A jel, ha a feladat kész, jel, ha a feladat nincs még kész. Ezáltal a nézetünk sokkal áttekinthetőbb és szebb lenne, ugyanakkor a feladat állapotát is gyorsan le tudnánk olvasni. Egy oszlop értékeinek ikonként való megjelenítéséhez: !" Létre kell hozni egy olyan oszlopot, amelyben az Oszloptulajdonságok ablak első lapján az Értékek megjelenítése ikonként (Display values as icons) kapcsolót be kell kapcsolni, !" Az oszlop képletének egy számot kell eredményeznie. 2.34 ábra Az értékek megjelenítése ikonként egy oszlopban A Notes az oszlopban a számnak megfelelő ikont fogja megjeleníteni. Azt, hogy melyik számhoz melyik ikon tartozik, azt egy táblázatban lehet megnézni. A
táblázatot a Notes súgójában megtalálhatjuk a „Displaying an icon in a column” című dokumentumban. !" GYAKORLAT Jelen esetünkben a fenti oszlopot kell csak átalakítanunk: kapcsoljuk be az Értékek megjelenítése ikonként kapcsolót, vegyük sokkal kisebbre az oszlop méretét (pl. 1-re), majd írjuk át a képletünket: 2.35 ábra Az ikonok megjelenítésére szolgáló oszlop képlete 112 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS A nézet elmentése után megjelennek a kis ikonok az egyes dokumentumok előtt. 2.35 Belső kapcsolat nézet Az adatbázisban szereplő dokumentumokat ebben a nézetben úgy szeretnénk megmutatni, hogy az ne egy cég keresésekor legyen hasznos, hanem ha valakihez rendelt dokumentum-típust keresünk. Például, ha valaki azt keresi, hogy hozzá (vagy máshoz) van-e el nem végzett feladat rendelve. Esetleg meg akarja tudni, hogy eddig milyen megjegyzéseket írt, vagy hogy mely cégek tartoznak hozzá. Ebből is látható,
hogy megint az összes dokumentumot meg fogjuk jeleníteni, de teljesen más logika szerint, mint az előző (Összes dokumentum) nézetben. Itt a dokumentum-hierarchia alapja nem a szülő-gyerek dokumentum viszony, hanem ebben a nézetben egy-egy ember alá rendelünk dokumentumokat, amelyeket kategóriákba fogunk össze. A kategóriák pedig a következők: !" !" !" !" !" Cégkártyák Események Azonnal elvégzett tevékenységek Megjegyzések Feladatkijelölések Az egyes kategóriákon belül pedig cégek szerint csoportosítjuk a dokumentumokat, például így: 2.36 ábra A Belső kapcsolat nézetünket ilyennek szeretnénk 113 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS !" GYAKORLAT Hozzuk létre az új nézetet, adjuk neki a Belső kapcsolat nevet, a szinonim neve pedig legyen „Kapcsolat”. Mivel eléggé sok kategorizálás lesz a nézetben, érdemes bekapcsolni a Nézettulajdonságok ablak második lapján a Teljes összezárás az
adatbázis első megnyitásakor (Collapse all when database is open) kapcsolót, hogy a nézet megnyitáskor össze legyen zárva. Itt is öt oszlopra lesz szükségünk: !" A Ki oszlopban nevek fognak szerepelni: azoké, akikhez egy-egy cég hozzá van rendelve, létrehoztak egy megjegyzést, feladatot kaptak valakitől stb. !" A Típus oszlopban a dokumentum-kategóriák lesznek (lásd fentebb) !" A Cég oszlopban a vállalat neve szerepel !" A névtelen, negyedik oszlopban lesz a feladat státuszát jelző ikon !" A Röviden oszlopban pedig a megjegyzés, feladat stb. rövid leírása, cégkártya esetén pedig a „---- Cégkártya ----” szöveg 2.37 ábra A Belső kapcsolat nézet oszlopai !" GYAKORLAT Hozzuk létre az oszlopokat! Az első három oszlopot kategorizáljuk és rendezzük növekvő sorrendbe. A negyedik oszlopnál használjuk a 234 fejezetben megtanultakat. Mi legyen az egyes oszlopok képlete? Nem túl egyszerűek, mivel űrlapok
szerint mindig szét kell választani, hogy mit akarunk megjeleníteni. Ezen kívül a Válasz űrlap esetén még tovább kell szétválasztani a dokumentumokat. Lássuk a képleteket! A „Ki” oszlop képlete: 114 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS 2.38 ábra A Ki oszlop képlet !" GYAKORLAT A Típus oszlop képlete viszonylag egyszerű: @If(Form="Cégkártya" | Form="Esemény";Form; Válasz) A Cégnév oszlopba a szokásos módon a CégNév mező értéke kerül. A Röviden oszlop képlete sem túl bonyolult: @If(Form="Cégkártya";"------ Cégnyilvántartó lap ------";Röviden) Miután az oszlopok elkészültek, ne felejtsük el ennél a nézetnél is beállítani a nézet egyéb paramétereit: színek, sorméret stb. 2.36 Határidők nézet Ez a nézet csak a feladatkijelöléseket tartalmazza majd. Itt egy naptárban szeretnénk megjeleníteni, hogy melyik feladat határideje mikor jár le. Ez azt jelenti, hogy
egy olyan nézetet szeretnénk létrehozni, ahol a dokumentumok nem a szokásos módon vannak megjelenítve, hanem egy naptárban (ahhoz hasonlóban, mint amilyen a levelezési adatbázisunkban is található). 2.39 ábra A Határidők nézet 115 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS !" GYAKORLAT Hozzunk létre egy új nézetet! Ebben az új nézetben az Nézettulajdonságok ablak első lapján (Nézet adatai View Info) a Stílust (Style) állítsuk Naptárra (Calendar). Ekkor a következő felirat jelenik meg: A Naptárstílus nézet megváltoztatása a nézet más attribútumainak megváltozását is eredményezi. Folytatja? (Changing to a Calendar style view may change other attributes of this view. Continue?) Mivel Naptár stílusú nézetet szeretnénk, ezért kattintsunk az Igen gombra. 2.40 ábra Naptár stílusú nézet létrehozása Az ilyen, Naptár típusú nézeteknek mások a paraméterei is: ha megfigyeljük, a Nézettulajdonság ablak két újabb
lappal bővült (Betűtípus - Font és Dátumés időformátum - Date and Time format). Nem csak a paraméterek változnak: nem lehet a nézet akármilyen ahhoz, hogy el tudjuk menteni, és helyesen jelenjenek meg a naptárban az egyes bejegyzések. Ahhoz, hogy a nézetet el tudjuk menteni, lennie kell legalább két oszlopnak a nézetben (ezeken kívül lehet még más is, de ez a minimum): !" Az első oszlopban egy Dátum/idő (Date/Time) típusú értéknek kell lennie. Ez fogja megadni, hogy a bejegyzés melyik nap melyik órájához fog kerülni. Ezt nagyon szigorúan veszi a Notes, mert teljes Dátum/idő típust kell tartalmazzon, azaz szerepelnie kell benne az évnek, a hónapnak, a napnak, az órának és a percnek is. Ha nincs óra és perc megadva, akkor sem fogadja el, vagyis, ha ezek az adatok nem állnak rendelkezésre (mert pl. a bejegyzés a napra vonatkozik), akkor is hozzá kell illeszteni a dátumhoz legalább azt, hogy 0 óra és 00 perc. Mivel a
feladatkijelöléseknél a határidőben csak a napot jelöltük meg, ezért a mi esetünkben is hozzá kell „varázsolni” a dátumhoz a 0 óra 00 percet. A megvalósításnál meg fogjuk nézni pontosan, 116 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS hogy hogyan is kell ezt megtenni. Ennek az oszlopnak ráadásul rendezve kell lennie, méghozzá növekvő sorrendben. !" A második kötelező oszlop a bejegyzés hossza percben, vagyis, hogy a bejegyzés mekkora időintervallumot foglal el. Ha erre nincs szükség, akkor is ki kell tölteni, legalább egy „0”-nak szerepelnie kell ebben az oszlopban. Ezt is látni fogjuk a nézet megvalósításakor. Megjegyzés A Designerben a nézet mindig a hagyományos módon jelenik meg, hiába frissítjük fel, akkor is csak az oszlopokat fogjuk látni, a naptárat nem. 2.41 ábra A Határidők nézet oszlopai Ahhoz, hogy lássuk a naptárat, sajnos, mindig a futtató kliensben kell megnézni, hogyan is néz ki a nézetünk. Azt
természetesen itt is lehet látni, hogy egy-egy bejegyzésből mi fog megjelenni, hiszen ennek a hagyományos nézetnek egy-egy sora fog látszani majd egy-egy bejegyzésként. !" GYAKORLAT Kezdjük el létrehozni a nézetünket! A nézet neve legyen Határidők, a szinonima is lehet ugyanez. A nézetben csak a feladatkijelöléseket jelenítsük meg, így egy képletet kell alkalmazni a nézetben szereplő dokumentum kiválasztására. Legyen ez a következő: SELECT Form = "Válasz" & Válasz = "Feladatkijelölés" Hozzuk létre az oszlopokat. Csak három oszlopra lesz szükségünk: !" Határidő: ide kerül a feladat határideje, kiegészítve a 0 óra és 00 perccel. 117 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS !" Időtartam: itt egy „0” lesz. !" Leírás: itt lesznek az információk, amelyeket a feladatról szükséges megjeleníteni Megjegyzés Az oszlopok nevei jelen esetben lényegtelenek: a Naptár stílusú nézet
sajátosságaiból eredően az oszlopok nevei nem fognak a nézetben sehol sem megjelenni. !" GYAKORLAT A Határidő oszlop képlete tulajdonképpen egyszerű lenne: a Nap nevű mezőt kellene benne megjeleníteni, viszont, mivel a Nap mezőben csak dátum szerepel, idő része nincs, azt hozzá kell szerkeszteni: 2.42 ábra A Határidő Oszlop képlete A @Time a 0 óra, 0 perc, 0 másodperc időpontot állítja elő, a @Text szöveggé konvertálja az időt, a @TextToTime pedig visszaalakítja idő típusúvá. Rendezzük növekvő sorrendbe az oszlopot, hogy minden feltételt teljesítsünk, ami az oszlop számára elő van írva. !" GYAKORLAT Az Időtartam oszlop viszont igen egyszerű: mivel nincs szükségünk arra, hogy időintervallumot is megadjunk, ezért itt a képletben mindössze egy „0” karakter áll (idézőjelek nélkül, mivel itt számot kell megadni). !" GYAKORLAT A harmadik oszlopban fogjuk megjeleníteni magát a feladatot. Ide a feladat
rövid leírása kerül, így a képlet elég egyszerű lesz, csak a Röviden mezőt kell megjeleníteni: "Feladat: "+Röviden 118 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS Megjegyzés Érdemes megfigyelni, hogy az egyes Oszloptulajdonságok ablakokban nem lehet a felhasználónak engedélyezni az oszlopok szélességének megváltoztatását (Resizable), így jól gondoljuk meg, milyen széles is legyen egy oszlop. Ezen kívül az ilyen nézetekben nem lehet kategorizálni sem: ezeket vegyük figyelembe egy Naptár stílusú nézet tervezésekor. A nézet létrehozásával tulajdonképpen készen is vagyunk, de azért lehet még egy kicsit finomítani rajta. #" Tipp Az első két oszlop megjelenítése valójában felesleges: !" A Határidő oszlop tartalma úgy is kiderül a nézetben, hiszen a bejegyzés azon a napon lesz, amelyiket ez az oszlop tartalmaz !" Az Időtartam oszlop tartalma mindig „0”, így semmilyen információt nem ad a
felhasználó számára Rejtsük el ezt a két oszlopot! Az egyes oszlopok Oszloptulajdonságok ablakának első lapján található egy kapcsoló: Oszlop elrejtése (Hide column), ha ezt bekapcsoljuk, az oszlop nem jelenik meg a nézetben. Kapcsoljuk be a fenti két oszlopnál! 2.43 ábra Az Időtartam oszlop elrejtése Az oszlop a Designerben természetesen megjelenik, viszont a felhasználó nem fogja látni. Az oszlopok elrejtését máskor is lehet alkalmazni: jellemző példa, amikor egy hagyományos nézetben megjelenítünk egy időpontot az oszlopban, rendezzük az oszlopot, viszont maga az oszlop tartalma nem érdekes, csak a rendezés. Egy másik tipikus eset, amikor egy nézet több 119 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS oszlopát is rendezzük. Ekkor, mint tudjuk, mindig az első oszlop a fő rendezés, a következő oszlop rendezése csak az első oszlop azonos elemei között érvényes, és így tovább a többi rendezett oszlopnál. Előfordulhat
viszont, hogy az első oszlopot nem az első oszlopban szeretnénk megjeleníteni, hanem valamelyik másik oszlop után: ez elég nehéz, hiszen ekkor a rendezésünk összeomlik. A megoldás: a kritikus oszlopot kétszer kell megjeleníteni, egyszer az első oszlopban, utána – rendezés nélkül – a megfelelő helyen. Az első oszlopot pedig el kell rejteni a felhasználó elől Így a rendezés is tökéletes lesz, és az oszlopok is ott fognak megjelenni, ahol mi szeretnénk. #" Tipp Az egyes kiosztott feladatokról nem sokat árultunk el a fenti nézetben. Lehetne még több oszlopot is felvenni, és még több adatot megjeleníteni az egyes bejegyzésekről. Ilyen adat lehetne még azok neve, akik a feladatot megkapták, ill. a cég neve, ahová a feladat tartozik, sőt a feladat állapota is érdekes lehet. (A feladat állapotát nem biztos, hogy meg kell jeleníteni: lehetne szűkíteni a megjelenítendő dokumentumokat, lehet, hogy csak azokat kellene mutatni a
nézetben, amelyek még nincsenek készek, most azonban az összes feladatot meg fogjuk mutatni.) Az itt felsorolt adatokhoz létre lehetne hozni még három oszlopot: a neveknek, a cégneveknek és az állapotoknak. Az állapot megjelenítésével nincs is sok baj, hiszen csak egy karakter széles az oszlop, amit létre kell hozni, viszont a többiek elég hosszúak is lehetnek. Ha megnézünk egy Naptár stílusú nézetet, akkor láthatjuk, hogy például a 14 vagy 31 napos nézetben elég keskeny szöveget tudunk csak megjeleníteni. Ez gond: jó lenne egymás alá írni az adatokat, így talán több adat is látható lenne egyszerre. Erre is van megoldás. (A állapotnak nyugodtan hozzunk létre egy új oszlopot, a megtanult módon – a szélesség megnövekedése ezzel az egy karakterrel már nem lényeges.) !" GYAKORLAT A Leírás oszlopunkat viszont alakítsuk át: !" Az Oszloptulajdonságok ablak első lapján az Értékek közti elválasztó (MultiValue
Separator) opciónál válasszuk az Új sort (New line) !" Írjuk új képletet a képletablakba: 120 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS 2.44 ábra A rövid leírás oszlop megváltoztatása Az első három sorban három ideiglenes változót definiálunk, a képlet utolsó sora a kulcsa az egésznek: itt a három változót a kettőspont segítségével szöveglistává alakítjuk. Így három eleme lesz a listának, amelyet az Értékek közti elválasztó beállítása miatt három külön sorban fog megjeleníteni a Notes. A @Trim függvény a felesleges szóközöket szedi le az egyes listaelemekről, nincs különösebb jelentősége. Az így elkészített nézetünk már egészen használható lett. Van azért még néhány paraméter, amelyet a Naptár stílusú nézeteknél be lehet még állítani. Lássuk ezeket sorban: A Nézettulajdonságok ablak negyedik lapján (Betűtípus/Font) a nézet különböző szövegeinek betűtípusait és méreteit lehet
megadni (2.45 ábra) !" Időszelet/csoportosítás (Time slots/Grouping): mint tudjuk, a Naptár nézetben meg lehet jeleníteni egy naphoz az órákat is, így részekre osztva egy napot. Ezen órák feliratát lehet itt beállítani. !" Fejléc (Header): a naptár legtetején mindig megjelenik, hogy melyik hónapban lévő nap van kiválasztva, itt ennek a szövegnek a stílusát lehet beállítani. !" Nap és dátum (Day and Date): az egyes napoknál megjelenik a hónap és nap, ill. a nap neve, ezek stílusát itt lehet megadni 121 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS 2.45 ábra A naptár stílusú nézet betűtípusainak beállítása A Nézettulajdonságok ablak ötödik lapján (Dátum- és időformátum - Time and Date Format) a nézet egyéb megjelenési formáit lehet beállítani: 2.46 ábra A naptár stílusú nézet Nézettulajdonságok ablakának ötödik lapja !" Időbeosztás engedélyezése (Enable Time Slots): ezzel a kapcsolóval meg
lehet engedni a felhasználónak, hogy be- ill. kikapcsolja a napon belüli időbeosztást. !" Napi bittérképek megjelenítése (Show Daily Bitmaps): itt be lehet állítani, hogy a felhasználó az egyes napokra külön-külön is be ill. ki tudja kapcsolni az időbeosztást. !" Kezdés, Befejezés, Időtartam (Start Time, End Time, Duration) segítségével meghatározhatjuk, hogy az időbeosztás mikortól kezdődjön, meddig tartson és mennyi időnként legyen egy-egy beosztás. !" Kezdő formátum (Initial format): hány napot jelenítsen meg egyszerre a nézet, amikor először megnyitják. !" Megengedett formátumok (Allowed formats): hány napos megjelenítési formákat engedélyezünk a felhasználónak. 122 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS 2.37 Gyűjtők A gyűjtők (folder) tulajdonképpen nézetek, azzal a speciális tulajdonsággal, hogy a felhasználó betehet egy-egy dokumentumot a gyűjtőbe, ill. ki is vehet onnan egy vagy több
dokumentumot. A legjellemzőbb példa a kedvenc dokumentumok kigyűjtése egy gyűjtőbe. Hozzunk létre mi is egy ilyen gyűjtőt az Ügyfélkövetés adatbázisunkba. A gyűjtő létrehozásához válasszuk ki a Designerben az adatbázis részei közül Gyűjtőket (Folders), majd az Új gyűjtő (New Folder) gombbal hozzunk létre egy újat. Ekkor a következő ablakot láthatjuk: 2.47 ábra Gyűjtő létrehozása !" Gyűjtő neve (Folder name): ide írjuk be a gyűjtő nevét, jelen esetünkben legyen ez a Kedvencek. !" Gyűjtő típusa (Folder Type): megegyezik a nézetekről megtanultakkal (Nézet típusa). !" Másolás innen (Copy from): akárcsak a nézeteknél, megadhatjuk, hogy melyik nézet alapján jöjjön létre. !" Egyéni (Customize) gomb: rögtön a tervezéséhez ugorhatunk. Ha létrehoztunk egy gyűjtőt, és megnyitjuk a Designerben, akkor láthatjuk, hogy ugyanolyan módon lehet szabályozni, hogy egy oszlopban mi jelenjen meg, mint ahogyan azt
a nézeteknél láttuk. Itt természetesen nincs olyan rész, 123 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS ami meghatározná, hogy mely dokumentumokat mutassa a gyűjtő, hiszen itt a gyűjtőbe a felhasználó teszi be, ill. veszi ki a dokumentumokat Ha egy ilyen gyűjtőt létrehoztunk, akkor a felhasználó az ismert módon (pl. a levelezés adatbázisból ismert módon) el tudja helyezni a kedvenc dokumentumait ebben a gyűjtőben. #" Tipp A gyűjtőket nem csak így lehet használni: például egy, a felhasználó által kezdeményezett keresés eredményét is beletehetjük egy gyűjtőbe, így adva vissza a keresett dokumentumok listáját. 2.4 Ügynökök Ha az ügynököket (Agent) hasonlítani szeretnénk valamihez, akkor leginkább a makrókra hasonlítanak. Az ügynökök tulajdonképpen kis programok, amelyek az adatbázis dokumentumain, vagy azok egy részhalmazán futnak, és valamilyen tevékenységet hajtanak végre. Az ügynököket meg lehet hívni
az adatbázis szinte bármely területéről: egy gomb megnyomására elindíthatjuk, vagy egy művelet is futtathatja, amely lehet az űrlapon vagy nézeten is. Futtatható az űrlap vagy az adatbázis bármelyik eseményéből, ill. futhat ütemezetten is, bizonyos időközönként, akár anélkül is, hogy a Notes kliens el lenne indítva (vagyis a szerver is futtathat ügynököket). Az ügynökök segítségével végrehajthatunk kereséseket, archiválhatunk dokumentumokat, levelet küldhetünk, vagy a gyűjtőkben rendezhetjük dokumentumainkat. Megváltoztathatunk információkat a dokumentumainkban, sőt futtathatunk egy másik ügynököt is. Az ügynökök elindulhatnak egy konkrét időpontban, vagy egy esemény bekövetkeztekor: !" !" !" !" Elindulhatnak óránként, naponta, hetente, havonta Ha egy új levél érkezik Amikor megváltozik egy dokumentum Vagy bemásolnak egy dokumentumot az adatbázisba A felhasználó manuálisan is futtathat
ügynököket. Az ügynökök felhasználására egy tipikus példa: adott egy adatbázis, amelyben szerződéseket tartunk nyilván. Egy ilyen dokumentumnak természetesen van egy életútja, például valaki létrehozza, többször módosítja, valakik jóváhagyják stb. Tegyük fel, hogy a szerződés nem azonnal lép életbe, 124 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS csak egy bizonyos napon, amely dátum természetesen szerepel a szerződésen. Ekkor a felhasználó elkészíti, jóváhagyatja, stb. a dokumentumot, majd kitölti azt a mezőt, amely megmondja, mikor lép életbe a szerződés. Viszont a szerződés továbbra sincs érvényben, azaz pl. az érvényes szerződések nézetben nem szerepel. Ha írunk egy ügynököt, amely, mondjuk minden hajnalban lefut, minden szerződést megvizsgál, és ha a szerződés érvénybelépési dátuma megegyezik az aznapi dátummal, akkor érvényesíti a megfelelő dokumentumot. A szerződés pedig ettől kezdve szerepelni
fog az érvényes szerződéseket tartalmazó nézetben. Sőt, tovább is lehet bonyolítani: ha pl. a szerződés határozott időre szól, és elérkezett a szerződés lejártát jelentő időpont, akkor érvénytelenítheti a szerződést, majd archiválhatja. Ezeken túlmenően pedig minden, a szerződésekkel kapcsolatos műveletről levélben tájékoztathatja az érintett személyeket. Egy ügynök létrehozásához: !" A Designerben válasszuk az adatbázis tervelemei közül az Ügynököket (Agents) !" Az Új ügynök (New Agent) gomb segítségével hozzunk létre egy ügynököt !" A Névhez (Name) írjuk be az ügynök nevét 2.48 ábra Ügynök létrehozása Ha kiválasztjuk az Osztott ügynök (Shared Agent) kapcsolót, akkor egy osztott ügynököt hozhatunk létre, ha nem, akkor pedig egy személyes ügynököt: !" Osztott ügynök: mindenki számára elérhető, használható, az adatbázis tervezője hozza őket létre. !" Személyes
ügynök (Personal agent): a felhasználó saját maga számára hozza létre, és csak ő láthatja. 125 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS Megjegyzés Azt, hogy osztott-e, vagy sem egy ügynök, az ügynök létrehozásakor még a mentés előtt el kell dönteni, mert az ügynök elmentése után már nincs lehetőség azon változtatni, hogy az ügynök osztott legyen-e vagy sem. Az ügynök létrehozása után be kell állítani, hogy az ügynök mikor fusson le, mely dokumentumokon, és milyen feladatot hajtson végre. Az ügynök futása (When should this agent run?) résznél az lehet beállítani, hogy az ügynök mikor fusson: !" Kézzel, a Műveletek menüből (Manually from Actions menu): a Műveletek menüből lehessen csak lefuttatni, így ne kötődjön sem időponthoz, sem eseményhez. Ha ezt választjuk, attól még természetesen a megfelelő @Command parancs segítségével le tudjuk futtatni valamilyen (pl. űrlap) esemény kapcsán, vagy egy gomb
megnyomására. Az ilyen típusú ügynökök @Command parancsot is tartalmazhatnak. !" Kézzel, az Ügynök listából (Manually from agent list): az ügynökök listájából legyen csak futtatható. !" Új üzenet érkezése előtt (Before new mail arrives): mindig lefusson, mielőtt egy új levél megérkezik. !" Új üzenet érkezése után (After new mail has arrived): mindig lefusson, miután egy új levél megérkezett. !" Dokumentumok készítésekor és módosításakor (If documents have been created or modified): akkor indul el, ha új dokumentum lett létrehozva, vagy a régebbi módosítva lett. !" Dokumentumok beillesztésekor (If documents have been pasted): egy dokumentum bemásolása után induljon el. !" Ütemezés szerint naponta többször (On schedule more then once a day): ütemezetten, naponta többször is fusson. Az ütemezés beállításához az Ütemezés (Schedule) gombot kell megnyomni, és beállítani a megfelelő
paramétereket. Ezekről a későbbiek során lesz majd szó !" Naponta, hetente, havonta (On schedule daily, weekly, monthly): naponta, hetente, havonta a meghatározott időpontban indul el. !" Sohasem (On schedule never): az ügynök soha nem fog futni. Ez akkor kellhet, ha ideiglenesen nem akarjuk futtatni az ügynököt. A Működés a következő dokumentumok esetében (Which document(s) should it act on?) részben azt határozhatjuk meg, hogy mely dokumentumokon fusson az ügynök. 126 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS !" Ha a levélérkezéssel kapcsolatos eseményt választottunk az előbbiekben, akkor itt nem lehet választani, mindenképpen az új levéllel fog az ügynök valamilyen tevékenységet elvégezni. !" Ha dokumentum létrehozásával, bemásolásával, módosításával kapcsolatos eseményt választottunk, akkor a meghatározott dokumentummal fog dolgozni az ügynök. !" Ha valamelyik ütemezett futtatást választottuk,
akkor itt csak két lehetőségünk van: vagy az összes dokumentumon fog az ügynök futni (All documents in database), vagy csak az utolsó futtatás óta újonnan létrejötteken, ill. a módosítottakon (All new and modified documents in database). !" Ha a kézi futtatást választottuk, akkor viszont az előző pontban említett kettőn kívül még választhatunk néhány lehetőség között: !" Minden olvasatlan dokumentum a nézetben (All unread documents in view): az összes olvasatlan dokumentumon fut, amelyek szerepelnek abban a nézetben, amelyikből futtatjuk az ügynököt. !" Nézet minden dokumentuma (All documents in view): a nézet összes dokumentumán. !" Kijelölt dokumentumok (Selected documents): csak a kiválasztott dokumentumokon. !" Egyszeri futtatás (Run once): Csak egyszer fut le az ügynök. Erről lásd a következő megjegyzést. Az ügynök törzse lehet: !" !" !" !" !" Képlet Egyszerű művelet
LotusScript JavaScript Lehet imported Java, azaz kész JavaScripteket is be lehet tenni az ügynök törzsébe Megjegyzés A képletek és az egyszerű műveletek minden dokumentumon lefutnak egyesével, amire az ügynök hatása kiterjed (vagyis amit az előbbiekben beállítottunk). A LotusScript és a JavaScript viszont csak egyszer fut le, és itt nekünk kell úgy megírni a kis programot, hogy az mindegyik dokumentumon lefusson. Ha az Egyszeri futtatást választjuk és képlettel határozzuk meg az 127 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS ügynök tevékenységét, akkor csak egyszer lesz végrehajtva, nem minden dokumentumon külön-külön. Ha ütemezetten akarjuk futtatni az ügynököt, akkor az Ütemezés gombbal lehet beállítani a további paramétereket (lásd 2.49 ábra) Itt mindig a kiválasztott ütemezésnek megfelelő paramétereket lehet beállítani, azaz pl. a havonkénti futtatás esetén azt, hogy a hónap melyik napján fusson az ügynök, a
naponta többszöri futtatáskor pedig, hogy mennyi időnként fusson le. Minden időzített futtatás esetén be lehet állítani a következőket: !" Ezen nap előtt nem indul (Don’t start until this date): csak a megadott dátumkor kezd el futni az ügynök. !" Ezen napon megáll (Stop running on this date): e naptól kezdve nem fut az ügynök. !" Hétvégeken nem fut (Don’t run on weekend): csak hétköznap fut. 2.49 ábra Ügynök ütemezése Az ütemezett ügynököknél lehetőség van arra, hogy az ügynök ne a kliensen fusson, hanem valamelyik szerver futtassa. Ez azért hasznos, mivel a szerver (általában) folyamatosan fut, míg a kliens csak ha éppen a Notes-t használja a felhasználó. Ráadásul, ha a kliensen fut az ügynök, akkor a felhasználónak meg kell várnia, hogy az ügynök befejezze a futását, vagyis addig nem tudja a Notes kliensét használni. Sok dokumentum esetén egy ügynök akár percekig, vagy órákig is futhat: ezt nem
túl praktikus kivárni. 128 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS Erre jelent megoldást, ha egy szerverre bízzuk az ügynök futtatását. Ezt szintén az ütemezésnél lehet beállítani, méghozzá a Run on részben. Itt a következők között választhatunk: !" Helyi (Local): ekkor a kliensen fog futni az ügynök. !" -Bármely szerver- (-Any Server-): bármelyik szerver fut, amelyiken az ügynök elérhető (vagyis az ügynököt tartalmazó adatbázis megtalálható). Ezzel óvatosan bánjunk: ha több szerven is fut az ügynök, és meg is változtat dokumentumokat, és ezek az adatbázisok egymással replikálódnak, akkor ez a beállítás könnyen okozhat replikációs konfliktust. Jobb megoldás, ha egy konkrét szervert beállítunk, majd a többi szerveren a replikációt úgy állítjuk be, hogy csak az ügynök futása után történjen meg. !" Szerver neve: itt több szerver neve is lehet, ezek közül amelyiket kiválasztjuk, azon fog
futni az ügynök. !" Egyéb (Other): itt az elérhető szerverek között választhatunk. A Válassza ki, ha az ügynök engedélyezett (Choose when agent is enabled) opció kiválasztása után a felhasználótól meg fogja kérdezni, hogy melyik szerveren fusson, de a kérdést csak akkor teszi fel, ha az ügynök futásra kész. Az ütemezett ügynököt aktiválni az Ügynökök nézetben lehet (Nézet/ügynökök - View/Agents), az ügynök neve előtti kis négyzet kiválasztásával. 2.50 ábra Az ügynökök Megjegyzés Fontos tudni, hogy ha egy ütemezett ügynököt egy szerveren akarunk futtatni, akkor ahhoz bizonyos jogokkal is kell rendelkeznünk. Ahhoz, hogy egy szerveren futtathassunk ügynököt, ahhoz a Címjegyzékben a szerver szerverdokumentumában, a Biztonság (Security) lapon, az Ügynökkorlátozások (Agent restrictions) részben megfelelő jogokkal kell rendelkeznünk: 129 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS 2.51 ábra Jogosultságok
beállítása az ügynökök futtatásához !" Saját ügynökök futtatása (Run personal agents): ez a személyes ügynökök szerveren való futtatását szabályozza: ha üresen hagyjuk, akkor mindenki futtathat az adott szerveren személyes ügynököt (persze csak a sajátját), ha valakiket beírunk, akkor csak azok futtathatnak. !" Korlátozott LotusScript/Java ügynökök futtatása (Run restricted LotusScript/Java agents): ez az osztott ügynökökre vonatkozik, akinek a neve itt szerepel, az korlátozott ügynököket futtathat a szerveren. Ha üresen hagyjuk, akkor senki sem futtathat. A korlátozott ügynök azt jelenti, hogy az ügynök nem használhat olyan parancsot, amely hozzáfér a fájlrendszerhez, vagy a rendszerbeállításokhoz. Az ilyen, nem megengedett parancsok listáját a Notes Designer súgójában találhatjuk meg. !" Nem korlátozott LotusScript/Java ügynökök futtatása (Run unrestricted LotusScript/Java agents): korlátozás nélküli
osztott ügynököket futtathatnak azok, akik ide fel vannak sorolva. Itt is az az alapértelmezés, hogy ha senki sincs beírva, akkor senki sem futtathat ügynököt. Ahhoz tehát, hogy egy szerveren futtathassuk az osztott ügynökünket, legalább a Run restricted LotusScript/Java agents pontban szerepelnie kell a nevünknek, vagy egy olyan csoport nevének, amelyben szerepelünk. Ha személyes ügynököt akarunk futtatni, akkor pedig a Run personal agents résznek kell üresnek lennie, vagy pedig a nevünknek is szerepelnie kell. Megjegyzés A korlátozás nélküli ügynökök futtatását csak nagyon kevés, megbízható felhasználó számára engedélyezzük, mivel súlyosan veszélyeztethetik a rendszerünk épségét. #" Tipp Érdemes a fenti szerverdokumentumot úgy kitölteni, hogy az egyes pontokba csak egy-egy csoport nevét írjuk, majd az egyes csoportokba tartozó emberek 130 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS névsorát változtatjuk, amikor
változnak a jogosultságok: így egy kicsit áttekinthetőbb marad a szerverdokumentum. Megjegyzés Az ütemezett ügynökök szerveren való futtatásakor vegyük figyelembe, hogy bár az ügynök futásához az kell, hogy a létrehozójának legyenek megfelelő jogai a futtatásra, mégis a futtatáskor a szerver a szerver ID-vel futtatja őket. Tehát ahhoz, hogy az ügynök meg tudjon változtatni dokumentumokat, az adatbázisra, ill. az egyes dokumentumokra a szervernek biztosítani kell az írási, olvasási stb. jogot #" Tipp Érdemes az ütemezett ügynököt először manuális ügynökként létrehozni, így „kézzel” tesztelni (amennyiben lehetséges), hogy jól működik-e, mivel a szerveren elég nehezen lehet nyomon követni, hogy miért nem futott le helyesen az ügynök. Az ütemezést pedig csak akkor állítsuk be, amikor már teljesen jól működik az ügynökünk. !" GYAKORLAT Az Ügyfélkövetés adatbázisunkban hozzunk létre egy olyan
ügynököt, amely minden hajnalban lefut, megvizsgálja az összes feladat állapotát és határidejét, és ha a határidő lejárt, a feladat pedig nincs készen, akkor a feladathoz hozzárendelt személyeknek küld egy levelet, amelyben felhívja a figyelmüket a mulasztásukra. Ehhez hozzunk létre egy új ügynököt. Legyen az ügynök neve: Ellenőrzés, és legyen osztott ügynök, valamint fusson az adatbázis összes dokumentumán. 2.52 ábra Az Ellenőrzés ügynök létrehozása Képlettel fogjuk megoldani a fenti feladatot, ez a képlet a következő: 131 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS 2.53 ábra Az Ellenőrzés ügynök Az első sorra külön figyeljünk: ezzel rögtön kiválasztjuk, hogy nem az adatbázis ös??szes dokumentumán akarjuk lefuttatni az ügynököt, hanem csak az első sorban lévő feltételt teljesítőkön, hiába azt adtuk meg, hogy mindegyiken fusson. Ennek – a SELECT kulcsszót tartalmazó – sornak az ügynök képletében
az első sornak kell lennie. A képlet további részeiről a 3.110 fejezetben olvashatunk Az ott leírtakhoz képest az egyetlen változás, hogy a levélküldés feltétele az, hogy a határidőt tartalmazó mező (Nap) tartalmát hasonlítjuk össze a @Today függvény eredményével, amely pedig a mai nap dátumát adja vissza. Az ügynököt először csak kézzel próbáljuk lefuttatni, és ha jól működik, akkor állítsuk be, hogy minden nap fusson le, mondjuk hajnali 3-kor. Ehhez válasszunk szervert is, amin majd futni fog. A legvégén pedig az ügynökök listájában aktiváljuk az ügynököt. Ne felejtsük el, hogy ellenőrizzük, van-e az adott szerveren jogosultságunk az ügynök futtatására. 2.5 Navigátorok A navigátorok (Navigator) egy grafikus felületet biztosítanak ahhoz, hogy a felhasználó az adatbázis különböző részei között eligazodjon, közöttük navigáljon. A navigátor tulajdonképpen egy vizuális index az adatbázis részei között,
egy grafika, aminek az egyes részeit be lehet programozni arra, hogy a felhasználót az adatbázis bizonyos részére vezesse. A navigátorban kétféle objektum lehet: !" Olyan objektum, amit egy másik program segítségével hoztunk létre, és ide beillesztettük (tipikusan egy kép), !" Olyan objektum, amit itt hoztunk létre a rajzoló eszközeinkkel. 132 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS A navigátor műveletek olyan műveletek, amelyek a navigátor egyes objektumaira kattintva hajtódnak végre. Ilyen műveleteket forrópontok (hotspot) segítségével tudunk létrehozni. Egy forrópont a következő műveleteket hajthatja végre: !" !" !" !" !" !" Megnyithat egy nézetet Megnyithat egy gyűjtőt Megnyithat egy láncot (ez lehet dokumentumlánc, de lehet egy URL cím is) Megnyithat egy másik navigátort Végrehajthat egy képletet (@ függvények) Lefuttathat egy LotusScript programot Navigátor létrehozásához:
!" A Designerben az adatbázis tervelemei közül válasszuk a Navigátorokat (Navigators). !" Nyomjuk meg az Új Navigátor (New Navigator) gombot. !" Adjunk nevet a navigátornak. !" Hozzuk létre a különböző forrópontokat. 2.54 ábra Egy navigátor A rajzolóban a következő egyszerű ábrákat lehet létrehozni: !" !" !" !" !" Szövegpanel (Text): itt egy egyszerű szöveget lehet beleírni Téglalap (Rectangle): egy egyszerű téglalap Lekerekített téglalap (Rounded rectangle): téglalap, aminek kerekített a sarka Ellipszis Sokszög (Polygon): egy zárt alakzat Ezen alakzatok közös jellemzője, hogy mindegyiken feliratot lehet elhelyezni, hátterük van, aminek a színét és az alakzat keretét is lehet állítani. 133 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS A fentieken kívül létre lehet még hozni a következőket: !" !" !" !" Forróponttéglalap (Hotspot rectangle) Forrópontkör (Hotspot
circle) Forrópontsokszög (Hotspot polygon) Töröttvonal (Polyline) Ezen alakzatokon belül nem lehet szöveget megadni, és ezen alakzatoknak csak keretük van, azaz vonalként viselkednek. Minden alakzatot létre lehet hozni a Létrehozás (Create) menüből és a SmartIcon sorból is. 2.55 ábra Az alakzatok létrehozása Minden alakzatnak be lehet állítani az alakzat tulajdonságablakának utolsó lapján (Kiemelés - HiLite), hogy amikor a kurzort fölé viszik, vagy rákattintnak, akkor az alakzat milyen módon emelődjön ki: megváltoztassa a keretét, vagy a hátterét. Minden alakzatnál létezik a Click esemény, amit a programozói ablakban kitölthetünk tartalommal: megadhatjuk, milyen utasítást hajtson végre az alakzat, ha rákattintottak. Ez lehet: 134 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS 2.56 ábra A Click esemény !" Egyszerű művelet(ek) (Simple action) !" Egy másik navigátor, nézet, vagy folder megnyitása, ekkor meg kell adni a
megnyitandó tervelem nevét !" Egy lánc vagy egy URL megnyitása, ekkor a vágólapra kell másolni a láncot, amit a Lánc beillesztése (Copy Link) gombbal lehet megadni, vagy az URL beírása (Enter URL) gomb megnyomása után be kell írni az URL címet !" Képlet végrehajtása (Képlet - Formula), akkor meg lehet adni a képletet, amiben lehet használni a @, ill., @Command függvényeket is !" LotusScript futtatása, ekkor a programot kell beírni. A navigátor hátterét a Navigátortulajdonságok ablak első lapján, a Háttérszín (Background color) részben választhatjuk ki. 2.57 ábra Egy navigátor hátterének beállítása Ezen a lapon megadhatjuk a navigátor nevét (Név - Name), azt, hogy a navigátor megnyitásakor melyik nézetet vagy gyűjtőt jelenítse meg (Kezdő nézet vagy gyűjtő - Initial view or folder). Beállíthatjuk még, hogy a navigátor panel mérete automatikusan alkalmazkodjon a navigátor méretéhez (Panelek automatikus
igazítása futás közben - Auto adjust panes at runtime). 135 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS A második lapon meghatározhatjuk, hogy az egyes objektumok rácspontokra illeszkedjenek (Igazítás a rácsra - Snap to grid), ill. megadhatjuk a rácspontok méretét (Rácsméret - Grid size). Létre lehet hozni grafikus hátteret is a navigátornak, amelyet a Létrehozás (Create) menü Grafikus háttér (Graphic Background) menüpontjával lehet, de ehhez előbb a vágólapra kell másolni a képet, amelyet a háttérnek szeretnénk. Lehet grafikus gombot is létrehozni, ehhez viszont ahogy a háttérnél, itt is előbb a vágólapra kell másolni a képet, majd a Létrehozás menü Grafikus gomb (Graphic Button) menüpont kiválasztása után létrejön a gomb. Ez tulajdonképpen nem más, mint egy kép, amelyre rá lehet kattintani. Ha több objektumot is egymásra helyeztünk, akkor a Tervezés (Design) menüben lévő két menüpont segítségével
meghatározhatjuk az objektumok sorrendjét: a kiválasztott objektumot az Előrehozás (Bring to front) segítségével előrébb, a Hátraküldés (Send to back) segítségével hátrébb tehetjük a megjelenés sorrendjében. Ahhoz, hogy egy navigátor meg is jelenjen azonnal az adatbázis megnyitása után, érdemes beállítani az adatbázis Adatbázistulajdonságok ablakának ötödik lapján (Indítás - Launch), hogy az adatbázis a megnyitáskor a megfelelő navigátort nyissa meg. Ehhez a Notes kliensben való megnyitáskor (When opened in a Notes client) pontban válasszuk ki a Kijelölt Navigátor megnyitása (Open designated Navigator) pontot, állítsuk be a Navigátor típusánál (Type of Navigator), hogy navigátort szeretnénk megnyitni (nem lapot, vagy gyűjtőt), és a Név (Name) részben válasszuk ki az elindítandó navigátor nevét. 136 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS 2.58 ábra Az adatbázis megnyitásakor automatikusan megnyíló navigátor
beállítása Ha azt szeretnénk, hogy az első navigátor, amely az adatbázis megnyitásakor jelenik meg, ne jelenítsen meg semmit (mert csak egy kezdő oldalt szeretnénk), akkor a Kijelölt Navigátor megnyitása saját ablakban (Open designated Navigator in its own window) pontot válasszuk. Azért arra figyeljünk, hogy a lapról valamilyen lánc vezessen a következő navigátorra. !" GYAKORLAT Készítsünk egy nagyon egyszerű navigátort az Ügyfélkövetés adatbázisunkhoz. Ez a navigátor tulajdonképpen csak négy feliratot tartalmaz, amely a négy nézetnek felel majd meg. 137 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS 2.59 ábra Ilyen navigátort szeretnénk Hozzunk létre egy új navigátort. Legyen a navigátor neve ÜgyfélNavigátor Válas??szunk színt a háttérnek. Engedjük, hogy a navigátor-panel mérete igazodjon a navigátor méretéhez (Panelek automatikus igazítása futás közben). Hozzunk létre négy Szövegpanelt, ezek mindegyikében a
Szövegpanel-tulajdonságok ablak első lapján, a Címke (Caption) részbe írjuk be a megjeleníteni kívánt szöveget (pl.: „Határidők”, stb) A második lapon válasszunk betűtípust, méretet a feliratoknak. Állítsuk be a feliratok keretét, hátterét a harmadik lapon, a negyedik lapon pedig válas??szuk ki, hogy szeretnénk-e valamilyen kiemelést, amikor a felirat fölé visszük az egeret, vagy ha rákattintunk. Ha ezek megvannak, akkor már csak azt kell beállítani, hogy mi történjen, ha a felhasználó rákattint a feliratra: mindegyik Szövegpanel programozó paneljában válas??szuk ki az Egyszerű műveletet, műveletnek pedig a Nézet vagy gyűjtő megnyitását (Open a view or folder). Ezután pedig válasszuk ki minden Szövegpanelhez a hozzá tartozó nézetet. Ez pl a „Határidők” feliratnál így néz ki: 2.60 ábra A Határidők felirat Click eseménye 138 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS Tulajdonképpen készen is vagyunk, még
meghatározhatjuk, hogy melyik nézettel induljon a navigátor, amikor megnyitják az adatbázist: a navigátor Navigátortulajdonságok ablakában az első lapon, a Kezdő nézet vagy gyűjtő opciónál válasszuk az Összes dokumentumot. Ezután már csak az Adatbázistulajdonságok ablakban kell beállítani, hogy a mi navigátorunkkal nyíljon meg az adatbázis. #" Tipp Egy forrópontra rákattintva megnyithatunk egy másik navigátort is (Újabb Navigátor megnyitása - Open another Navigator), és megadhatjuk a fentebb leírt módon, hogy egy navigátor megnyitásakor melyik nézet nyíljon meg: ezek segítségével és egy kis „sziszifuszi” munkával elég ügyes dolgokat lehet létrehozni. El lehet azt érni, hogy a felhasználó számára úgy tűnjön, mintha megváltozna a grafika az egyes objektumokra kattintáskor. Helyezzünk el minden felirat mellé egy kis mappa ikont, és amikor a felhasználó rákattint egy feliratra, akkor az új mappa (amelyikre
kattintott) kinyílik, az előző pedig összezáródik. Ezt úgy lehet megtenni, hogy létrehozunk minden nézethez egy navigátort, és minden navigátor kezdő nézete a neki megfelelő nézet lesz, az egyes feliratok pedig nem nézeteket nyitnak meg, hanem egy másik, a megnyitandó nézetnek megfelelő navigátort. Így minden nézethez egyedi navigátort tervezhetünk: megtehetjük, hogy az aktuális nézet mellett nyitott, az összes többi nézet mellett pedig zárt mappa ikont jelenítünk meg. A felhasználónak pedig, ha a navigátor egyes felirataira kattint, úgy fog tűnni, mintha az egyik mappa kinyílna (amelyikre kattintott), a másik pedig becsukódna. Az Összes dokumentumok nézet: 139 2. EGY KOMOLYABB FELADAT: ÜGYFÉLKÖVETÉS Majd a határidők nézet: Természetesen ennél látványosabb dolgokat is kitalálhatunk, de az alapelv valószínűleg ugyanez marad. #" Tipp Érdemes a navigátoron elhelyezni egy gombot, amely segítségével a
felhasználó, ha úgy dönt, lemondhat a navigátor használatáról: a gomb segítségével visszakaphatja a nézeteket és gyűjtőket (nem biztos, hogy mindenki szereti a navigátorokat). Ehhez hozzunk létre egy gombot a navigátoron, legyen a felirata: Vissza a nézetekhez/gyűjtőkhöz. A gomb egy képletet fog végrehajtani, amely szerencsére elég egyszerű: @Command([ViewNavigatorsFolders]) Megjegyzés A navigátorok helyett érdemesebb a későbbiekben, a webes fejlesztésben megismerendő Keretkészleteket és Lapokat használni. 140 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK 3. További fejlesztési eszközök 3.1 Űrlapok továbbfejlesztése Ebben a fejezetben olyan lehetőségeket mutatunk be, amelyekkel tovább színesíthetjük adatbázisainkat. 3.11 Osztott mezők Olyan mezőket is tervezhetünk, amelyek nem csak egy, hanem több űrlapon is használhatók. Sokszor előfordul, hogy az adatbázis űrlapjai azonos mezőket tartalmaznak. Ilyen mező lehet például a
létrehozás dátuma, a szerző neve, stb. Persze megtehetjük, hogy az egyik űrlapon megtervezzük a mezőt, majd a többi űrlapra felmásoljuk a Windows vágólapja segítségével. Ennek viszont az a hátránya, hogy ha kiderül, hogy mégsem tökéletes a mező terve, akkor minden egyes helyre újra be kell másolni a mezőt. Ezt a feladatot oldja meg az osztott mező (shared field). Létrehozhatunk egy „mezőkönyvtárat”, ahol megtervezzük az általunk leggyakrabban használt mezőket, majd az egyes űrlapok tervezésénél csak beillesztjük a mezőt. Az ilyen mezőket a Notes a vékony keret helyett vastag fekete kerettel jelöli, és az így beillesztett mező kapcsolatban marad az eredeti mezővel is, amely azt jelenti, hogy ha az eredeti mezőt megváltoztatjuk, akkor az összes beillesztett mező is megváltozik. Tulajdonképpen itt nem is új mezőt hozunk létre, hanem csak egy „linket” az eredeti osztott mezőre. Egy mezőt tervezhetünk speciálisan osztott
mezőnek, vagy egy már kész, de nem osztott mezőt osztottá tehetünk. Osztott mező létrehozása !" A Designerben válasszuk egy adatbázisban az Erőforrásokat (Resources), és kattintsunk az Osztott mezők (Shared fields) pontra. !" Kattintsunk az Új osztott mezőre (New Shared Field). !" Írjuk be az osztott mező nevét, állítsuk be a típusát, szerkeszthetőségét. !" Állítsuk be az egyéb tulajdonságait (szín, betű, stb.) !" Írjunk, ha kell, alapértelmezett értéket, ill. számított mezőknél valamilyen képletet. !" Mentsük el az osztott mezőt. 141 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK 3.1 ábra Osztott mezők listája Az osztott mező beillesztéséhez: !" A Designerben megnyitott űrlapon menjünk oda a kurzorral, ahová be szeretnénk illeszteni a mezőt. !" Válasszuk az Létrehozás/Osztott mező beszúrása (Create/Insert shared field) menüpontot. !" Válasszuk ki az osztott mezők közül azt,
amelyiket be szeretnénk illeszteni. #" Tipp Az osztott mezőknek a mező szövegére vonatkozó tulajdonságait (szín, betűtípus, stb.) minden egyes beillesztésnél külön-külön be lehet állítani Megjegyzés Mivel egy űrlapon azonos névvel nem szerepelhet két mező, ezért az osztott mező beillesztése után ugyanazon űrlapra még egyszer már nem lehet beilleszteni ugyanezt a mezőt. A Notes a beillesztésre felkínált osztott mezők listájában már nem is szerepelteti azt a mezőt, amelyik már szerepel az adott űrlapon. 142 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK Megjegyzés Ha egy osztott mezőt egy másik adatbázis űrlapjáról átmásolunk egy űrlapra, akkor az átkonvertálódik nem osztott mezővé. Természetesen, ha az Erőforrások/Osztott mezőkből másoljuk át egy másik adatbázisban ugyanide, az osztott mező továbbra is osztott marad. Osztott mező átnevezése Ha egy osztott mezőt átnevezünk, akkor az összes űrlap, amely
használta, elveszti a kapcsolatot ezzel az osztott mezővel, mivel a mezőknek nincs szinonim nevük. Így, ha átnevezünk egy osztott mezőt, az összes űrlapon ki kell törölni a régi mezőt, és az új mezőt kell beilleszteni helyette. Ha már dokumentumokat is hoztunk létre ilyen űrlappal, akkor egy ügynök segítségével gondoskodnunk kell, hogy a régi mező értéke átkerüljön az új mezőbe. Az ügynökökkel egy későbbi fejezetben foglalkozunk. A mezőknek nincs szinonim nevük Osztott mező törlése Ezzel szintén óvatosan kell bánni. Egy osztott mezőt az osztott mezők listájából a Szerkesztés/Törlés (Edit/Clear) menüponttal törölhetünk ki (vagy a Del gomb megnyomásával). Ha egy osztott mezőt kitörlünk, akkor minden olyan dokumentum megnyitásakor, amely olyan űrlappal jött létre, amely tartalmazta a kitörölt osztott mezőt, egy hibaüzenetet fogunk kapni: Cannot locate field definition for Field: <field name> Ha a felhasználó
rákattint az OK gombra, a dokumentum megnyílik, és a mező helyén a mező tartalmát látja, viszont nem tudja szerkeszteni. Ahhoz, hogy elkerüljük ezt a hibaüzenetet, minden egyes űrlapot, amely tartalmazza a kitörölt osztott mezőt, módosítani kell: az osztott mezőt nem osztott mezővé kell átalakítani. Ennek legegyszerűbb módja, ha kivágjuk a vágólapra, majd újra beillesztjük, mivel az osztottság tulajdonsága ekkor megszűnik. Nem osztott mező osztottá alakítása Egy, már kész, nem osztott mezőt is át lehet alakítani osztottá: !" Nyissuk meg az űrlapot a Designerben. !" Válasszuk ki a kívánt mezőt. 143 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK !" Válasszuk a Tervezés/Mező megosztása (Design/Share this field) menüpontot. Ettől kezdve a mező rendelkezésre áll az osztott mezők között. 3.12 Részűrlapok Hasonlóan az osztott mezők funkciójához, a részűrlapokat (subform) is űrlapokba lehet beilleszteni.
Tartalmazhatnak akármennyi mezőt, ill használható az összes űrlapokra vonatkozó terv-elem is. Sőt, létre lehet hozni egy elrendezéstartományt is, amely egy teljes részűrlapot elfoglal, és így beilleszthető akárhány űrlapra, vagy akár megjeleníthető egy párbeszéd-ablakként is. A részűrlap űrlap-elemek gyűjteménye, amelyek egy objektumként vannak tárolva. Nagyon hasznos akkor, ha az űrlapokat újratervezzük, hiszen minden űrlapon megjelennek azok a változtatások, amelyeket a részűrlapon elvégeztünk. Gyakori felhasználási példája egy céglogó elkészítése, amelyet aztán minden űrlapra könnyen beilleszthetünk. De gondolhatunk az egy cégen belüli egységes lábléc és fejléc előállítására is: könnyen meg lehet változtatni, és az összes cégdokumentum lábléce és fejléce meg fog változni (persze csak azok, amelyeket Notes-ban tároltunk). A részűrlapok fontos lehetősége, hogy nem kell fixen egy részűrlapot
beillesztenünk az űrlapba, hanem a megjelenítendő részűrlap kiválasztása történhet futtatás közben is, és ezt egy képlet eredménye határozza meg. Megjegyzés Az osztott mezőkhöz hasonlóan, a beillesztett részűrlapon szereplő mezők nevei itt sem szerepelhetnek az űrlap többi részén. Részűrlap létrehozása !" A Designerben válasszuk egy adatbázisban az Erőforrásokat (Resources), és kattintsunk a Részűrlapok (Subforms) pontra. !" Kattintsunk az Új részűrlap (New Subform) gombra. !" Hozzuk létre a részűrlapot, mindazon terv-elemek felhasználásával, amelyeket egy űrlap létrehozásakor is használunk. 144 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK 3.2 ábra A részűrlapok !" Válasszuk a Tervezés/Részűrlap-tulajdonságok (Design/Subform properties) menüpontot, vagy a SmartIcon gombot. 3.3 ábra A Részűrlap-tulajdonságok ablak !" Írjuk be a nevét az új részűrlapnak (Név/Name). !" A Beállítások
(Options) részben válasszuk megjeleníteni a részűrlapot: ki, hogyan szeretnénk !" Bekerül a Részűrlap beszúrása pontba (Include in Insert subform dialog): a Létrehozás (Create) menü Részűrlap beszúrása (Insert 145 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK Subform) pontjának kiválasztása után megjelenjen-e ennek a részűrlapnak a neve. !" Bekerül az Új űrlap panelbe (Include in New form dialog): a Létrehozás menüben az űrlapokhoz hasonlóan megjelenjen-e ez a részűrlap. !" Mentsük el a részűrlapot. Részűrlap beillesztése !" !" !" !" Nyissuk meg az űrlapot a Designerben. A kurzorral álljunk oda, ahová be szeretnénk illeszteni a részűrlapot. Válasszuk a Létrehozás menü Részűrlap beillesztése pontját. Válasszuk ki a beilleszteni kívánt részűrlapot. Ha képlet alapján szeretnénk megjeleníteni futtatáskor a részűrlapot, akkor: !" !" !" !" Nyissuk meg az űrlapot a
Designerben. A kurzorral álljunk oda, ahová be szeretnénk illeszteni a részűrlapot. Válasszuk a Létrehozás menü Részűrlap beillesztése pontját. Válasszuk ki a Beszúrás képlet alapján (Insert Subform based on formula) opciót. !" A programozási panelben írjunk egy olyan képletet, amelynek az eredménye egy részűrlap neve. 3.4 ábra Részűrlap beszúrása Részűrlap törlése Egy részűrlap törléséhez a következőt kell tenni: !" Ha az űrlapról akarjuk törölni, akkor csak rákattintunk a részűrlapra, majd a Szerkesztés/Törlés (Edit/Clear) menüpont, vagy a Del gomb segítségével töröljük. 146 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK !" Ha az adatbázisból akarjuk törölni, akkor a részűrlapok között kell kiválasztani a megfelelőt, majd a Szerkesztés/Törlés (Edit/Clear) menüpont, vagy a Del gomb segítségével törölhetjük. Ha egy részűrlapot törlünk, akkor a kész dokumentum megjelenítésekor a dokumentumban
a részűrlap által megjelenített rész nem fog megjelenni, és a státuszsorban a „Subform <subform name> not loaded” fog megjelenni. Hogy ezt a hibaüzenetet elkerüljük, vegyünk fel egy új, ugyanolyan nevű részűrlapot a részűrlapok közé. 3.13 Az összezárható szakasz A szakasz (collapsible section) segítségével a felhasználó összezárhatja az űrlap egy részét, ezáltal áttekinthetőbbé válhat az űrlap, mindamellett a mérete is csökkenhet. Természetesen bármikor ki is lehet nyitni, ezáltal ismét szerkeszthetővé válik a szakasz által határolt rész. A szakaszok segítségével a felhasználó könnyebben navigál az űrlap egyes részei között, és a tervezőnek is segít, hogy jobban gazdálkodjon az űrlappal. Meghatározhatjuk, hogy a szakasz mikor záruljon össze automatikusan, mikor legyen kinyitva, vagy elrejtve. A szakasz paragrafusok egy csoportja, amelyeket egyetlen sorrá lehet összezárni. Ez az űrlap egy olyan
területe, amelyet egyetlen egérkattintással össze lehet zárni, vagy szét lehet nyitni. Egy szakasz bármennyi szöveget, mezőt, grafikus elemet tartalmazhat. A szakaszoknak két nagy csoportja van: a Szabványos (Standard) és az Ellenőrzött hozzáférésű (Controlled-access). A szakaszt akkor érdemes használni, ha !" !" !" !" !" Szeretnénk egyszerűbben használhatóvá tenni az űrlapot Bizonyos információkra csak ritkán van szükség Bizonyos információk nem minden felhasználót érintenek Szabályozni akarjuk, hogy ki szerkeszthesse az űrlap egy bizonyos részét Azt szeretnénk, hogy bizonyos információkat csak egyes emberek láthassanak Szakasz létrehozása Egy szakasz létrehozásához először hozzuk létre a mezőket, statikus szövegeket, stb., majd jelöljük ki azt a részt, amelyet a szakasz majd tartalmazni fog. 147 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK !" Nyissunk meg egy űrlapot a Designerben. !"
Jelöljük ki a szövegeket és a mezőket, amiket a szakasz tartalmazni fog. !" Válasszuk a Létrehozás/Szakasz/Szabványos (Create/Section/Standard) menü-pontokat. !" A Szakasztulajdonságok ablakban változtassuk meg a szakasz címét, ha akarjuk. A Szakasztulajdonságok ablak Jelenítsük meg a Szakasztulajdonságok ablakot: !" Ha a szakasz címére kattintunk, akkor megjelenik egy újabb menüpont: a Szakasz, ebből a menüből válasszuk a Szakasztulajdonságokat, vagy !" A szakasz címére kattintva, a SmartIcon segítségével. A Szakasztulajdonságok ablak első lapján (Szakasz címe és szegélye - Section title and border): 3.5 ábra A Szakasztulajdonságok ablak első lapja !" A Cím (Title) részben beírhatjuk a szakasz címét, !" Ha a Szöveg (Text) opciót választjuk, akkor a beírt szöveg lesz a címsorban !" Ha a Képlet (Formula) opciót választjuk, akkor pedig egy képletet írhatunk be, amelynek az eredménye lesz a
szakasz címe: így ennek a képletnek szöveg típusú eredményt kell adnia !" A Szegély (Border) részben: !" Stílus (Style): meghatározhatjuk, hogy a keret egy vonalas, két vonalas legyen stb., !" Szín (Border color): megadhatjuk a keret színét 148 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK A Szakasztulajdonságok ablak második lapján (Kiterjesztés/Összezárás Expand/Collapse): 3.6 ábra A Szakasztulajdonságok ablak második lapja !" Az első részben megadhatjuk, hogy mikor hogyan viselkedjen a szakasz, pl. A Szerkesztéskor (Opened for editing) részben azt határozzuk meg, hogy ha megnyitják szerkesztésre a dokumentumot, akkor mi történjen: !" Nincs automatikus kiterjesztés/összezáródás (Don’t auto expand or collapse): nem nyílik szét, és nem záródik össze automatikusan a szakasz, hanem a legutoljára beállított módban marad !" Automatikus kiterjesztés (Auto expand section): ha megnyitották a dokumentumot
szerkesztésre, akkor automatikusan szétnyílik a szakasz !" Automatikus összezárás (Auto collapse section): automatikusan összezáródik !" A második részben két opciót állíthatunk még be: !" Cím elrejtése kiterjesztéskor (Hide title when expanded): ha szét van nyitva a szakasz, akkor a címsort rejtse el !" Megjelenítés szövegként, ha nincs megjelenítve a minta (Show as text when not previewing): Ha csak a megjelenítés panelban nézzük, nem nyitjuk meg a dokumentumot, akkor szakaszként látjuk, ha megnyitjuk a dokumentumot, akkor viszont sima szövegként (úgy, mint ha nem is lenne szakasz) A Szakasztulajdonságok ablak harmadik lapján (Betűtípus) a címre vonatkozó betűtulajdonságokat határozhatjuk meg (típus, méret, szín, stb.) A Szakasztulajdonságok ablak negyedik lapján (Szakasz elrejtése - Section Hide When) a szakasz elrejtésére vonatkozó paramétereket lehet beállítani. 149 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK
Szakasz megszüntetése Ha a szakaszt is és a szakasz tartalmát (mezőket és szövegeket) is meg akarjuk megszüntetni, akkor egyszerűen jelöljük ki az egész szakaszt, és a Del gombbal töröljük ki. Ha viszont csak azt szeretnénk elérni, hogy a paragrafusok ne legyenek összefogva egy szakasszá, akkor !" Kattintsunk a szakasz címére. !" A menüsorban megjelenő Szakasz (Section) menüből válasszuk a Szakasz eltávolítása (Remove section) menüpontot. Ezután a szakasz megszűnik, de a tartalma (mezők, szövegek) változatlanul az űrlap részei lesznek. 3.14 Ellenőrzött hozzáférésű szakasz Az ellenőrzött hozzáférésű szakaszok abban különböznek a szabványostól, hogy !" meghatározhatjuk, ki szerkesztheti a szakaszt, és ki az, aki csak olvashatja. !" A szerkesztőkre és a nem szerkesztőkre külön-külön meg lehet határozni a szétnyílás és összecsukódás opcióit. Használatuk akkor előnyös, ha egy dokumentumot
többen is szerkeszthetnek, de azt szeretnénk, hogy az űrlap egy bizonyos részét csak bizonyos emberek szerkeszthessék. Ellenőrzött hozzáférésű szakasz létrehozása !" Nyissunk meg egy űrlapot a Designerben. !" Jelöljük ki a szövegeket és a mezőket, amelyeket a szakasz tartalmazni fog. !" Válasszuk a Létrehozás/Szakasz/Ellenőrzött hozzáférés (Create/Section /Controlled Access) menüpontokat. !" A Szakasztulajdonságok ablakban változtassuk meg a szakasz címét, ha akarjuk. A hozzáférés szabályozása A hozzáférést is a Szakasztulajdonságok ablakban tudjuk beállítani. Ez az ablak nagyon hasonló a Szabványos szakaszhoz, de 150 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK !" Az első lapon megjelent még egy opció: Szakasz mezőneve (Section field name) számunkra nem érdekes, csak a hármas verzióval való kompatibilitás miatt szükséges. !" A második lapon (Kiterjesztés/összezárás) megjelent annak a
lehetősége, hogy a szerkesztőknek és a nem szerkesztőknek más-más összecsukódást és szétnyílást állítsunk be. A Mindet azonosra (Set all to same) gomb segítségével az első opciót alapul véve (Megtekintéskor - Previewed), az összest azonosra állítja. Ennél a szakasztípusnál csak a nem szerkesztők számára lehet beállítani, hogy a címsor eltűnjön a szakasz szétnyitásakor (Cím elrejtése kiterjesztéskor). !" A harmadik lap (Képlet - Formula) egy új lap, itt lehet meghatározni, hogy ki, vagy kik a szakasz szerkesztői (azaz ki vagy kik szerkeszthessék a szakaszban lévő mezőket): 3.7 ábra Az ellenőrzött hozzáférésű szakasz !" Típus (Type): itt megadhatjuk, hogy lehessen-e a későbbiekben (futás közben) szerkeszteni, hogy ki a szerkesztője a szakasznak. Ha Szerkeszthetőt (Editable) választjuk, akkor a dokumentum létrehozója megadhatja, hogy ki legyen a szerkesztő, ha valamelyik Számítottat (Computed) választjuk,
akkor egy képlet alapján számított lesz. !" A képletnek egy szöveg típusú listát kell visszaadnia, amely a szerkesztők nevét, vagy egy szabály (role) nevét kell tartalmaznia szögletes zárójelek között. 3.15 Lábléc készítése az Ügyfélkövetés három űrlapjához Hozzunk létre egy olyan részűrlapot, amelyet mind a három, az Ügyfélkövetés adatbázisban meglévő űrlapunk használhat. Ez egy láblécszerű részűrlap lesz, amely mindegyik űrlap alján megtalálható, és azt rögzíti, hogy a dokumentumot ki szerkesztette utoljára, és mikor. Így mindig visszakereshető lesz, hogy ki és mikor írt bele ebbe a konkrét dokumentumba. Ha a dokumentum új, most hozzák létre, akkor ezt is fejezze ki a sor tartalma. 151 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK Legyen ez a rész egy szakaszba zárva, amely minden esetben össze van zárva, hogy helyet spóroljunk (elég hosszú is lehet ez a lista). Ha a felhasználó meg akarja nézni a dokumentum
eddigi történetét, akkor kinyitja és végignézi az eddigi szerkesztések listáját. Legyen a szakasz címe számított, és jelenítse meg a szerkesztések történetének utolsó sorát! Valahogy így kellene kinéznie összezárva: Kiterjesztve pedig így: Ennek a megvalósítására három mezőre lesz szükség: az UtolsóSor, a Szerkesztések, és a MegjSzerk mezőkre. Leírás Ez tartalmazza az utolsó szerkesztés adatait Itt lesz a valódi leírás a szerkesztésekről Ez fogja megjeleníteni a szerkesztésre vonatkozó adatokat Név UtolsóSor Típus Szöveg, szerkeszthető, rejtett Szerkesztések Szöveg, szerkeszthető, rejtett MegjSzerk Szöveg, megjelenítéshez számított, látható Az elmélet: hogyan működjön Amikor elmentjük a dokumentumot (a QuerySave eseményt fogjuk használni), kiolvassuk a mostani dátumot és időt, ill. a felhasználó nevét Ha ezek az adatok megvannak, beírjuk az UtolsóSor mezőbe (amely nem látható). A Szerkesztések mező
tartalmának a végére pedig hozzáfűzzük a most kiolvasott adatokat (a Szerkesztések mező szintén nem látható). A MegjSzerk mező segítségével – amely nem szerkeszthető, de látható – pedig megjelenítjük az eddigi szerkesztéseket. Ez a kis csavar azért kell, mert nem 152 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK tudunk nem szerkeszthető mezőbe írni, viszont, ha egy mező szerkeszthető, akkor a felhasználó is át tudná írni: ha elrejtjük, akkor viszont nem tud beleírni. Az utolsó sor külön eltárolása azért kell, hogy a szakasz címében meg tudjuk jeleníteni. !" GYAKORLAT Hozzunk létre egy új részűrlapot, legyen a részűrlap neve „Lábléc”. Hozzuk létre a három fenti mezőt a megadott paraméterekkel, a MegjSzerk képlete legyen „Szerkesztések”. Hozzuk létre a szakaszt: a szakasz címének válasszuk a képletet, majd a képlet ablakba írjuk: „UtolsóSor”. Válasszuk ki az űrlap QuerySave eseményét az Objektumok
(Objects) ablakból, válasszuk a „Futtatás” részben a képletet. Ide írjuk be a következő kis képletet: 3.8 ábra Az utolsó szerkesztéseket rögzítő képlet Megjegyzések !" A @Text szöveg típusúvá alakítja át a paraméterként kapott adatot !" A @IsNewDoc függvény értéke Igaz (True), ha a jelenlegi dokumentum még nem volt elmentve. !" A FIELD kulcsszó azt mondja meg a Notesnak, hogy itt nem egy változó értékének a beállítás történik, hanem egy mezőnek adunk értéket. !" Az utolsó sorban lévő @All nem csinál semmit: csak azért van rá szükség, mivel a képletnek mindig valamilyen értékkel kell visszatérnie, ez a sor ezt a formai megkötést kerüli ki. A képlet utolsó előtti sora viszont érdemel egy hosszabb megjegyzést. Ebben a sorban írjuk a régi tartalom elé az új tartalmat. Ez egy kis trükkel történik: a mező („Szerkesztések”) eddigi tartalmát és az új sort (két szöveget) 153 3.
TOVÁBBI FEJLESZTÉSI ESZKÖZÖK egy szöveglistává fűzünk össze. Ez azért jó, mivel, ha egy mező listát tartalmaz, akkor meg lehet mondani, hogy a lista egyes elemeit hogyan visszük be (pl. pontosvessző, vagy újsor válassza el őket), ill hogy hogyan szeretnénk megjeleníteni őket (itt is lehet: pontosves??sző, vessző, újsor, szóköz, stb.) Ehhez a Mezőtulajdonságok ablak első lapján lévő Több érték engedélyezése opciót kell beállítani: a mezőben lévő több értéket ugyanis listaként tárolja a Notes, és fordítva: a mezőbe írt listát több mezőértékként értelmezi Notes. A Mezőtulajdonságok második lapján pedig be lehet állítani a több érték bevitelére és megjelenítésére vonatkozó paramétereket: Több érték esetén (Multi-Value options): ez csak akkor használható, ha az első – Mező adatai – lapon beállítjuk a Több érték engedélyezése (Allow multiple values opciót), azaz több érték bevitelét is
engedélyezzük a mezőbe. A lehetőségek: !" Elválasztó jel adatbevitelkor (Separate values when user enters): Amikor a felhasználó több értéket is bevisz a mezőbe, az itt meghatározott karakterrel kell elhatárolnia az egyes értékeket, mivel a Notes is ez alapján fogja azokat elkülöníteni. !" Elválasztó jel megjelenítése (Display separate values with): amikor a Notes több értéket jelenít meg, akkor ezzel a karakterrel válassza el az egyes értékeket egymástól Ezek alapján módosítani kell a részűrlapunkat is. !" GYAKORLAT A Szerkesztések és a MegjSzerk mezőkben állítsuk be a Több érték engedélyezése opciót. A Szerkesztések mezőben állítsuk be mind beviteli, mind megjelenítési elválasztónak az új sort. A MegjSzerk mezőben elég csak a megjelenítéshez beállítani az új sort (mivel ezt a mezőt csak megjelenítésre használjuk). !" GYAKORLAT Ezzel készen is van a láblécünk. Már csak be kell illeszteni
a kívánt űrlapra Ehhez nyissuk meg azt az űrlapot, amelyik aljára be szeretnénk illeszteni, majd a kívánt helyen válasszuk a Létrehozás menü Részűrlap beszúrása menüpontot. Mentsük el az űrlapunkat, és próbáljuk is ki. Teszteljük, hogy minden adatot helyesen rögzít-e a lábléc. 154 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK 3.16 Segítségek a mezők kitöltéséhez Ahhoz, hogy a felhasználó helyesen töltse ki az űrlapon lévő mezőket, hasznos, ha ehhez különböző formában segítséget tudunk neki adni. Az egyik legegyszerűbb módja a segítségadásnak, ha minden fontos mezőnél kitöltjük a Mezőtulajdonságok ablak harmadik, Speciális (Advanced) lapján lévő Súgóleírás (Help description) mezőt. Ez a szöveg alul, a státuszsor felett fog megjelenni, de csak akkor, ha a szerkesztő üzemmódban van az űrlap, és az adott mezőben áll a kurzor. Ezen felül a Nézet/Megjelenítés/Mezősúgó (View/Show/Field help) menüpont be kell, hogy
legyen kapcsolva (ez az alapértelmezés). Érdemes kitölteni minden fontos mezőnél, mert sokat segíthet a felhasználónak. A második lehetőség, hogy ún. felbukkanó szövegeket írunk az űrlap egyes részeire, tipikusan a mező előtti, a mezőt megnevező címkére. Ha erre, a mező előtt szövegre rákattint a felhasználó, akkor megjelenik egy kis szöveg, amelyet mi határozhatunk meg a tervezéskor. Például a „Cég név” feliratra kattintva ez a kis felirat jelenik meg: Felbukkanó szöveg létrehozása Ehhez: !" Nyissuk meg az űrlapot a Designerben. !" Jelöljük ki azt a szöveget, amelyre, ha rákattint a felhasználó, akkor megjelenik a segítő szöveg. !" Válasszuk a Létrehozás/Forrópont/Felbukkanó szöveg (Create/Hotspot/Text pop-up) menüpontot. !" A Forróponttulajdonságok ablakban írjuk be a szöveget és állítsuk be a kívánt paramétereket. A Forróponttulajdonságok ablakot a következő módon lehet előhozni:
!" Álljunk rá a szövegre, amely forrópontjának tulajdonságait akarjuk beállítani. !" A menüsorban megjelenik egy újabb menüpont: a Forrópont (Hotspot) menün belül a Forrópont tulajdonságai pontra kattintva előjön az ablak. 155 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK Forróponttulajdonságok ablak első (Felbukkanó szöveg adatai - Hotspot popup info) lapján a következőket lehet beállítani: 3.9 ábra A felbukkanó szöveg !" A Felbukkanó szöveg (Popup text) részbe lehet beírni a megjeleníteni kívánt szöveget. !" A Megjelenítés (Display) részben: !" Felbukkanó szöveg megjelenítése (Show popup): ebben a részben beállíthatjuk, mikor jelenjen meg a szöveg: !" Rámutatáskor (On mouse over): ha az egérrel a szövegre kattintunk, akkor addig megjeleníti, amíg a szöveg felett tartózkodunk !" Kattintáskor (On click): csak addig jelenik meg, amíg lenyomva tartjuk az egér billentyűjét a szöveg felett
!" Forrópont stílusa (Hotspot style): itt a felbukkanó szöveget tartalmazó szöveg tulajdonságait lehet beállítani: !" Szegély a szöveg körül (Border the text): a szöveget körülveszi egy zöld kerettel !" Szöveg kiemelése (Highlight the text): a szöveget sárgával kihúzza !" Nincs (None): nem látszik, hogy itt felbukkanó szöveg lenne A Forróponttulajdonságok ablak többi lapján a felbukkanó szöveg alatt lévő szöveg tulajdonságait lehet beállítani. Felbukkanó szöveg törlése Ha nem akarjuk a forrópont alatti szöveget is kitörölni, akkor a forrópontot tartalmazó szövegre kattintás után, a Forrópont menü Forrópont eltávolítása (Remove hotspot) pontjával távolíthatjuk el a nem kívánt forrópontot. 156 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK A felbukkanó szövegnek létezik egy másik formája is, amikor egy képlettel határozhatjuk meg, hogy mi legyen a felbukkanó segítség. Felbukkanó kiszámított szöveg
Ehhez: !" Nyissuk meg az űrlapot a Designerben. !" Jelöljük ki azt a szöveget, amire, ha rákattint a felhasználó, akkor megjelenik a segítő szöveg. !" Válasszuk a Létrehozás/Forrópont/Felbukkanó kiszámított szöveg (Create/Hotspot /Formula pop-up) menüpontot. !" A Forróponttulajdonságok ablakban állítsuk be a kívánt paramétereket. !" A programozói panelben írjunk egy képletet, amelynek az eredménye egy szöveg, amit meg fog jeleníteni a Notes. 3.17 Egyéb forrópontok A forrópontoknak a fent bemutatottakon kívül még három típusa létezik: a Gomb, a Műveleti forrópont (Action Hotspot) és a Lánc forrópont (Link Hotspot). Az elsővel egy gombot hozhatunk létre az űrlapon, amelyet ha a felhasználó megnyom, akkor valamilyen művelet hajtódik végre: ez lehet egy egyszerű művelet, egy képlet végrehajtása, vagy egy LotusScript vagy JavaScript futtatás is. Gomb létrehozása !" Vigyük a kurzorunkat oda, ahová
a gombot be szeretnék illeszteni. !" Válasszuk a Létrehozás/Forrópont/Gomb (Create/Hotspot/Button) SmartIcont. menüpontot, vagy válasszuk a !" Töltsük ki a Gombtulajdonság ablak paramétereit. 3.10 ábra Gomb létrehozása Ezek a paraméterek a következők: 157 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK !" Az első lapon (Gomb adatai - Button Info) Felirat (Label) részében beállíthatjuk a szöveget, amelyet a gombra kívánunk írni, és kiválasztva a Sortörés (Wrap label as needed) opciót megengedjük, hogy a szöveget, ha hosszabb, mint a megadott gombszélesség, akkor a Notes több sorba törje meg. !" Szintén az első lapon a Szélesség (Width) részben beírhatjuk, hogy konkrétan mekkora legyen a gomb szélessége. Ezen kívül beállíthatjuk, hogy hogyan viselkedjen a Gomb szélessége attól függően, hogy mekkora feliratot írunk rá: !" Maximális szélesség (Maximum width): ha szélesebb a szöveg, mint a megadott
gombszélesség és ki van választva a címke megtörését engedélyező opció, akkor a szöveget megtöri a Notes, ha nincs kiválasztva a szövegtörést engedélyező opció, akkor pedig figyelmen kívül hagyja a beállított szélességet. !" Minimális szélesség (Minimum width): a gomb szélessége legalább a beállított méretű lesz. !" Rögzített szélesség (Fixed width): a gomb szélessége pontosan ekkora lesz, ha a szöveg hosszabb, akkor levágja a maradékot. !" Tartalomhoz (Fit content): a gomb szélessége az egyéb beállításoktól függetlenül akkora lesz, amekkorát a felirat hossza megkíván. !" A második lapon (Betűtípus) a gomb feliratának szövegére vonatkozó paramétereket lehet beállítani (szín, betűtípus, méret). Azt a műveletet, amelyet a gomb végrehajt, a programozói panelben lehet beírni. A második forrópont típus, a Műveleti forrópont nagyon hasonlít az előbb bemutatott gomb funkciójára:
rákattintva egy műveletet lehet végrehajtani. Ezzel nagyjából ugyanazokat hajthatjuk végre, mint a gombbal (egyszerű művelet, képlet, LotusScript, JavaScript). Itt is a programozói panelba lehet beírni a műveletet. Műveleti forrópont létrehozása !" Jelöljük ki azt a szöveget, amelyre ha rákattint a felhasználó, akkor végrehajtódik a művelet. !" Válasszuk a Létrehozás/Forrópont/Műveleti forrópont (Create/Hotspot/Action Hotspot) menüpontot. A harmadik forrópont típus, a Lánc forrópont segítségével megnyithatunk egy másik lapot, dokumentumot, amely lehet Notes adatbázisban, de lehet akár a Web bármely dokumentuma (azaz egy URL címet is megadhatunk). 158 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK Lánc forrópont létrehozása !" Jelöljük ki azt a szöveget, amelyre ha rákattint a felhasználó, akkor megnyitásra kerül a kívánt lap. !" Válasszuk a Létrehozás/Forrópont/Lánc forrópont menüpontot. !" A
Forróponttulajdonságok ablakban állítsuk be a megfelelő paramétereket. Ezek a paraméterek az első lapon (Forrópont adatai - Hotspot info) találhatók: 3.11 ábra Lánc forrópont létrehozása !" Típus (Type): itt állítjuk be, hogy milyen lapot szeretnénk megnyitni !" URL: ha ezt választjuk, akkor az Érték (Value) mezőbe beírhatjuk azt az URL (internetes) címet, amelyen a kívánt dokumentum megtalálható, ill. a Keret (Frame) mezőbe annak a keretnek a nevét írhatjuk, ahol a dokumentumot meg kívánjuk jeleníteni. !" Lánc (Link): ekkor a vágólapról illeszthetünk be egy dokumentumra, nézetre vagy adatbázisra mutató címet. Ezeket az adatbázis megnyitása után a Szerkesztés/Másolás láncként (Edit/Copy as link) menüvel másolhatjuk fel a vágólapra. !" Elnevezett elem (Named element): ezzel egy tervelemet lehet megjeleníteni. Lehet ez egy lap, űrlap, nézet, mappa, navigátor, stb !" A Megjelenítés (Display) részben
beállíthatjuk, hogy akarunk-e keretet a szöveg köré. 3.18 A mezőtípusokról, utoljára A mezőtípusok közül a legtöbbet már ismerjük. Azonban maradt még négy, amelyekkel még nem foglalkoztunk: a Jelszó, a Képlet, a Szerző és az Olvasó típusok. Jelszó típus Ezek közül a Jelszó típus a legegyszerűbb: a felhasználó által ilyen mezőbe 159 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK begépelt szöveget nem jeleníti meg a Notes, hanem a karakterek helyett csillagokat ír. Ellenben maga a mező tartalma nem lesz titkosítva, tehát, ha megnézzük egy dokumentum tulajdonságait és ott a mezők tartalmát a Dokumentumtulajdonságok ablakban, akkor e mező tartalmát is láthatjuk! Ennek legjobb elkerülési módja, ha a mező tartalmát átalakítjuk/töröljük a dokumentum elmentése előtt (például a mező Bemenet átalakítása, vagy az űrlap QuerySave eseményének és a @Password függvény felhasználásával). Képlet típus A következő
mezőtípus, a Képlet egy egészen speciális mezőtípus, valószínűleg csak ritkán fogjuk alkalmazni. E mezőtípus szorosan összekapcsolódik egy speciális adatbázissal, a Headline.nsf adatbázissal, amelyet a Headline.ntf adatbázisból hozhatunk létre, és amelyet Előfizetésnek (Subscription) hívnak. Ez az adatbázis arra jó, hogy ha egy másik adatbázisban beállítunk egy ilyen „előfizetést”, akkor minden új, ill. a – beállítható – feltételt teljesítő dokumentum létrehozásakor megjelenik egy bejegyzés ebben az adatbázisban. Így minden, számunkra fontos adatbázisról egy helyen összegyűjthetjük a változásokat. Ahhoz, hogy egy adatbázist felvegyünk ide, minden felveendő adatbázisban a Létrehozás menü Előfizetés (Subscription) pontját ki kell választanunk, és ki kell töltenünk a megjelenő adatlapot. Itt lehet megmondani a feltételt, amely teljesülésekor megjelenik egy bejegyzés a Headline.nsf-ben Viszont: ha ez az űrlap
nem jó nekünk, mert nem pont ilyet szeretnénk a felhasználóval kitölteni, akkor magunknak kell egy $Subscription nevű űrlapot létrehoznunk, vagy át kell másolni a Headline.ntf-ből Ha egy ilyet létrehoztunk, akkor a Létrehozás/Előfizetés menüpont kiválasztásakor a saját űrlapunk jelenik meg. Ahhoz viszont, hogy a Notes tudja, hogy mi a feltétel, amit erről az űrlapról át kell vennie, kell hogy szerepeljen az űrlapon egy Képlet típusú mező. Ebből fogja a Notes kivenni a képletet, amely alapján majd gyűjti a dokumentumokat. Azt hiszem, látható, hogy ez a mezőtípus tényleg elég speciális, és valószínűleg tényleg elég ritkán fogjuk használni. Azért nem árt tudni, hogy mire is lehet használni. A Szerző és az Olvasó típus A mezőtípusok közül a Szerző és az Olvasó mezőt biztosan többször fogjuk használni, mint az előbb bemutatottat: ezekkel a mezőkkel dokumentumszinten (nem űrlap szinten!) meg lehet meghatározni a
konkrét dokumentumhoz való hozzáférési jogosultságokat. 160 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK Alapesetben minden dokumentum olvashatóságát / szerkeszthetőségét a felhasználó számára a Hozzáférési listában (ACL) beállítottak határozzák meg. Ezt lehet dokumentum szintre finomítani Ha egy Szerző típusú mezőt felviszünk egy űrlapra, akkor az ezzel az űrlappal késztett dokumentumokat csak azok a személyek szerkeszthetik, akik szerepelnek ebben a mezőben. Ha ezt a mezőt üresen hagyjuk, akkor mindenki szerkesztheti a dokumentumot, azaz olyan, mint ha nem is lenne ott ez a mező. Egy űrlapon lehet több ilyen típusú mező is: ekkor azok szerkeszthetik a dokumentumot, akik szerepelnek valamelyik mezőben. Az Olvasó típusú mező hasonló tulajdonságokkal bír: akik az ilyen típusú mezőben szerepelnek, azok, és csak azok olvashatják a dokumentumot. Itt is igaz, hogy ha nincs kitöltve a mező, akkor mindenki olvashatja a dokumentumot. A
szerzői tulajdonság természetesen erősebb: aki mindkettőben szerepel, az szerkesztheti is a dokumentumot. Megjegyzés Hangsúlyozzuk, hogy a HL-beli (Hozzáférési Lista, Access Control List, ACL) beállítás és a dokumentum szintű beállítás közül mindig az erősebb (szigorúbb) lesz az érvényes. Így, ha a HL-ben Nincs hozzáférés (No Access) van beállítva valakire, akkor biztosan nem férhet hozzá az adatbázis egyetlen dokumentumához sem. Ha Olvasó (Reader) a HL-ben, akkor pedig minden esetben csak legfeljebb olvashatja az adatbázis dokumentumait (akkor nem olvashatja, ha egy dokumentumon van kitöltött Olvasó típusú mező, és ő nem szerepel benne). Ha valakinek pedig Szerző (Author), Szerkesztő (Editor), stb. jogosultsága van a HL-ben, de nem szerepel egy dokumentum kitöltött Szerző típusú mezőjében, akkor akár Menedzser (Manager) jogosultsága is lehet a HL-ben, akkor sem tudja szerkeszteni ezt a dokumentumot. Sőt, ha nem a szerveren
keresztül nyitja meg, hanem lokálisan, akkor sem fogja tudni szerkeszteni. Még tovább menve, a fentiekből ez is következik: ha Menedzser jogosultsága van valakinek, és nem szerepel egy dokumentum kitöltött Olvasó típusú mezőjében, akkor nem is tudja elolvasni semmikor, és sehogyan sem. E fentebb leírt szabályozási lehetőségek rávilágítanak a Notes egyik igen kiváló tulajdonságára: a más adatbázis-kezelő rendszerekkel ellentétben nincs kitüntetett személy (pl. a rendszergazda), aki mindenhez hozzáfér, mindent el tud olvasni. A Dátum/idő mezőtípus Az Esemény űrlapon megismerkedtünk a Dátum/idő mezőtípussal. Most 161 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK lássuk részletesen is, hogy itt milyen paramétereket lehet beállítani. Azt már tudjuk, hogy ennek a mezőtípusnak az a tulajdonsága, hogy a beírt szöveget egy dátumnak próbálja értelmezni, és ha sikerült, akkor dátumként is tárolja. Ez azért jó, mert 6. Dátum típusú
műveleteket tudunk az ilyen mezők között végezni Pl ha kivonunk két ilyen mezőt egymásból (és azok dátumok voltak), akkor a kivonás eredménye a kettőjük között eltelt másodpercek száma. 7. Ha nem minden felhasználónak azonos a dátum-megjelenítés az alap operációs rendszerben (mert valaki, pl. a magyar megjelenítést kedveli, míg mások az angol típust), akkor is helyesen fog mindenkinek a saját maga által használt módon megjelenni a dátum, ill. az idő 3.12 ábra A Mezőtulajdonságok ablak első lapja Ha ezt a mezőtípust választjuk, az első lapon (Mező adatai - Field Info) a már megismert beállításokat végezhetjük el: Több érték engedélye – több érték is lehet a mezőben, Notes stílus és Dátum/idő gomb - Notes stílusú legyen a mező, vagy inkább az alap operációs rendszerben használt stílusú, Tabulátor tab sorrend stb. A második lap (Vezérlő) legfontosabb beállítási lehetősége, hogy a Dátum megjelenítése
(Display date) és az Idő megjelenítése (Display time) részek közül melyiket (vagy mindkettőt) állítjuk be. Ez mondja meg, hogy a mező csak dátumot jelenítsen meg, vagy az időt is, esetleg csak az időt. Lássuk 162 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK sorban, hogy milyen tulajdonságokat lehet még beállítani ennél a mezőtípusnál! 3.13 ábra A Dátum/idő típusú mező Mezőtulajdonságok ablakának második lapja !" Megjelenítés (On Display) rész: !" Használt beállítások (Use preferences from): ez azt mondja meg, hogy a mező hogyan jelenítse meg a dátumot: !" A Felhasználói beállítások (User’s settings) esetén minden felhasználónál úgy jeleníti meg, ahogyan az alap operációs rendszernél be van állítva: akinél magyar formátum, ott a magyar szerint, akinél az angol van beállítva, annál az angol szerint. !" Az Egyéni (Custom) esetében mind a Dátum megjelenítése, mind az Idő megjelenítése részben
beállíthatjuk, hogy pontosan hogyan is nézzen ki a mező által megjelenített dátum / idő. !" Minta (Sample): ide nem írhatunk, viszont a mai dátumot és a mostani időt megjeleníti a beállított formátum szerint. !" Dátumok megjelenítése (Display date): !" Dátum (Show): beállíthatjuk, hogy a dátumból mit szeretnénk megjeleníteni. Itt tulajdonképpen négy dolgot lehet megjeleníteni / nem megjeleníteni: év, hónap, nap, ill. a hét napjának megnevezése Fix 163 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK variációkból választhatunk, mint pl. mindegyik (Teljes - All), a hét napja, a hónap és a nap együtt (Csak a nap neve, hónap, nap - Only weekday, month and day) stb. !" A Speciális (Special) részben néhány opciót lehet még beállítani: !" Aktuális nap megjelenítése: Ma (Show ’Today’ when appropriate): a Ma (Today) szó megjelenítése a mai dátum helyett, amennyiben a beállított dátum azonos a mai nappal. !"
Mindig négyszámjegyű évszámok (Always show 4 digit year): mindig négy számmal jelölje az évet. !" 2000. után négyszámjegyű évek (Show 4 digit for 21th century): Csak a 2000 és az utána következő éveket mutatja négy számjeggyel. #" Tipp A 2000. után négyszámjegyű évek az alapbeállítás, azaz a Notes alapesetben csak akkor mutatja négy számjeggyel a dátum évét, ha 2000 utánra esik. A felhasználók azonban a 2000-es évi problémák miatt jobban szeretik, ha mindig négy jegyen mutatjuk a dátumot, tehát inkább javasolnánk a Mindig négyszámjegyű évszámok opció beállítását. Megjegyzés: Ettől a beállítástól függetlenül a Notes mindig négy jegyen tartja nyilván a dátumok éveit. !" Amennyiben a Megjelenítéskor részben a Használt beállításoknál az Egyénit választottuk, akkor még a következő lehetőségeket is beállíthatjuk: !" Formátum (Format): a dátumban szereplő adatok sorrendje !"
Elválasztók (Separators): az adatok között mi legyen az elválasztó karakter !" A Nap, Hónap, Év, Nap neve pontban meghatározhatjuk, hogy az egyes adatok milyen formában jelenjenek meg. Pl a napot egy vagy két számjegyen akarjuk-e megjeleníteni. !" Idő megjelenítése (Display time): !" Időpont (Show): kiválaszthatjuk, hogy az órák, percek, másodpercek közül mit, vagy miket szeretnénk megjeleníteni !" Az Időzóna (Time zone) pontban az időzóna nevének megjelenítését határozhatjuk meg: !" Idő helyi zónához igazítása (Adjust time to local zone) esetén a megjelenítendő időt korrigálja automatikusan az időzónának megfelelően, és a zóna nevét (pl. CET) nem jeleníti meg !" Időzóna állandó megjelenítése (Always show time zone) esetén a zóna nevét mindig kiírja az idő mellé. 164 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK !" Csak a helyitől eltérő zóna kiírása (Show only if zone not local) esetén
csak akkor írja az idő mellé a zóna nevét, ha az nem a helyi idő szerinti. !" Amennyiben a Megjelenítéskor részben a Használt beállításoknál az Egyénit választottuk, akkor még a következő lehetőségeket is beállíthatjuk: !" Formátum (Format): az időben szereplő óra részt 12 vagy 24 órával jelenítse meg, !" Elválasztó (Separator): az óra és a perc, ill. a másodperc között mi legyen az elválasztó karakter !" Beíráskor (On Input): !" Négyjegyű évszámot kell megadni (Require user enter four digit year): a felhasználótól követelje meg a dátum beírásakor, hogy négy számjeggyel írja be az évszámot !" Betűkkel kell megadni a hónapot (Require user enter alphabetic month): a felhasználótól követelje meg, hogy betűvel írja a hónap nevét 3.19 Dokumentumok titkosítása kulcsokkal Az előbbiekben bemutatott Szerző és Olvasó mező védelme dokumentum szintű. Még lejjebb is lehet menni: mező
szinten is lehet védeni az adatainkat Egy űrlapon szeretnénk felvenni mezőket, amelyek tartalmát el szeretnénk rejteni bizonyos felhasználók elől. Erre persze használhatnánk a már megismert elrejtési opciókat, amikkel a dokumentum bizonyos részeit nem láthatóvá tehetjük, viszont ezeknek van egy komoly hátránya: ugyanúgy, mint a többi mező, titkosítatlanul szerepelnek a dokumentumban. Így, bár a dokumentum megnyitásakor nem látjuk őket, ha a Dokumentumtulajdonságok ablakot kinyitjuk egy nézetben, akkor a mezők között még láthatjuk őket, és meg is tudjuk nézni a tartalmukat. Vagyis az elrejtési funkciók csak arra szolgálnak, hogy ne lásson bizonyos részeket a felhasználó, viszont titkosításra nem alkalmasak. 165 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK 3.14 ábra Az elrejtett mező értéke így megnézhető Ennek elkerülésére titkosítani lehet egy mezőt az űrlapon. Azt, hogy melyik mezőt szeretnénk titkosítani, az űrlap
tervezésekor el kell döntenie a tervezőnek. Ezeket a mezőket egy, vagy több kulcs segítségével titkosítja a Notes. Ezeket a kulcsokat mi hozhatjuk létre, hogy hogyan, az nemsokára kiderül. Ha létrehoztunk egy ilyen titkosított mezőt egy űrlapon, és létrehoztunk ezzel az űrlappal egy dokumentumot, akkor az ebbe a mezőbe írt adatot csak az fogja tudni elolvasni, aki rendelkezik azzal a kulccsal, amivel titkosították az űrlapot. Az összes többi mezőt mindenki el tudja olvasni Vagyis a titkosítás menete az, hogy a tervező létrehozza a titkosító kulcsot (esetleg kulcsokat), kijelöli a titkosítandó mezőket az űrlapon, majd beállítja, hogy az űrlap titkosítva legyen ezekkel a kulcsokkal, a felhasználó pedig létrehozza a dokumentumait. Titkosítást tehát űrlap szinten kell megadni, viszont titkosítani csak az űrlap kijelölt mezőit fogja a Notes, és mindet ugyanazzal a kulccsal. A titkosítás teljesen automatikus: akinek megvan a mező
dekódolásához szükséges kulcsa, annak a mező és a dokumentum ugyanúgy viselkedik, mintha nem lenne titkosítva: olvasható, szerkeszthető, stb. (az egyetlen különbség, hogy piros lesz a mező kerete). Akinek nincs kulcsa, az a mező helyén nem lát semmit: nem szerkesztheti, nem olvashatja, még akkor sem, a dokumentum szintű vagy HL szintű jogosultsága egyébként meglenne. Tehát ez a legerősebb védelem: ezt mezőszinten lehet alkalmazni. Megjegyzés Ha valakinek nincs kulcsa az űrlaphoz, akkor megnyithatja ugyan az űrlappal készített dokumentumot, de NEM szerkesztheti, még akkor sem, ha egyébként lenne rá jogosultsága! 166 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK Lássuk, hogyan lehet elkészíteni egy ilyen titkosításra alkalmas űrlapot! Kulcs létrehozása Először hozzunk létre egy vagy több kulcsot: !" A Notes futtató kliensen válasszuk a Fájl/Eszközök/Felhasználói azonosító (File/Tools/User ID) menüpontot. !" Írjuk be a
jelszavunkat. !" Válasszuk ki a Titkosítás (Encryption) részt. 3.15 ábra Titkosítási kulcsok !" Az Új (New) gombbal hozzunk létre egy új kulcsot: itt megadhatjuk a kulcs nevét és egy rövid leírást is írhatunk hozzá. Magát a kulcsot (a véletlen számokat) nem fogjuk soha látni, de ez számunkra nem is érdekes. Ha létrehoztunk egy vagy több kulcsot, akkor a kulcsok a Titkosítási kulcsok (Encryption keys) részben láthatók, a Megjegyzések (Comments) részben pedig a hozzájuk fűzött megjegyzéseink. A kulcsokat ebből az ablakból terjeszthetjük: 167 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK !" A Kulcs elküldése (Mail key) gomb megnyomásával elküldhetjük valakinek vagy valakiknek a kulcsot, és még egy rövid megjegyzést is fűzhetünk hozzá. Aki megkapta levélben a kulcsot, az a levél megnyitása után a Műveletek/Titkosítási kulcs elfogadása (Action/Accept encryption key) menüponttal beillesztheti az azonosítófájljába.
!" A Kulcs exportálása (Export key) gomb segítségével egy fájlba lehet írni a kulcsot, amit majd mások be tudnak olvasni. Az elmentéskor meg lehet adni jelszót, és csak az tudja majd beilleszteni, aki tudja a jelszót. Sőt, a biztonság fokozása érdekében azt is meg lehet adni, hogy ki legyen, aki egyáltalán beolvashatja a kulcsot. Így hiába jut illetéktelen kezébe a fájl, sőt akár a jelszó is, nem tudja használni. !" A kiexportált kulcs beolvasásához a Kulcs beolvasása (Import key) gombot kell használni. A fájl kiválasztása után be kell írni a jelszót, ha volt ilyen, a Notes pedig automatikusan ellenőrzi, hogy a kulcsot használhatja-e az illető. Ha minden rendben, fel lehet venni a kulcsot. !" Egy kulcs törléséhez a Törlés (Delete) gombot kell megnyomni. Az űrlap átalakítása a titkosításhoz Ha már van kulcsunk, akkor alakítsuk át az űrlapunkat: !" Nyissuk meg a Designerben az űrlapot. !" A titkosítani
kívánt mező Mezőtulajdonságok ablakát nyissuk meg, majd a harmadik (Speciális) lapon a Biztonsági beállításoknál (Security Options) a Titkosítás engedélyezése a mezőben (Enable encryption for this field) opciót jelöljük be: 3.16 ábra Mező titkosítása 168 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK !" Nyissuk meg az űrlap Űrlaptulajdonságok ablakát és a hetedik lapon (Biztonság - Security) válasszuk ki a kívánt kulcsot, vagy kulcsokat az Alapértelmezett titkosítási kulcsok (Default encryption keys) részben. 3. 17 Ábra A titkosítás engedélyezése az űrlapon Megjegyzések 8. A Web felől a titkosított mezők is látszódnak! Soha ne használjunk titkos mezőket arra, hogy Webes felhasználó elől elrejtsünk mezőket! 9. Ha több kulcsot is megadtunk az űrlap titkosításánál, akkor a felhasználónak ahhoz, hogy elolvassa és szerkessze a mezőt, elég csak az egyik kulccsal rendelkeznie. 10. A kulcsos rendszert lehet bonyolítani: el
lehet érni, hogy a felhasználó menet közben (azaz a dokumentum elmentése előtt) eldöntse, melyik kulccsal szeretné titkosítani a dokumentumát. Erre azonban nem térünk ki itt részletesen, a Notes Designer súgójában a „Creating a field that generates a list of secret encryption keys” című dokumentumból megkaphatjuk a választ. 3.110 Levélküldés a Válasz űrlappal Ha szeretnénk, hogy a felhasználó a szerkesztett dokumentumát, vagy annak egy részét el tudja küldeni, akkor az alábbi lehetőségek állnak rendelkezésünkre. !" Alapesetben minden űrlapnál megtalálható a Műveletek (Actions) menüben a Továbbítás (Forward) menüpont, amivel a dokumentumot egy levélbe ágyazva el lehet küldeni. 169 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK !" A dokumentum bezárásakor felajánlhatjuk az egész dokumentum elküldését valakinek: 3.18 ábra A dokumentum elküldése az ablak bezárásakor Ehhez: !" Az űrlap Űrlaptulajdonságok
ablakának a második lapján (Alapbeállítások) állítsuk be a Bezáráskor (On Close) részben az Üzenetküldés panel megjelenítése (Present mail send dialog) opciót. !" Vegyünk fel az űrlapunkra néhány speciális, fenntartott nevű mezőt: !" SendTo: ha ilyen nevű mezőt helyezünk el az űrlapon, akkor Notes az itt meghatározott felhasználónak fogja elküldeni a dokumentumot. Ez az egy kötelező mező, lehet a felhasználó által szerkeszthető, de lehet számított is. !" CopyTo: a levelezés CC mezőjének felel meg !" BlindCopyTo: a levelezés BCC mezőjének felel meg !" A többi, speciálisan a levélküldéshez fenntartott mezőnevekről a Notes súgójának a „Fields that control mailing options” című dokumentuma ad kimerítő leírást !" Ha a felhasználó ezek után bezárja a dokumentumát, akkor mindig meg fog jelenni a levél elküldését megkérdező ablak, és ha elküldi a felhasználó, akkor a fenti mezők
által beállított paraméterekkel fogja elküldeni a levelet a Notes. !" Érdemes figyelni arra, hogy a Notes ugyan elküldi levélként a dokumentumot, de mivel a dokumentum űrlapja nem található meg a levelesládában, ezért nem fog sokat látni a felhasználó. Hogy az ilyet elkerüljük, az űrlap Űrlaptulajdonságok ablakában az első lapon (Űrlap adatai) az Options részben jelöljük be az Űrlap eltárolása a dokumentumban (Store form in document) opciót, hogy az űrlap tervét is elküldjük a dokumentummal együtt. !" Ha egy műveletet, vagy egy Gombot hozunk létre, amibe a @Command([SendMail]) képletet írjuk, akkor a gomb, vagy művelet megnyomása után ugyanaz a levélküldő ablak jelenik meg, mint a fent 170 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK említett esetben, viszont csak akkor, ha a felhasználó akarja, nem minden dokumentum bezárása után. !" Levélküldésre használhatjuk a LotusScript megfelelő objektumának Send metódusát
is, amely alapesetben szintén a fenti mezőket használja, de megfelelően felparaméterezve megadhatók más levélküldési opciók is. Itt már azt is meg lehet tenni, hogy egy új, ideiglenes dokumentumot hozunk létre, amire felvisszük az elküldeni kívánt mezőket, és ezt a dokumentumot küldjük el, nem az eredetit. Sőt, megadhatjuk ezen ideiglenes dokumentumon, hogy az űrlap neve „Memo” legyen, amely űrlapnak a terve benne van a levelezési adatbázisunkban. Ekkor, ha jól töltjük ki ennek az ideiglenes dokumentumnak a mezőit, akkor egy szép, szabályos levelet lehet küldeni. !" Végül van még egy lehetőség is: a @SendMail. Ezt rögtön kétféleképpen is lehet használni: !" Ha paraméterek nélkül hívjuk meg, akkor az aktuális dokumentumot elküldi a dokumentumban lévő, fentebb leírt mezők segítségével. !" Ha paraméterekkel hívjuk meg, akkor viszont egy új dokumentumot, egy „sima” levelet küld a Notes a megadott
paraméterekkel. !" GYAKORLAT Ha a Válasz űrlapon a feladatkijelölést választjuk ki, és valakihez hozzárendelünk egy feladatot, jó lenne, ha az illető azonnal kapna is egy levelet, amikor elmentjük a dokumentumot. Ehhez jól használható a Kinek mező Bemenet átalakítása eseménye: ez az elmentés előtt biztosan lefut. Arra kell csak vigyázni, hogy csak az első elmentéskor szabad elküldeni a levelet, és csak az elmentéskor (frissítéskor ne). Ez elég egyszerű: írjuk a következő képletet a Kinek mező Bemenet átalakítása eseményébe: 3.19 ábra A képlet, amely elküldi a feladatkijelölésről szóló levelet 171 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK Ez a kis képlet egy egyszerű levelet küld a Kinek mezőbe felvett felhasználóknak: a levél tárgya a „Feladatkijelölés érkezett.” szöveg lesz, a levél törzse pedig a következőket tartalmazza (ha a feladat kijelölője Admin, a feladat rövid leírása pedig az „Ez egy rövid
leírás.” volt): 3.20 ábra A megérkezett levél A levél végén egy dokumentumlánc van, amelyre kattintva a megfelelő dokumentum megnyílik. Megjegyzés 11. A képlet utolsó sora azért kell, mivel a Notes vesszővel választja el a vezetékés keresztnevet, és ez kisebb konfliktusokat okoz Ezen kívül a mezőben csak a nevet akarjuk látni, a név többi részét (szervezeti egység, stb.) pedig nem Látható, hogy igazából csak ez az utolsó sor a része a „klasszikus” Bemenet átalakításának. 12. Az utolsó sor kivételével a többit akár a QuerySave eseménybe is írhattuk volna, mivel, mint már volt róla szó, az Notes 5-ös verziójában már ide is lehet képletet írni. Viszont a korábbi Notes verziót használók, ha a képletnyelvet akarják használni, akkor nincs más lehetőségük, csak ide írhatják ezt a képletet. 13. Ezt a képletet nem csak ennek a mezőnek a Bemenet átalakítása eseményébe írhattuk volna: bármelyik mezőt
használhattuk volna, de, hogy az űrlap tervezése áttekinthető maradjon, ajánlatos azt a mezőt használni, amelyik a leginkább érintett ebben műveletben. 3.111 Dokumentumok verziókövetése Minden űrlapon be lehet állítani, hogy a vele készített dokumentumok esetén az új dokumentum ne írja felül a régit, hanem megőrizze, így verziókövetéssel visszakereshetők legyenek a régebbi dokumentumok. Ehhez !" Nyissuk meg az űrlapot a Designerben. 172 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK !" Válasszuk az űrlap Űrlaptulajdonságok ablakának első lapját (Űrlap adatai). 3.21 ábra A verziókövetés beállítása !" A Verziók (Versions) részben, a Verziók (Versioning) pontban állítsuk be, hogy az új és a régi dokumentumok milyen hierarchia viszonyban legyenek egymással: !" Az új verziók válaszok lesznek (New versions become responses): mindig az új verziók lesznek az eredeti dokumentum „gyerekei” !" A korábbi
verziók válaszok lesznek (Prior versions become responses): a korábbi verziók lesznek az új verzió „gyerekei”. !" Az új verziók egyenrangúak lesznek (New versions become siblings): az új és a régi verziók között nem lesz szülő-gyerek viszony !" A Verziók létrehozása (Create versions) pontban pedig beállíthatjuk, hogy az új verziókat a felhasználó hozza létre a Fájl/Mentés új verzióként (File/Save as new version) menüponttal, vagy pedig automatikusan jöjjenek létre minden mentés után. 3.112 Az űrlapok továbbfejlesztéséhez szükséges egyéb tudnivalók Egyéb mezőbeállítások A Mezőtulajdonságok ablak első lapján (Mező adatai): !" A Stílus (Style) részben kiválaszthatjuk, hogy Notes stílusú legyen a mező (Notes stílus - Notes style), vagy pedig inkább az alap operációs 173 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK rendszerben használt stílust kedveljük (Operációs rendszer stílus - Native OS style). Ekkor
Windows esetén lehetőség van a mező szélességének (Width) és magasságának a beállítására (Height), ill. a magasság lehet dinamikus is (Változó magasság - Dynamic height), a szélességet pedig az ablak szélességének százalékában is megadhatjuk (Ablakméretnyi - Fit to window %). !" A Tabulátor (Tab key) részben !" Pozíció a tabulátorsorrendben (Position in tab order): A Tab gomb megnyomására a következő mezőre ugorhat a felhasználó. Itt az adható meg, hogy az ún. Tab sorrendben hányadik legyen ez a mező !" Kezdeti (alapértelmezett) fókusz a mezőnek (Give initial (default) focus): Ebben a mezőben legyen a kurzor, amikor szerkesztésre megnyitjuk a lapot. Megjegyzés: Ez az utóbbi opció az összes mezőtípusnál rendelkezésre áll. Táblázatok A táblázatokról már esett szó, most lássuk részletesen is, hogy miket is lehet beállítani egy táblázatnál. Az itt leírtakat próbáljuk is ki egy ideiglenes táblázatban,
amelyet ha akarjuk, később kitörölhetünk. Emlékeztetőül, a Táblázat létrehozásához: !" Használjuk a menüsor alatt lévő SmartIcon sor utolsó tagját: létrehozása - Create Table), vagy !" Válasszuk ki a Létrehozás/Táblázat (Create/Table) menüpontot. (Táblázat Itt megadhatjuk a táblázat induló méretét, de természetesen a táblázatból bármikor törölhetünk ill. hozzáfűzhetünk, beszúrhatunk sorokat vagy oszlopokat. Ha létrejött a táblázat és a táblázatban állunk a kurzorral, akkor a menüben előjön egy új menüpont (Táblázat - Table) és a SmartIconok is megváltoznak, három új SmartIcon gomb is feltűnik: segítségével az aktuális sor (amelyikben a kurzor áll) elé beszúrhatunk egy új sort, (Sor beszúrása - Table Insert Row) segítségével a táblázat aktuális sorát törölhetjük (Kiválasztott sor(ok) törlése - Table Delete Selected Rows), 174 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK gombbal
előhozhatjuk a Táblázattulajdonságok ablakot, ahol a táblázat különféle paramétereit állíthatjuk be (Table properties) Hozzuk elő a Táblázattulajdonságok (Table properties) ablakot: !" a már előbb említett SmartIcon segítségével, vagy !" a Táblázat menüpont Táblázattulajdonságok pontjának kiválasztásával 3.22 ábra A Táblázattulajdonságok ablak első lapja A Táblázattulajdonságok ablak első lapján a táblázat elhelyezkedését, elrendezését (Table Layout - Táblázat elrendezése) adhatjuk meg: A Táblázat rész Szélesség (Table, Width) legördülő listájánál a teljes táblázatra vonatkozóan a táblázat szélességét lehet meghatározni. Ehhez három lehetőségünk van: !" Az Ablakméretnyi (Fit to window) választásakor az egész táblázat mérete az éppen aktuális ablak-mérethez igazodik, azaz, ha kisebb ablakban nézzük az aktuális űrlapot, akkor kisebb lesz a táblázat, ha nagyobb ablakban, akkor a
cellákat széthúzza az ablak teljes méretére. !" A Margókhoz illeszkedik (Fit with margins) választásakor a margókat is figyelembe véve húzza szét a teljes képernyőre a táblázatot. !" Rögzített szélesség (Fixed width) esetén pontosan beállíthatjuk a táblázat szélességét. Itt még egy kis legördülő menü jelenik meg, amelyben beállíthatjuk, hogy a táblázatot az ablakban hová rendezze (jobbra, balra, középre). 175 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK #" Tipp Az Ablakméretnyi (Fit to window) és a Margókhoz illeszkedik (Fit with margins) lehetőségeket óvatosan használjuk: ha ugyanis egy teljesen más méretű ablakban nézi a felhasználó a táblázatunkat, mint amilyenben terveztük, akkor esetleg az űrlap kinézete teljesen összeomolhat, felborulhat. Ha viszont fix méretű táblázatot készítünk, akkor a legrosszabb esetben (nagyon kicsi ablak) is csak megjelenik az ablak gödülősávja, amely segítségével a
felhasználó minden cellát elérhet, és nagyjából az űrlap megjelenése is megmarad. Ugyanezen lap középső-alsó részében (Cella - Cell) a cellákra vonatkozóan adhatunk meg paramétereket. !" Szélesség (Width): Az adott cella szélessége !" Függőlegesen igazít (Vertically Align): Az adott cellán belül a szöveg függőlegesen hol helyezkedjen el (fent, lent, középen) !" Minimum magasság (Minimum height): Legalább ilyen magas legyen egyegy cella !" Sortávolság (Row spacing): Egy-egy sor között ekkora legyen a távolság !" Oszloptávolság (Column spacing): Egy-egy oszlop között ekkora legyen a távolság Figyelem! Az utolsó három paraméter (értelemszerűen) az egész táblázatra vonatkozik, míg az elsők csak a kijelölt, ill. aktuális cellákra 3.23 ábra A Táblázattulajdonságok ablak második lapja 176 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK A második lapon (Cellaszegély - Cell Borders) az egyes cellák keretét
határozhatjuk meg. A cella szegélyének stílusa (Cellaszegély stílusa - Cell border style) lehet bemélyített, egyszerű vonal, vagy domborított. Beállíthatjuk a cellák kereteinek színét is a Szín (Color) ablakban. Ezek a paraméterek a teljes táblázatra vonatkoznak. Az ez alatti részen a szegély szélességét állíthatjuk be (Cellaszegély vastagsága - Cell Border Thickness): az aktuális cella, ill., ha több cella ki van jelölve, akkor az összes cella megfelelő szegélye a beállított szélességű lesz. A három legalsó gomb egy kicsit meggyorsítja a keretek létrehozását: !" Az első az aktuális (vagy az összes kijelölt) cella mindegyik keretét törli, !" A második mindet 1 szélességűre állítja, !" A harmadikkal pedig több cella körül létrehozhatunk egy keretet a belső vonalak nélkül. Ez a gomb tulajdonképpen nem tesz mást, mint a kijelölt cellák belső kereteit törli. Vagyis egy több cellát átfogó kerethez
először ki kell jelölni a cellákat, meg kell húzni néhány keretet (pl. a Mind 1 - Set All to 1 gomb megnyomásával), és ezek után kell a Szerkezet (Outline) gombot használni, amely a belső cella-kereteket törli. A lap jobb oldalán található nagy fel és le nyilakkal mindegyik vastagságot egyszerre lehet állítani. A Táblázattulajdonságok ablak harmadik lapján (Táblázat/cella háttere Table/Cell background) a táblázat ill. a cellák hátterét lehet megadni 3.24 ábra A Táblázattulajdonságok ablak harmadik lapja 177 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK A Táblázat színe (Table color) résznél a táblázat egészére vonatkozóan lehet megadni színezéseket. A Stílus (Style) legördülő menüben kiválaszthatjuk, hogyan akarjuk színezni a táblázatot: !" Nincs (None): Ne legyen színezve !" Egyszínű (Solid): egységesen, egy színnel !" Váltakozó sorok/oszlopok (Alternating rows/columns): Két színel felváltva a sorokat vagy
az oszlopokat !" Bal oldali és felső (Left and Top): A bal oldal első celláját és a legfelső sort egy színnel, a többit egy másikkal. !" Stb. Ha valamilyen színezést választunk, kiválasztásának lehetőségei is. akkor megjelenik a szín(ek) A Cellaszín (Cell color) részben az aktuális vagy a kijelölt cellák színeit lehet beállítani: !" A Szín (Color) pontban beállíthatjuk a cella színét, !" A Stílusnál (Style) pedig kiválaszthatjuk, hogy a cella egésze ilyen színű legyen (első gomb), vagy pedig vízszintesen (második) ill. függőlegesen (harmadik gomb) átmenjen valamilyen másik színbe. Ha ezen utóbbiak közül valamelyiket kiválasztjuk, akkor megjelenik még egy szín-kiválasztási lehetőség is. !" Az Alkalmazás mindenre (Apply to all) gomb megnyomásával a teljes táblázat minden cellája átveszi a kiválasztott cella színét. A Cellakép (Cell image) részben a cellákba egy képet is elhelyezhetünk
háttérnek. A Forrás (Source) felirathoz beírhatjuk a nevét (az Erőforrásokhoz (Resources) fel kell venni ehhez először a képet), a kis mappára kattintva kiválaszthatjuk (ha nem tudjuk fejből), ill. a kis @ jelre kattintva beírhatunk egy függvényt, amelynek egy erőforrás neve lesz az eredménye (így dinamikusan, az épp aktuális környezethez igazodva lehet a megfelelő képet kiválasztani). Az Alkalmazás mindenre (Apply to all) gomb megnyomásával itt is a teljes táblázat minden cellája átveszi a kiválasztott cella mintáját. A bal alsó sarokban lévő kis kép pedig arra próbálja felhívni a figyelmet, hogy mi is az egyes beállítások egymásra gyakorolt hatása, azaz: a cellában elhelyezett kép a legfelső, alatta van a cella színe, ez alatt pedig a táblázat 178 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK színe. Ha tehát mindhármat beállítjuk, akkor a cellabeli kép fog az adott cellában háttérként látszani. A Táblázattulajdonságok
ablak negyedik lapján (Táblázat szegélyek - Table borders) a táblázat keretét lehet megadni. 3.25 ábra A Táblázattulajdonságok ablak negyedik lapja Fontos tudni, hogy ez a keret nem az egyes cellák keretét változtatja meg, hanem egy „külső”, „független”, önálló keretet hoz létre a táblázat körül. !" A Szegélystílus (Border style) lehet egyvonalas, kétvonalas, pontozott, stb. !" A Szín (Color) részben a keret színét állíthatjuk be. !" A Szegélyeffektusnál (Border effects) beállíthatjuk, hogy szeretnénk-e árnyékolást (Árnyék - Drop shadow), ill. ha igen, akkor milyen vastag legyen (Szélesség - Width). !" A Vastagság (Thickness) részben a keret vastagságát lehet beállítani, hasonlóan, mint a cellák keretének meghatározásakor. !" A Vastagság feliratra kattintva pedig ki lehet választani, hogy minek a vastagságát szeretnénk állítani: !" Vastagság: A keret vastagságát állítjuk !"
Belül (Inside): A keret és a cellák közötti rész távolságát állíthatjuk !" Kívül (Outside): A keret és a táblázatot körülvevő egyéb dolgok (feliratok, mezők, stb.) távolságát állíthatjuk Az ötödik lapon (Táblázat margói - Table margins) a táblázat margóit lehet beállítani. 179 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK 3.26 ábra A Táblázattulajdonságok ablak ötödik lapja !" A Táblázatmargó (Table margin) részben a jobb és a bal oldali margót lehet beállítani százalékosan (Relatív - Relative%) és abszolút számokkal (Abszolút - Absolute) !" A Tördelés (Table wrap) részben azt lehet meghatározni, hogy a táblázat körül a szöveget törje-e meg (Szövegtörés a táblázat körül - Wrap text around table), ill. hogy a táblázaton belül a cellák között a szöveget tördelje-e szét bizonyos magasságonként. !" A Kompatibilitás (Compatibility) részben az R4-es cellatípus használatát lehet
beállítani, amennyiben szükséges a kompatibilitás az előző verziókkal. A Táblázattulajdonságok ablak hatodik lapján (Táblázat sorai - Table rows) a táblázat sorainak tulajdonságait lehet beállítani. 3.27 ábra A Táblázattulajdonságok ablak hatodik lapja 180 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK !" A Speciális sormegjelenítés (Special table row display) részben be lehet állítani, hogy a táblázat minden sora egyszerre látszódjék (Minden táblázatsor megjelenítése - Show all table rows), vagy egyszerre csak egy sort lehessen látni (Egyszerre csak egy sor látszik - Show only one row at a time) Ha a második lehetőséget választjuk, akkor a táblázatunknak egyszerre csak egy sorát lehet látni és mindegyik sornak lesz egy saját „füle”, amit el is nevezhetünk. Hogy melyik sor fog látszani, azt az ez alatti részben lehet beállítani: !" Megjelenítendő sor (Which row to display): Itt három lehetőségünk van: !" A
címkékre kattintva jelölhető ki (Users pick row via tab buttons): a felhasználó a fülek segítségével kiválasztja a kívánt sort !" Sorváltás milliszekundumonként (Switch row every milliseconds): automatikusan a beállított idő után a következő sort mutatja a Notes !" Programozott sorváltás (Switch rows programmatically): Ekkor létre kell hoznunk egy $table-name mezőt, amelynek az értéke egy fül nevét kell tartalmazza (itt használhatjuk a Notes függvényeit), és ez a sor fog látszani. Be lehet még azt is állítani itt, hogy azért a felhasználó is tudjon „kézzel” váltani a sorok közül (A címkék is megjelennek a sorválasztásnál - Also show tabs so user can pick row). !" Ha az első tábla-típust választjuk, akkor alul, a Címke szövege (Tab label) részben nevet adhatunk a fülnek. !" Ha a második típust választjuk, akkor megadhatjuk, hogy az új sor hogyan jöjjön elő az Átvitel sorváltáskor (Transition
when switching rows) részben: !" Effektus (Effect): Milyen effektus segítségével tűnjön el a régi, ill. jelenjen meg az új. Itt elég sok effektus közül választhatunk: fentről lefelé, balról jobbra, egy robbanás segítségével, stb. váltson !" Lépegetés a sorok között (Cycle through rows): Minek a hatására történjen az előrehaladás a sorok között. !" Folyamatosan (Continually): Folyamatosan, egymás után megjelennek !" Továbblépés kattintásra (Advance on click): Egérkattintásra lép a következőre !" Egyszer, megnyitáskor (Once when opened): Csak egyszer mutatja meg mindet akkor, amikor megnyitódik a lap !" Egyszer, kattintásra (Once on Click): Egyszer, egy egérkattintásra 181 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK A Táblázattulajdonságok ablak utolsó, hetedik lapján (Táblázat programozása - Table programming) a táblázat Web-es megjelenítésekor esetleg szükséges HTML kódokat lehet finomítani.
#" Tipp Fontos tudni, hogy az itt leírt táblázattulajdonságok nagy része az egyszerű szövegszerkesztéskor is használhatók! Összekapcsolódó űrlapok csoportba foglalása Ha vannak (logikailag) összekapcsolódó űrlapjaink, amelyek valamely tevékenységeket így együtt fednek le, akkor érdemes esetleg ezeket a menüben is összefogni, hogy ugyanannak a menüpontnak legyenek az almenüi. Ugye emlékszünk? A dokumentumokat a Létrehozás (Create) menüből (is) hozhatunk létre. Az ügyfélnyilvántartás példánkban van (lesz) három űrlap is, amelyeket például egy csoportba foglalhatunk majd. A Létrehozás menü e helyett: 182 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK így is kinézhetne: Ez azért praktikus, mivel egy adatbázisban sok (akár nagyon sok) űrlap is lehet, ha mindegyik fel lenne itt sorolva, amelyikkel létre lehet hozni dokumentumot, akkor esetleg teljesen áttekinthetetlenné válhatna a menü. Ahhoz, hogy az űrlapok ebben a formában
jelenjenek meg, a következőket kell tenni: 14. Nyissuk meg az űrlapot tervezés módban, és jelenítsük meg az Űrlaptulajdonságok ablakot. 15. Az Űrlap nevéhez írjuk be az almenü nevét, amelyikből ez az űrlap nyílik, írjunk utána egy „” karaktert, majd az űrlap nevét. 16. Mentsük el és zárjuk be az űrlapot Például, az Ügyfélnyilvántartás adatbázis már létező három űrlapjának lehetnének ezek a neveik: ÜgyfélnyilvántartásCégkártya ÜgyfélnyilvántartásEsemény ÜgyfélnyilvántartásVálasz #" Tipp Az űrlap neveknek pontosan kell egyezniük, amikor hivatkozunk rájuk, beleértve a szóköz karaktereket és a kis- és nagybetűket is. Viszont szeretnénk, ha a felhasználó, amikor egy űrlapot fel akar használni, akkor beszédes nevű űrlapok közül választhassanak. Ezt segíti, hogy ún szinonim neveket is lehet az űrlaphoz rendelni. Erről már az első fejezetben, a CD 183 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK
nyilvántartás adatbázisnál tanultunk. A második nevet, mint tudjuk, a | (függőleges vonal) karakterrel kell elválasztani az elsőtől. Ha viszont ilyen hosszú nevet adunk egy űrlapnak, mint a fentiek, akkor elég nehézkes lesz hivatkozni rájuk. Ezért használjunk másodlagos neveket is A példánk szerinti három űrlap nevei lehetnek ezek is: ÜgyfélnyilvántartásCégkártya | Cégkártya ÜgyfélnyilvántartásEsemény | Esemény ÜgyfélnyilvántartásVálasz | Válasz Ekkor pl. a Cégnyilvántartó űrlapra „Cégkártya” névvel is hivatkozhatunk #" Tipp Ha egy űrlapot a tervezés során valami miatt át kell neveznünk, de tudjuk, hogy az adatbázisban már több helyen van hivatkozás erre az űrlapra, még a régi névre, akkor az új nevet egyszerűen írjuk az Űrlaptulajdonságok ablak Űrlap neve mező elejére, majd a régi név és az új név közé tegyünk egy | karaktert. Ekkor a régi nevet egy szinonimaként megtartottuk, tehát az
adatbázisban minden működik helyesen tovább, a felhasználó pedig már az új névvel hivatkozhat rá. 3.2 Nézetek indexelése A nézetekről tudni kell, hogy minden nézethez a Notes készít egy ún. indexet, amiben azoknak a dokumentumoknak a listáját tárolja, amelyek a nézetben szerepelnek. Ha egy dokumentum megváltozik, akkor a változás csak akkor fog megjelenni a nézetben, ha a nézet indexe felfrissül. Sőt, nem csak a nézet indexének kell felfrissülnie, hanem a képernyőn megjelenő nézetnek is. Tehát: megváltozik egy dokumentum. Ha sem a képernyő, sem a nézet indexe nincs frissítve, akkor a nézetben nem látható a változás. Ha a nézet indexe felfrissül, akkor már a nézet helyes adatokat fog tartalmazni: ekkor már egy képlettel való lekérdezés helyes eredményt ad. Viszont, ha a nézet éppen meg van jelenítve a képernyőn, ott még nem biztos, hogy a jó eredmények látszanak: ehhez a képernyőt is fel kell frissíteni. A nézet
indexének frissítését a nézet Nézettulajdonságok ablakának negyedik (Speciális - Advanced) lapján lévő Indexfrissítés (Refresh index) opció szabályozza (ha a nézet Naptár stílusú, akkor a hatodik lapon van). A képernyő frissítését pedig a nézet Nézettulajdonságok ablakának második lapján (Beállítások) lévő Frissítéskor opcióval lehet befolyásolni. 184 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK Megjegyzés A nézetek indexe nem csak azért fontos, hogy a felhasználó helyes dokumentumokat lásson a nézetben, hanem azért is, mivel egy-egy index elég sok helyet foglal az adatbázison belül (megabájtokat jelenthet már egy kisebb adatbázisnál is), főleg ha sok dokumentum van egy adatbázisban. Megjegyzés Sokan össze szokták keverni a Teljes szöveges keresés indexét és a nézet indexét. Ne essünk ebbe a hibába! A Teljes szöveges keresés indexét mi hozzuk létre (ha akarjuk), és a teljes adatbázisra vonatkozik, külön
alkönyvtárban tárolódik a háttértáron, és a dokumentumok tartalmát indexeli. A nézet indexét a Notes mindig létrehozza, legkésőbb ha megnyitunk egy nézetet: egy nézet első megnyitásakor a Megnyitás (Opening) szöveg villog az állapotsorban, ezért kell tovább várni,. Az index tehát a nézetben szereplő adatokat tartalmazza a benne szereplő dokumentumokról és a fentebb ismertetett paraméterek függvényében frissítődik. Magában az adatbázisban tárolódik; egy nézet indexének létrejöttét legfeljebb az adatbázis méretének megnövekedéséből vehetjük észre. A két indexnek tehát semmi köze egymáshoz! Hogyan tudjuk befolyásolni egy nézet indexének frissítését (Indexfrissítés opció)? 3.28 ábra A nézet indexének paraméterei 185 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK !" Automatikusan, az első használat után (Auto, after first use): ez az alapbeállítás. Ha ezt választjuk, akkor a nézet indexének frissítése mindig
automatikusan megtörténik, de csak a nézet első megnyitása után jön létre maga az index. Ez tehát helytakarékos megoldás !" Automatikusan (Automatic): Mindig automatikusan frissítődik az index, és az indexet akkor is létrehozza a nézethez, ha soha nem is nyitjuk ki ezt a nézetet. Ez viszont azt jelenti, hogy amikor először megnyitjuk a nézetet, akkor már nem kell várakoznunk az index létrehozására, mert az már készen van. (Egy index létrehozása sok dokumentum esetén akár perceket is igénybe vehet, viszont nélküle nem lehet látni semmit a nézetből, ezért amíg elkészül az index, a felhasználó vár.) !" Kézzel (Manual): csak akkor frissítődik a nézet indexe, ha a felhasználó megnyomja az F9 gombot, így a nézet nem lesz felfrissített, csak a felhasználó külön kérésére. Ez azért lehet előnyös, mivel igen gyorsan megnyitható a nézet. !" Automatikusan, legfeljebb minden x órában (Auto, at most every x hours):
Ekkor a nézet indexe nem frissül, csak legfeljebb x óránként. Ez akkor hasznos, ha sok dokumentum van az adatbázisban, és ezek elég gyakran frissülnek. Így nem kell mindig kivárni a frissítést, de x óránként biztosan felfrissül az index. Természetesen a manuális frissítés (F9 gomb) mindig használható. A képernyő frissítésének szabályozásával azt tudjuk befolyásolni, hogy a felfrissült indexű nézetet hogyan lássa a felhasználó. A képernyő frissítésére vonatkozó opciók (Frissítéskor opció): 3.29 ábra A képernyő-frissítési opció 186 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK !" Kijelző megjelenítése (Display indicator): ez az alapbeállítás. Ha az index felfrissült, akkor a frissítés információk nem jelennek meg a nézetben, hanem a régi adatokat látjuk, viszont megjelenik a már mindenki által ismert kis ikon, amire rákattintva a képernyő is felfrissítődik. !" Képernyő frissítése (Refresh display):
automatikusan felfrissíti a képernyőt az index frissítése után, és csak akkor mutatja meg a nézetet, amikor már az egész felfrissült. !" Képernyő frissítése a felső sortól (Refresh display from top row): ekkor is automatikusan felfrissíti a képernyőt, de fentről kezdi, és rögtön meg is mutatja az eredményt (azaz a felső sorokat). Ez akkor jó, ha sok dokumentum van az adatbázisban, de a felhasználó nem akarja végigvárni az összes frissítését, mivel csak az első sorok eredménye érdekli. !" Képernyő frissítése az alsó sortól (Refresh display from bottom row): ugyanaz, mint az előbbi, de az utolsó sor felől kezdi a frissítést. Indexek törlése Előírhatjuk, hogy bizonyos időközönként törölje a Notes az indexeket. Ez azért szükséges, mert – mint ahogy már említettük – az indexek elég sok helyet foglalnak. Ezt a Nézettulajdonságok ablak Speciális lapján lévő Index törlés (Discard Index) opcióval
szabályozhatjuk: !" Minden használat után (After each use): minden alkalommal, amikor az adatbázist bezárjuk, a Notes törli a nézet teljes indexét. Ez rendkívül helytakarékos megoldás, viszont a nézet minden megnyitásakor újra létre kell hozni az indexet. !" Ha nem aktív x napig (If inactive for x days): ha x napja nem volt használatban a nézet, akkor törli a Notes a nézet indexét. Természetesen, ha újra kinyitják a nézetet, akkor újra felépül az index. Ritkán használt adatbázisoknál érdemes használni. !" Soha (Never): ez az alapértelmezés. Megtartja a nézet indexét és ezt frissíti mindig. Mivel sok helyet foglal az index, gyakran használt adatbázisoknál érdemes használni. 3.3 Adatbázis szintű védelem (ACL) Miután elkészítettük az adatbázisunkat, a szerverre való másolás előtt végig kell gondolnunk a jogosultságok kérdését. A Notes az egyes felhasználókra és csoportokra vonatkozó jogosultságokat a
hétszintű hozzáférés-ellenőrzési lista (access control list, ACL) alapján ellenőrzi. 187 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK A jogosultsági listát a munkaterületen lévő adatbázisikonra való kattintás után a Fájl/Adatbázis/Hozzáférés (File/Database/Access Control) menüpont kiválasztásával szerkeszthetjük. 3.30 ábra Hozzáférési lista ablaka Az Alapok (Basics) lapon az egyes személyekre, csoportokra vagy szerverekre kattintva láthatjuk és állíthatjuk be azok jogosultsági szintjeit. A listába új sort a Hozzáadás (Add) gombbal vehetünk fel, míg egy létező sort átnevezni az Átnevezés (Rename), törölni a Törlés (Remove) gombbal lehet. A felhasználótípus a következő lehet: !" !" !" Nincs megadva (Unspecified) Célszerű a többi paraméterrel meghatározni a pontos típust. Ha pl egy szerver neve mellett nem adjuk meg a „szerver” típust, akkor a szerver azonosítójával kliensként vagy szerverként is
beléphetünk a rendszerbe, és mivel a server.id-nek nincs jelszava, ez komoly biztonsági rés lehet. Ugyanennek az ablaknak az Egyéb lapján található egy Meghatározatlan típusú felhasználók kikeresése (Look Up User Types for ’Unspecified’ Users) gomb, amivel a Nincs megadva típusok a Címjegyzék alapján kicserélődnek egy szigorúbb meghatározásra. Személy (Person): egyedi felhasználónév megadásánál Személyek csoportja (Person group) 188 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK Az egyedi felhasználónevek megadásánál praktikusabb csoportok neveit megadni, mivel így könnyebben (egy helyen, a Címjegyzékben) változtathatók az egyes adatbázisok hozzáférési listái. !" !" !" Szerver (Server) Szerverek csoportja (Server group) Vegyes csoport (Mixed group) Ezt a változatot is érdemesebb elkerülni a Nincs megadva pontban említett okokból. A hozzáférési jogosultságok kiértékelése: 17. Minden személyhez
meghatározódik, melyik csoportokba tartozik, és azok esetleg szerepelnek-e a hozzáférési listában. Ha sem egyénileg, sem csoporton keresztül nem található meg a listában, és web felhasználó, akkor az Anonymous-nak megfelelő jogot kapja, egyébként a -Default- jogát kapja. 18. Ha a személy valamilyen csoporton keresztül vagy egyénileg a Nincs hozzáférés jogot kapta, akkor az adatbázishoz nincs hozzáférése. 19. Minden egyéb esetben a legerősebb jog illeti meg A hozzáférési jogosultságok a leggyengébbtől a legerősebbig a következők: !" Nincs hozzáférés (No access) Ilyen esetben az adatbázishoz nincs hozzáférésünk. Általában az adatbázisok -Default- csoportjának adjuk ezt a jogot. !" Elhelyező (Depositor) Ha ilyen joggal rendelkezünk egy adatbázishoz, akkor létre tudunk hozni dokumentumokat, de se a más által létrehozott, se a saját dokumentumainkat nem láthatjuk. Az ilyen jogosultságra példa lehet egy
„Szavazóláda” adatbázis, ahol mindenki egy űrlapon nyilváníthat véleményt, de senki másnak a véleményét nem láthatjuk. (Természetesen akik összegzik a véleményeket, azoknak nagyobb jogosultsággal kell rendelkezniük.) !" Olvasó (Reader) Ha ilyen joggal rendelkezünk, akkor az adatbázisban található összes dokumentumot elolvashatjuk, viszont nem hozhatunk létre egyet sem. Például egy „Céghírek” adatbázisba csak a szerkesztők írhatnak bele, nekünk csak olvasó jogosultságunk van. !" Szerző (Author) Ilyen joggal az adatbázis összes dokumentumát olvashatjuk, és saját dokumentumot is létrehozhatunk. Szerkeszteni viszont csak a saját dokumentumainkat lehet. Példa erre egy „Munkatársaink adatai” nevű 189 3. TOVÁBBI FEJLESZTÉSI ESZKÖZÖK adatbázis, ahol a cég minden egyes alkalmazotta kitölthet egy személyi űrlapot, sőt a saját űrlapját mindenki módosíthatja is. !" Szerkesztő (Editor) Ilyen jog esetén
létrehozhatunk új dokumentumokat is, sőt szerkeszthetjük az adatbázis összes dokumentumát. Ilyen jogosultságot kap pl a „Céghírek” szerkesztő munkatársa. !" Tervező (Designer) Ilyen jogosultsággal az adatbázisok szerkezetét, felépítését lehet megváltoztatni. Általában az adatbázis fejlesztője rendelkezik ilyen jogosultsággal. !" Kezelő (Manager) Az ilyen jogosultsággal rendelkező személy megváltoztathatja a hozzáférési listát is. Általában a rendszeradminisztrátor kap ilyen jogosultságot A hozzáférési jogok szintjeit finomíthatjuk a törlési és egyéb jogokkal (pl. Dokumentumok törlése, Delete Documents kapcsoló), továbbá a létező (és az adatbázisban felhasznált) szerepkörökkel. Új szerepköröket (roles) a Szerepkörök lapon vehetünk fel Az első fejezetbeli CD nyilvántartás adatbázisunkban az alábbi ACL-t javasoljuk: !" !" !" !" -Default-: Nincs hozzáférés Anonymous: Nincs
hozzáférés CDnézegetők (csoport): Olvasó Adminisztrátorok (csoport): Kezelő + törlési jog A második fejezetbeli Ügyfélkövetés adatbázisunkban az alábbi ACL-t javasoljuk: !" !" !" !" !" -Default-: Nincs hozzáférés Cégdolgozók (csoport): Olvasó Titkárnők (csoport): Szerző Projekt menedzserek (csoport): Szerkesztő + törlési jog Adminisztrátorok (csoport): Kezelő + törlési jog 190 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI 4. Irány a web: Ödönke honlapja Ebben a fejezetben a CD nyilvántartás nevű Lotus Notes alkalmazásunkat fejlesztjük tovább úgy, hogy azt a Lotus Domino webszerverünkre helyezve egy mutatós honlapot képezzen. 4.1 Webes eszközök bemutatása A Lotus Domino R5-ben az alábbi új tervezési elemek jelentek meg: !" !" !" !" keretkészlet (frameset) lap (page) szerkezet (outline) képerőforrások (picture resources) Ezek a tervezési elemek mindegyike használható kizárólag
Notes-os környezetben is. Keretkészlet A keretkészlet keretek együttese, segítségével a képernyő logikus egységekre osztható fel. A keretek egymástól független gördítősávval rendelkeznek. Szokásos struktúra az, hogy a képernyőn található felső keret a cégre jellemző fejlécként szolgál, a bal oldali keret pedig a középső terület tartalmát meghatározó pontokat tartalmazza. A középső terület a honlap lelke, itt találhatók meg az információk. Lap A lap az űrlaphoz hasonló tervezési elem. Az űrlapot információk begyűjtésére és megjelenítésére használhatjuk, míg a lap kizárólag az infomációk megjelenítésére használható. Ezzel összhangban a lapon nem használhatunk mezőket és nem beszélhetünk szerkesztő módról, viszont képeket, appleteket, linkeket illeszthetünk be, használhatunk táblázatokat és szövegeket is a karakterformázási eszközökkel, sőt natív HTML szövegeket is elhelyezhetünk rajta. A lapon
beágyazott elemeket is használhatunk, mint a beágyazott szerkezet vagy a beágyazott nézet. Ezekről a fejezet későbbi részében lesz szó 191 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA 4.1 ábra Lotus Magyarország honlapja Szerkezet A szerkezetek a navigátorokhoz hasonlóan az adatbázisban való eligazodást segítik. Egy Notes adatbázis alaphelyzetbeli navigációs felülete a bal oldali nézet panelben a nézeteket és a gyűjtőket mutatja. Ezekre rákattintva láthatjuk a főablakban a nézet vagy gyűjtő tartalmát, vagyis a dokumentumok listáját. Ugyanez az adatbázis a webről megtekintve linkekként mutatja a nézeteket és gyűjtőket. Ezekre rákattintva láthatjuk a nézet megjelenési formáját, vagyis a dokumentumokat linkekként. Ha ez a felület nem megfelelő számunkra, akkor kell a szerkezeteket használni. A szerkezetek valamely sorára kattintva lehetőség van egy másik adatbázis valamely elemét is megjeleníteni, akár egy nézetet, akár egy
lapot vagy űrlapot. Képerőforrások A web-, illetve a Notes alkalmazásokban is sok helyen előfordulnak képek (pl. céglogó) Ha ezeket több helyen használjuk, akkor célszerű képerőforrásként felvenni azokat. Így egy kép változása esetén azt csak egy helyen kell frissíteni, míg az összes hivatkozott helyen automatikusan frissül. Képerőforrás használata esetén sebességnövekedést is elérhetünk, mivel a kép automatikusan gif vagy jpeg formátumra konvertálódik és így kisebb helyet foglal el. 192 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA 4.2 Adatbázisunk jelenlegi megjelenése a weben Tekintsük meg eddig elkészült CD nyilvántartás adatbázisunkat a weben. Ennek kétféle módja van: !" A Designerben a Tervezés/Megtekintés webböngészőben/Alapértelmezett böngésző vagy Internet Explorer (Design/Preview in Web Browser/Default Browser) menüpontot választjuk, vagy a megfelelő ikonra kattintunk a jobb felső sarokban: Ezt a pontot
közvetlenül csak létező elemek (pl. nézet, űrlap) esetén választhatjuk, az adatbázis esetén nem. Ha viszont egyszer – egy adott elemnél – már előhívtuk a böngészőt, utána már az adatbázist is megtekinthetjük. Ekkor a szintaktika a következő: http://localhost/cdnyilv.nsf !" Állítsunk fel egy szervert, majd indítsuk el a http szerverfeladatot. Ezután a szerver megszólítható http hívásokkal, tehát az adatbázisunkat az alábbi paranccsal tekinthetjük meg egy tetszőleges böngészőből: !" http://szervernév/cdnyilv.nsf Figyelem! A Lotus Domino Designer a Microsoft Internet Explorer 4.01 SP1 és a Netscape Navigator 4.5, vagy újabb változatait támogatja Ez azt jelenti, hogy a Designer Megtekintés webböngészőben alatti pontjaira kattintva ezeknél alacsonyabb verziószám esetén fura dolgokat produkálhat. A felhasználók számára készített honlapok régebbi verziókkal is megtekinthetők, viszont bizonyos tulajdonságok (pl.
egyes Java kisalkalmazások) nem támogatottak. Webre történő fejlesztés esetén minden esetben ellenőrizzük az adatbázis megjelenését a használandó böngészőkben! A könyvbeli adatbázist az Internet Explorer böngészővel történő megtekintéshez optimalizáltuk. 193 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA Nyissuk meg a már elkészített adatbázisunkat weben keresztül. A megnyitás után először a nézeteket láthatjuk: 4.2 ábra A CD nyilvántartás nézetei a webről Ha belemegyünk az egyik, mondjuk az 1. Előadó szerint nézetünkbe, a következőket láthatjuk: 4.3 ábra A CD nyilvántartás nézetei a webről 194 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA Az adatbázisunk egyik dokumentuma pedig a következőképpen fest: 4.4 ábra A CD űrlap megjelenése a webről Megfigyelések, tanulságok: !" Az űrlap nem megfelelően jelenik meg, a tabulátor nem használható webes alkalmazásokban. !" Ha szerkesztjük az űrlapunkat, akkor
észrevehetjük, hogy a párbeszédlisták (pl. az előadó nevének kiválasztása) nem működnek !" A létrehozott műveletek egy része látszik (Új CD, Szerkesztés), míg más része (Ment, Ment és kilép) nem látható. A szerkesztett űrlap alján pedig egy Submit feliratú gomb jelenik meg, ezzel menthetjük el újonnan létrehozandó dokumentumainkat. 4.3 Tervezett rendszer A tervezett rendszer két fő részből áll: !" Egyrészt a honlapot készítjük el, amely a kezdőképernyő lesz az adatbázis webről történő megnyitásakor (sőt szerver esetén a szerver nevének böngészőbe való írásakor). Ez a kezdőlap a feliraton és egy jelképes képen kívül összesen egy linket fog tartalmazni, amivel a CD nyilvántartás tekinthető meg (4.5 ábra) !" A CD nyilvántartás megjelenítése keretkészlettel történik majd. A fejlécben (banner) egy jelképes „cégjelzés” látható, míg a bal oldalon a nézetnek megfelelő szerkezet látható,
amelynek különböző pontjainak kiválasztásával a középső keretben a megfelelő nézet látható. A szerkezetbe felveszünk egy, a honlapra vis??szamutató linket is (4.6 ábra) 195 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA 4.5 ábra A tervezett honlap képernyőképe 4.6 ábra A tervezett keretkészlet képernyőképe 196 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA Mint láthatjuk, a most elkészítendő honlap valószínűleg nem kerül be az ország TOP 100 legszebb honlapja közé, viszont a Domino alapvető webes lehetőségeit mutatjuk be rajta. Így tapasztalhatjuk, hogy egy már elkészített Notes adatbázisból (CD nyilvántartás) milyen egyszerűen lehet egy böngészőből kultúráltan és korszerűen (keretkészlettel) megtekinthető adatbázist varázsolni. A tervezés után következzen a megvalósítás. 4.4 Új adatbázis létrehozatala Mivel ez az adatbázis már nem csak egy CD nyilvántartásról szól, ezért hozzuk létre a CDnyilv.nsf adatbázisunk
másolatát, és a következőkben ezzel fogunk dolgozni !" GYAKORLAT !" A Fájl/Adatbázis/Új másolat (File/Database/New Copy) menüpontot használva tölthetjük ki új adatbázisunk adatlapját. Eszerint: !" Szerver: a szerverünk neve, ha nincs, akkor Helyi !" Cím: Ödönke honlapja !" Fájlnév: Odonke.nsf !" Másolandó: adatbázisterv és dokumentumok (a Hozzáférési listát ne másoljuk) Ezzel létrejött az Ödönke honlapja adatbázisunk. 4.41 Űrlap táblázatos formában Amikor az űrlapot megtekintettük, láthattuk, hogy a statikus szöveg és a mező közötti tabulátor karakter a weben nem használható. Ehelyett a weben a táblázat az elfogadott és használt módszer a szöveg számunkra elvárt formázására. Így az űrlapunkat is át kell alakítanunk táblázatos formába. !" GYAKORLAT !" Tegyük tervező módba a CD űrlapunkat. !" Az Előadó sora elé hozzunk létre egy táblázatot a
Létrehozás/Táblázat (Create/Table) menüponttal. A táblázat 8 sorból és 2 oszlopból álljon rögzített szélességgel. !" A statikus szövegeket egyenként az első oszlopba tegyük át a vágólap segítségével (Kivágás, majd Beillesztés), míg a mezőket a második oszlopba tegyük. !" Ahol az előzőkben üres sort illesztettünk be (pl. Cím és CD-k száma sorok között), ott hagyjunk ki egy sort és írjuk be a [<br>] szöveget. Ez a HTML szöveg mondja meg, hogy új sort kell kihagyni. Ugyanúgy a táblázat elé is tegyünk ilyen szöveget. !" A táblázatnál: 197 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA !" Az első oszlop szélessége legyen 4 cm, míg a második oszlopé 10 cm. (lásd táblázat Tulajdonság ablakának első címkéje) !" Be kell állítanunk azt is, hogy a keretek ne látszódjanak. Ehhez jelöljük ki a teljes táblázatot, majd a táblázat Tulajdonság ablakának második címkéjén a Cellaszegély
vastagsága: Mind 0 nyomógombot nyomjuk meg. !" A Részletek feliratot és a hozzá tartozó mezőt nem kell táblázatba illeszteni. Ha jól dolgoztunk, az alábbiakat kell látnunk: 4.7 ábra Az űrlap tervező módban, illetve egy dokumentum megjelenése a böngészőben 4.42 Képek importja képerőforrássá (odonkegif, pontgif) A tervezett rendszer képeit képerőforrásként fogjuk eltárolni, így azok egy helyen lesznek eltárolva, függetlenül a felhasználásuk helyétől és számától. A képek változtatása esetén azok automatikusan frissülnek a beillesztett helyeken. További előnye az ilyen tárolásnak, hogy a helypazarló formátumú képek (mint a bmp, vagyis a Windows bitmap) struktúrája a szabványos gif formátummá tömörítődik. Így az űrlapon elhelyezett kép esetén a dokumentum megnyitásakor a kép letöltéséhez kevesebb idő kell (még a Notes kliensen is); a tömörítéssel tehát sebességnövekedést érhettünk el. !"
GYAKORLAT !" Kattintsunk az Erőforrások/Képek (Resources/Images) pontra, majd az (New Image Resource) gombra. !" A megjelenő ablakban választhatjuk ki a fájlrendszerből a képfájlt, jelen esetben az odonke.bmp és a pontbmp fájlokat 198 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA !" A Megnyitás (Open) gomb megnyomása után láthatjuk az immár konvertált fájljainkat a képerőforrások között. (Az odonkebmp 11 Kbyte-os méretével szemben a képerőforrásként tárolt odonke.gif csak 1,5 Kbyte méretű) 4.43 Keretek elnevezése Mielőtt hozzákezdenénk a további elemek létrehozásához, először meg kell határoznunk az egyes keretek neveit, ugyanis a későbbiekben szükség lesz rá. A felső keret neve legyen Fejlec, a bal oldalié Nezet, míg a középsőt nevezzük Kozep-nek. Fejlec Nezet Kozep 4.8 ábra A keretek nevei 4.44 Szerkezet létrehozása A szerkezet az a tervezési elem, amellyel az alaphelyzetbeli navigációs felületet (nézetek,
gyűjtők listája) cserélhetjük le egy számunkra megfelelőbbre. Tipikusan a webes alkalmazás az a terület, ahol célszerű egy másfajta navigációs felületet használni. A szerkezetünk a következőképpen néz majd ki létrehozás után: 4.9 ábra A tervezett szerkezet A szerkezet egyes sorait elemeknek nevezzük, itt adható meg egy kis kép, ikon, továbbá egy felirat, amelyre kattintva valamilyen esemény történik. Az egyes elemek típusai, vagyis az események a következők lehetnek: !" Elnevezett elem-re ugrás (Named Element) Ennek definiálásával ugorhatunk az egyes elemekre, amelyek lehetnek: lap, űrlap, keretkészlet, nézet, gyűjtő, navigátor. Itt az aktuális vagy bármely más adatbázis adott elemére is ugorhatunk. !" Lánc (Link) A vágólapon tárolt láncot illeszthetünk be ide (pl. dokumentumlánc, nézetlánc, adatbázislánc), így az elemre rákattintva a lánc másik végén 199 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA található
objektumhoz juthatunk. A láncokat a Szerkesztés/Másolás láncként (Edit/Copy as Link) menüponttal tehetjük a vágólapra. !" Művelet (Action) Az itt megadott műveletet hajtathatjuk végre a sorra való rákattintás esetén. !" URL Megadhatunk egy URL-t is, erre kattintva a böngésző a megadott címre ugrik. !" GYAKORLAT Hozzuk létre a példabeli szerkezetünket! Ezen szerkezet minden egyes eleme előtt a ) látható. Az utolsó pont kivételével az összes elem az pont.gif-el definiált kép ( adatbázisunk egy adott nézetét jeleníti meg a középső keretben, az utolsó pedig a honlapra ugrik vissza. !" Kattintsunk a Létrehozás/Tervezés/Szerkezet (Create/Design/Outline) menüpontra, vagy az (New Outline) gombra. Ekkor az adatbázisunk nevét láthatjuk csak, mivel elemet még nem definiáltunk. (New Entry) gombra. Ekkor megjelenik egy !" Kattintsunk az „Névtelen” feliratú elem és a tulajdonságablak. 4.10 ábra Egy szerkezeti
elem tulajdonságablaka !" Adjuk ennek az elemnek az Előadó szerint feliratot, majd a Típus (Type) résznél válasszuk az Elnevezett elem (Named Element), azon belül a Nézet (View) elemet. !" Az Érték (Value) mezőbe kell a nézet elnevezését beírni, ehhez használjuk a beépített objektumkeresőt, amely a sor melletti három ikon közül az első, 200 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA sárga színű mappát ábrázoló. (A második a képletszerkesztő, míg a harmadikkal a vágólapon található szöveget illeszthetjük be.) 4.11 ábra Az Objektumok keresése (Locate Object) ablak #" Tipp Az ablakban az egyéb adatbázisokra való hivatkozáskor az aktuális adatbázis mellett közvetlenül hivatkozhatunk a felhasználó postafájljára, illetve címjegyzékére is. !" Itt állítsuk be, hogy az aktuális adatbázis 1. Előadó szerint nézete legyen az, amely megjelenik. Az OK gomb megnyomására ez beíródik az Érték mezőbe !" A
Keret (Frame) mezőben adható meg, hogy az adott elem melyik keretben jelenjen meg. Mivel a szerkezetben található összes elem a középső, vagyis a Kozep nevű keretben jelenik meg, ezért a keretek definiálásakor (vagyis nem most) adjuk majd meg alapértelmezett célként a Kozep keretet. Ha ettől eltérő keretben szeretnénk valami mást megjeleníteni, csak akkor kell itt megadnunk a célkeretet. !" A Kép (Image) definiálásakor is használjuk a sor mögötti első ikont, itt választhatunk a képerőforrások közül. Válasszuk ki a pontgif-et, majd az OK gomb megnyomására már a Tulajdonság ablakban is láthatjuk az ikont. !" Az Új elem gomb újbóli megnyomására folytathatjuk a további elemek definiálását a már megismert módszerrel: Felirat Stílus szerint Rockzenék Kinél van Vissza a honlapra Típus Elnevezett elem -Nézet Elnevezett elem -Nézet Elnevezett elem -Nézet (nincs) később töltjük ki Érték 2. Stílus szerint 2. Stílus
szerintRockzenék 3. Kinél van később töltjük ki 201 Kép pont.gif pont.gif pont.gif pont.gif 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA Figyelem! Itt is láthatjuk, hogy a szerkezet pontjai és a hozzájuk rendelt nézet pontjai teljesen függetlenek egymástól. A 2 Stílus szerintRockzenék nézet a Stílus szerint nézet alpontja volt, míg példánkban ez most egy főpont a szerkezetünkben. !" Ha elkészültünk az összes elem definiálásával, a Szerkezet mentése (Save Outline) gombbal adhatunk nevet a szerkezetünknek, majd elmentjük. Példánkban a szerkezet neve legyen: CDnezetek A Szerkezetből való kilépéssel létrehoztuk a szerkezetünket, amelynek a további paramétereit majd a beágyazás helyén lehet beállítani. Lépjünk tovább és hozzuk létre előbb a lapokat. 4.45 Lapok létrehozása Mint már a fogalmak esetén szó volt róla, a lap kizárólag az információk megjelenítésére szolgáló tervezési eszköz, sok tulajdonságában
hasonlít az űrlaphoz. Mivel mezőket nem használhatunk rajta, ezért szerkesztő vagy megjelenítő módról sem beszélhetünk. A webes fejlesztések esetén a lapok legfontosabb tulajdonsága, hogy beágyazott elemeket (pl. szerkezet) használhatunk rajta. A példánkban három lapra lesz szükség, ebből kettőt a Fejlec es a Nezet nevű keretben fogjuk megjeleníteni, a harmadik pedig maga a honlap lesz. A felső keretben található lapon csak egy képet és egy szöveget fogunk megjeleníteni, mint „cégjelzés”, először ezt hozzuk létre. !" GYAKORLAT !" Az új lap létrehozásához válasszuk a Létrehozás/Tervezés/Lap (Create/Design/Page) menüpontot, vagy kattintsunk a Lapok (Pages) elemeknél az (New Page) gombra. A megjelenő üres lapot az űrlapokhoz hasonlóan használhatjuk. !" Szúrjuk be az odonke.gif-et a Létrehozás/Képforrás (Create/Image Resource) menüponttal. !" A kép mögé pedig – két szóköz kihagyása után –
írjunk egy szöveget, méghozzá az „Ezek itt a CD-im:” feliratot, betűtípusa Arial, karaktermérete pedig 24 legyen. !" Ezzel elkészítettük a Fejléc lapunkat. Az ablak bezárásával mentsük el a lapot és adjuk neki a Fejlec nevet. 202 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA 4.12 ábra A laptervezés eredménye böngészőből megtekintve 4.46 Beágyazott szerkezet használata Következő elkészítendő lapunk a keretkészletünk bal oldali, Nezet nevű keretébe kerül majd. Ide terveztük a már elkészített CDnezetek nevű szerkezetet Először létrehozzuk az új lapot, majd a szerkezetet „beágyazzuk”. !" GYAKORLAT !" Hozzunk létre egy új lapot az Új lap gomb segítségével. !" Mielőtt beágyazzuk szerkezetünket, a jobb áttekinthetőség érdekében helyezzünk két üres sort a szerkezetünk elé, vagyis üssünk két Entert. !" A Létrehozás/Beágyazott elem/Szerkezet (Create/Embedded Element/Outline) menüpont megnyomása
után választhatjuk ki a beágyazandó szerkezetünket, vagyis a CDnezetek nevűt, majd az OK gomb megnyomására megjelenik a beágyazott szerkezet. !" Hívjuk elő a Tulajdonság ablakát az Elem/ Szerkezet tulajdonságai (Element/Outline Properties) menüponttal, vagy a ikonnal. A beágyazott szerkezet beállításait a Tulajdonság ablakban állíthatjuk: 203 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA 4.13 ábra A beágyazott szerkezet Tulajdonság ablakának első címkéje !" A Típus (Type) mezőben a megjelenítés típusát választhatjuk, ez kétféle lehet: Nem hierarchikus (Flat style), illetve Hierarchikus (Tree Style). Ezekről és a többszintű beágyazott szerkezetekről többet a Súgóban olvashat. !" A Címstílus (Title Style) mezőben azt adhatjuk meg, hogy megjelenjen-e egy cím mező a szerkezetünkben. Példánkban ezt el fogjuk rejteni a Rejtett (Hide) beállítási lehetőséggel. !" A szerkezet méretét a Szélesség (Width), illetve a
Magasság (Height) megadásával definiálhatjuk, ezek egyaránt lehetnek rögzített, illetve tartalomhoz igazított értékek. !" A Webes elérés (Web Access) pontban választhatjuk ki, hogy a beágyazott szerkezet HTML (ez az alapértelmezés), vagy Java kisalkalmazás (Applet) segítségével jelenjen meg. A Java megjelenítés többletértéket hordoz a HTML megjelenítéshez képest: használatával a szerkezet hátterében képeket is alkalmazhatunk, továbbá a szerkezet egyes elemeit más színnel jelezhetjük, aszerint, hogy melyik pont van kiválasztva, illetve az egérrel éppen felette vagyunk-e. A Tulajdonság ablak második, betűtípusválasztó címkéjén a következőket láthatjuk: 4.14 ábra A Tulajdonság ablak második címkéje Itt a szerkezetben található elemek karaktertípusát, -méretét és –stílusát állíthatjuk be. A további beállítási lehetőségek: !" Normál: Itt azt a színt adhatjuk meg, hogy milyen színűek legyenek az
egyes elemek alaphelyzetben. !" Kijelöléskor (Selected): Ha az adott elem van kiválasztva, akkor annak egy másfajta színt is megadhatunk. 204 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA !" Rámutatva (Moused): Ha az egérmutató egy sor felé ér, akkor annak színe az itt beállítottra változik. A további címkékkel jelen példánkban nem foglalkozunk. !" GYAKORLAT !" A Tulajdonság ablak első címkéjén a Típus mező tartalma legyen Nem hierarchikus (Flat Style) és függőlegesen (Vertical) helyeződjenek el az értékek. !" A Címstílus legyen Rejtett (Hide). !" A szerkezet méretét is célszerű megváltoztatni, mivel a szélesség alaphelyzetben ablakméretnyi, a keretben való megjelenítéshez pedig ennél kisebb is elég. Példánkban legyen a Szélesség Rögzített szélességű (Fixed width), mégpedig 4,2 cm, míg a Magasság esetén válasszuk a Rögzített magasság (Fixed height) lehetőséget 2,6 cm beállításával. !" A
webes elérésnél a Java kisalkalmazással lehetőséget válasszuk ki. (A megjelenő ablak tudatja velünk, hogy eközben beállítjuk a „JavaScript használata lapok generálásakor” nevű adatbázis-beállítást is.) Figyelem! A JavaScript használata lapok generálásakor (Use Javascript when generating pages) adatbázis-beállítás engedélyezésének több fontos mellékhatása van: !" A dokumentumok megjelenése megváltozik, ugyanis azok alján található Submit gomb eltűnik. Ha nem használunk JavaScriptet, akkor az űrlapon csak egy gomb szerepelhet (és ez az egy szerepel is), amely az űrlap elmentésére szolgál. A JavaScript használatával nem keletkezik automatikusan ilyen nyomógomb, viszont tetszőleges számú gomb megjelenhet és használható az űrlapon. !" Az űrlapnál definiált Ment és Ment és kilép műveletek megjelentek a böngészőből megtekintve is. Ez azért van, mert a JavaScript használata támogatja a @Command([FileSave]), a
@Command([FileCloseWindow]) és a @Command([ViewRefreshField]) parancsokat, míg a JavaScript használata nélkül az ilyen parancsot tartalmazó műveletek nem jelennek meg. !" Ez ugyan nem látszik, viszont a dokumentumok és navigátorok gyorsabban jelennek meg, mivel a gombok, forrópontok csak futásidőben (vagyis megnyomáskor) értékelődnek ki. 205 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA !" GYAKORLAT FOLYTATÁS !" A Tulajdonság ablak második címkéjén a betűtípus legyen Arial, a karakterméret 10, míg a karakterstílust változtassuk Félkövérré. !" A normál szín maradjon fekete, míg a Kijelöléskor színe legyen piros, a Rámutatva pedig kék. !" A lapot ezzel elkészítettük; a lap bezárásánál elmenthetjük azt. Adjuk neki a Nezet nevet. !" Tekintsük is meg a lapunkat a böngészőben. Láthatjuk, hogy az egyes pontok felé érve a felirat kék színű lesz, míg valamelyiket kiválasztva az pirosra vált és az adott
nézetre kapcsol. 4.47 Keretkészlet létrehozása A keretkészlet a webes alkalmazásunk csúcsa, ennek kereteibe fogjuk elhelyezni a már elkészített lapokat. A keretkészlet esetén kiválasztható, hogy hány darab keretet használunk és az adott kereteket milyen elrendezésben Az egyes keretek tartalmait is most fogjuk meghatározni. !" GYAKORLAT !" Az új keretkészlet Létrehozás/Tervezés/Keretkészlet létrehozásához válasszuk a (Create/Design/Frameset) menüpontot, vagy kattintsunk a Keretkészletek elemnél az gombra. Ekkor az alábbi ablak jelenik meg: 4.15 ábra Új keretkészlet létrehozása ablak 206 (New Frameset) 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA !" Az Új keretkészlet létrehozása ablakban választhatjuk ki, hogy hány keretre lesz szükségünk (Keretek száma, Number of frames), majd az Elrendezés (Arrangement) pontnál kiválaszthatjuk a keretek kívánt elrendezését. Példánkban három keretre lesz szükség, azon belül
pedig a második elrendezést fogjuk használni. Ha ezeket kiválasztottuk, akkor az OK gomb megnyomására megjelenik egy adott stílusú, de üres keretkészlet (lásd 4.16 ábra) #" Tipp Az imént kiválasztott struktúra nem végleges, hanem az ikonsorban látható Felosztás oszlopokra (Split into Columns) és Felosztás sorokra (Split into Rows) nyomógombokkal újabb kereteket hozhatunk létre, illetve a Keret törlése (Delete Frame) gombbal törölhetjük is azokat. !" Az egyes keretek definiálásához válasszuk a Keret/Keret tulajdonságai (Frame/Frame Properties) menüpontot, vagy a jól ismert 4.16 ábra Egy új és üres keretkészlet 207 ikont. 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA 4.48 Keret tartalmának definiálása A Tulajdonság ablak első címkéjén állíthatjuk be a keret tartalmát: 4.17 ábra A keret tulajdonságai ablak első címkéje A keret tartalmára hivatkozhatunk URL-lel, illetve lánccal is, viszont legtöbbször valamilyen
elnevezett elemet, általában lapot, vagy navigátort használunk itt. Az elem precízebb meghatározása az objektumkeresővel, vagyis a már ismert első, sárga mappát ábrázoló ikonnal történhet. A keret méretet a második címkén állíthatjuk be: 4.18 ábra A keret tulajdonságai ablak második címkéje A keretek méretének megadásánál (Szélesség illetve Magasság) az alábbi választási lehetőségek adottak: !" Képpont (Pixels): Itt pontosan meghatározhatjuk az adott keret méretét képpontokban. Ha például egy képet teszünk egy keretbe, akkor mindenképpen az adott méretre rögzítsük a keretet. !" Százalék (Percent): Megadható a méret százalékosan is, ez a teljes keretkészlet százalékában értendő. Alaphelyzetben a felső keret magassága 20 százalék, amely azt jelenti, hogy a teljes képernyő magasságának ötödét foglalja el. 208 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA !" Relatív (Relative): A relatívként
megadott keretméret a többi keret méretétől függ, vagyis amennyi terület marad, a keret ezen foglal helyet. Ez esetben a felirat előtti szám érdektelen. Fontos! A keret méretét a keretkészletben található határolóvonalak mozgatásával is megadhatjuk. Előtte viszont mindenképpen definiáljuk, hogy amit mozgatunk, az abszolút (vagyis Képpont), vagy ablakméretfüggő (vagyis Százalék). Az egyes kereteknél a Méretezhető (Allow Resizing) pontnál adható meg, hogy a felhasználó át tudja-e méretezni a keretet, vagy sem. A Görgetés (Scrolling) pontban azt adhatjuk meg, hogy gördítősáv mikor jelenjen meg: mindig, soha vagy szükség esetén. !" GYAKORLAT !" A felső keretnek adjuk a Fejlec nevet, tartalomként pedig a Fejlec nevű lapunkat adjuk meg (Elnevezett Elem, Lap, majd az objektumkeresővel: aktuális adatbázis és Fejlec). Ez tartalmazza Ödönke fényképét, vagyis a keret magasságaként a második lapon 110 képpontot határozzunk
meg. A szélessége maradjon Relatív beállításon. !" A bal oldali keret neve legyen Nezet, tartalmaként adjuk meg a Nezet nevű lapunkat. Mivel itt található a beágyazott szerkezet, meg kell adnunk azt az alapértelmezett keretet, amiben a szerkezet elemeire kattintás eredménye megjelenik. A Tulajdonság ablak első címkéjén az “A keretben lévő láncok alapértelmezett célja” (Default target for links in frame) pontba írjuk a Kozep nevet. !" A bal oldali keret szélessége legyen 170 képpont, míg a magasság legyen Relatív. !" A középső keret neve legyen Kozep, tartalmaként alaphelyzetben válasszuk ki az “1. Előadó szerint” nézetet (A szerkezetre való kattintás majd úgyis megváltoztatja azt.) !" A középső keret mérete legyen teljesen relatív (szélesség és magasság is), hiszen a felső és bal oldali keret megfelelő méreteit rögzítettük. Ezzel elkészült a keretkészletünk. A keretkészletből való kilépéskor
adjuk neki a CDkeret nevet. Tekintsük meg a keretkészletet a webböngészőből; láthatjuk, hogy már majdnem kész vagyunk. 209 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA 4.49 Honlap lap létrehozása forróponttal Az utolsó lapunkat fogjuk most létrehozni, amely maga a honlap lesz. Ez a honlap két szöveget fog tartalmazni, továbbá itt is felhasználjuk Ödönke “fényképét”. Az alsó szövegre kattintva pedig a már megalkotott keretkészletünkhöz juthat a felhasználó. Azt, hogy egy szövegre (vagy képre) kattintva valami történjen, az ún. forrópont (hotspot) használatával valósíthatjuk meg. Ezek típusait a 317 fejezetben már részleteztük, a webes fejlesztésben ezek közül a lánc forrópontot (Link Hotspot) használhatjuk fel. Segítségével egyszerűen határozhatjuk meg, hogy hová – egy másik URL-re (internetes cím), elnevezett tervezési elemre, vagy láncra – ugorjunk. !" GYAKORLAT !" A Lapok elemeknél az Új lap nyomógomb
segítségével hozzuk létre az új lapot. !" Üssünk egy Entert (új sor), majd gépeljük be az első megjelenő szöveget: Ez itt Ödönke honlapja: !" A szöveg karaktertípusa legyen Arial, betűmérete 36, színe piros. !" Egy újabb sor kihagyása után a Létrehozás/Képforrás menüponttal hozzuk be az odonke.gif képünket !" Újabb üres sor után az újabb szöveg: Ide kattintva a CD-imet láthatják !" A szöveg karaktertípusa legyen Arial, betűmérete 18, színe zöld. !" Ezt az alsó sort jelöljük ki, majd a Létrehozás/Forrópont/Lánc forrópont menüt választva határozhatjuk meg a forrópont célját. A típus legyen Elnevezett elem, azon belül Keretkészlet, majd a sárga objektumválasztó gombot megnyomva az Aktuális adatbázison belül válasszuk a CDkeret objektumot. 4.19 ábra Lánc forrópont Tulajdonság ablaka !" A lapot mentsük el Honlap néven. 210 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA Ezzel kapcsolatban
szükségünk van még a keretkészletbeli “Vissza a honlapra” elem definiálására. !" Lépjünk be a Cdnezetek nevű szerkezetbe, ugyanis itt kell definiálni a “Vissza a honlapra” pontot. !" Kattintsunk duplán az elemre, ezzel megjelenik a Tulajdonság ablak. !" A Típus legyen Elnevezett elem, azon belül lap, majd az objektumkeresővel az aktuális adatbázis Honlap lapját adjuk meg. !" !" Ha csak ennyit adnánk meg, akkor a “Vissza a honlapra” feliratra kattintva a Honlap lapunk a középső keretben jelenne meg. Ahhoz, hogy ez ne a keretkészletben, hanem a teljes képernyőn jelenjen meg, az ablak Keret pontjában a top keretet kell definiálni. Mentsük el a szerkezetet. 4.410 Adatbázismegnyitás beállítása Az adatbázis tulajdonságablakában kell definiálnunk azt, hogy az adatbázisunkat a webről megnyitva a Honlap lap jelentkezzen kiindulásként. !" !" GYAKORLAT Válasszuk a Fájl/Adatbázis/Tulajdonságok
(File/Database/Properties) menüpontot, majd az ablak ötödik címkéjét tekintsük meg. 4.20 ábra Az adatbázisindítás tulajdonságai !" A webről való megnyitást az ablak alsó részén definiálhatjuk. A Böngészőben való megnyitáskor (When opened in a browser) választást állítsuk a Kijelölt lap megnyitása (Open Designated Page) pontra, majd a Lap (Page) beállításnál a Honlap lapot válasszuk ki. 211 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA !" Most már teljes egészében megtekinthetjük a böngészőből az adatbázisunkat, hiszen az adott feladatot megoldottuk. 4.5 Továbbfejlesztés A fejlesztés általában nem állhat meg az igények első szintjének figyelembevételénél, az újabb igények pedig újabb megoldási lehetőségeket igényelnek. Az alábbiakban a CD nyilvántartás webes változatának néhány továbbfejlesztési lehetőségét mutatjuk be a felhasználói igényből kiindulva. 4.51 Dokumentumok törlése 1. számú
felhasználói igény: Jelen esetben a böngészőből nem lehet dokumentumot törölni. Be tudná ezt állítani? Ebben az esetben az egyes dokumentumokat nem tudjuk kijelölni és egyszerre törölni azokat, ahogy a Notes-ból megtehettük. Az egyetlen megoldás, hogy az űrlaphoz létrehozunk egy Törlés nevű műveletet, amelynek a @Command([EditClear]) parancsot adjuk. (A másik megoldás a nézet megjelenítése Javával, amelyet a 3. számú igénynél írunk le) 4.52 Nézetnavigációs eszközök megváltoztatása (beágyazott nézet) 2. számú felhasználói igény: A nézet megjelenésénél adottak a Previous, Next, Expand, Collapse, Search választási lehetőségek. Lehetne-e másokat is beszúrni vagy a feliratot pl magyarítani? A megoldás a beágyazott nézet használata a $$ViewTemplateDefault űrlapon. Az elkövetkezőkben olyan, az összes nézetre alkalmazott struktúrát hozunk létre, amelyben a Next és a Prev mintájára a Következő és az Előző
feliratok szerepelnek a nézeteknél: 4.21 ábra A nézetek megjelenése $$ViewTemplateDefault segítségével !" GYAKORLAT !" Hozzunk létre egy új űrlapot. !" Az űrlap első sorában a következőknek kell szerepelnie: 212 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA [<IMG SRC="/icons/prevview.gif">]Előző [<IMG SRC="/icons/nextview.gif">]Következő !" !" !" !" Ebben a sorban található két HTML kód, amely a képeket határozza meg (IMG SRC). HTML kódot úgy illeszthetünk be Notes űrlapra, hogy szögletes zárójelek közé tesszük azt. Az első kép a balra mutató nyíl, míg a második a jobbra mutató. A Domino szerver által használt képek a szerver datadominoicons alkönyvtárában találhatók meg, hivatkozni pedig a fenti formában lehet rájuk. Jelöljük ki az „Előző” szöveget, majd a Létrehozás/Forrópont/Műveleti forrópont (Create/Hotspot/Action Hotspot) menüparanccsal
létrehozunk egy forrópontot. A forrópont műveletének a (nem dokumentált) @Command([ViewPageDown]) parancsot használjuk. Hasonlóan jelöljük ki a „Következő” szöveget is, itt a forrópont képlete a @Command([ViewPageUp]) parancs legyen. Egy üres sor kihagyása után ágyazzuk be a nézetünket a Létrehozás/Beágyazott elem/Nézet (Create/Embedded Element/View) menüponttal. Az itt megjelenő ablaknál bármely nézetet választhatjuk, hiszen a „nézetminta” az összes nézetre igaz lesz. A beágyazott nézet Tulajdonság ablakát hívjuk elő, majd válasszuk a Megjelenítés (Display) esetén a HTML használatával (Using HTML) pontot, továbbá a megjelenítendő sorok számát az alapértelmezésről kapcsoljuk át 3 sorra. Ennek beállításával a nézetből egyszerre csak három sor fog megjelenni. 4.22 ábra A beágyazott nézet tulajdonságai !" Egy újabb üres sor kihagyása után a vágólap segítségével másoljuk át az első sorunkat.
!" Az űrlapot mentsük el $$ViewTemplateDefault néven. !" Ha helyesen dolgoztunk, akkor a következőket kell látnunk a tervező panelon. Ezt megtekintve a már fent jelölt nézetelrendezést kapjuk. 213 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA 4.23 ábra A $$ViewTemplateDefault űrlap tartalma Megjegyzések !" Az alaphelyzetbeli ikonsor táblázatban helyezkedik el, a képek és a képletek a következők: Felirat Previous Next Expand Collapse Search Kép Prevview.gif Nextview.gif Expview.gif Colview.gif Schview.gif Művelet @Command([ViewPageDown]) @Command([ViewPageUp]) @Command([ViewExpandAll]) @Command([ViewCollapseAll]) @Command([ViewShowSearchBar]) !" Ha csak egy nézetre specifikus gombsort szeretnénk létrehozni (pl. csak az eloado másodlagos nézet esetén jelenjen meg így), akkor azt a $$ViewTemplate for eloado űrlapnévvel tehetjük meg. 4.53 Nézet megjelenítése Javával 3. számú felhasználói igény: A nézetből az ablakban
alapértelmezésben csak az első 30 sornyi dokumentum látszik. Ahhoz, hogy egy következő lapnyit ugorjak, használhatom a Next vagy Previous gombokat. De így elég nehézkes a legutolsó dokumentumokat megtekinteni Van erre esetleg egy másik megjelenítési mód? 214 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA Az egyik megoldás a nézet valamilyen struktúrálása lehet (pl. kategorizálom kezdőbetű szerint), vagy pedig valamilyen webes kereső használata. Létezik azonban egy Java kisalkalmazás (applet), amellyel a nézet tartalmát lehet intelligensebben megtekinteni. Az előadó szerinti nézet pl a következőképpen néz ki applet segítségével: 4.24 ábra A nézet, mint Java kisalkalmazás A kisalkalmazás előnyei: !" a nézet oszlopai átméretezhetők !" használhatjuk a gördítősávot akár a legalsó dokumentum megtekintéséhez !" a kategóriák összezárását és kiterjesztését újabb adatlekérés nélkül tehetjük meg !"
dokumentumokat törölhetünk a Del gomb használatával !" több dokumentumot is kiválaszthatunk A nézet ezen megjelenítési formáját a nézet Tulajdonság ablakának negyedik címkéjének közepén állíthatjuk be a Kisalkalmazás használata a böngészőben (Use applet in the browser) ponttal. (Ha esetleg a $$ViewTemplate-et használtunk erre a nézetre, akkor azt kapcsoljuk ki, vagy pedig a beágyazott nézetnél válasszuk a Megjelenítés Java kisalkalmazással (Using Java Applet) pontot.) 215 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA 4.25 ábra A nézet Tulajdonság ablakának negyedik címkéje Ez a beállítás újabb kérdéseket vet fel: !" Használatához a kisalkalmazást, majd a nézet összes adatát le kell tölteni a böngészővel. Ez időt vesz igénybe !" A Next és Previous gombok értelmezhetetlenek. Újabb gombként a Dokumentum törlése (@Command([MoveToTrash]) paranccsal) és a Szemetesláda ürítése (@Command([EmptyTrash]) paranccsal)
jöhet szóba. !" Az appletek betűkészlet-használatban erősen korlátozottak. Lehetőleg használjuk a Courier, Helv vagy Times New Roman karakterkészleteket. 4.54 Rich Text mező Java módra 4. számú felhasználói igény: A Notesban a Rich Text mezőbe formázott szövegeket is írhattam, például megválaszthattam a karaktertípust, vagy félkövér karaktereket is használhattam. Lehetséges ez a webről is? A megoldás az, hogy a Rich Text mezőket is lehet Java kisalkalmazásként megjeleníteni. A mező megjelenése a következő lesz: 4.26 ábra Rich Text mező Java kisalkalmazással 216 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA Ennek beállításához lépjünk az adott űrlap Rich Text mezőjének (példánkban a Részletek) Tulajdonság ablakához, majd az első címkének középső részén válasszuk ki a Megjelenítés: Java kisalkalmazással pontot. A Rich Text mező Java kisalkalmazásának előnyei: !" Karakterkészlet, -méret, -szín, -típus
választható !" Bekezdések igazíthatók jobbra, balra, középre !" Bekezdéseket behúzhatunk, használhatunk felsorolásokat (pöttyök), illetve sorszámozásokat is A Java kisalkalmazás hátránya: !" Az applet letöltése szintén időbe telik. !" Nem minden nemzetközi karakter használható rajta. 4.55 $$Return – A Form processed felirat megváltoztatása 5. számú felhasználói igény: Ha a webről létrehozok egy új CD dokumentumot, majd a Ment és kilép gombot választom, akkor egy Form processed felirat jelenik meg. Meg lehet ezt a szöveget változtatni, vagy pedig azonnal egy másik lapra ugrani mentés után? A megoldás kulcsa a $$Return mező. Ha ilyen nevű mező nincs az űrlapunkon, akkor az alaphelyzetbeli „Form processed” felirat jelenik meg az űrlap mentésekor. Ha viszont létrehozunk egy ilyen mezőt, akkor annak HTML nyelven értelmezett tartalma jelenik meg az adott lapon. Ha a $$Return nevű szöveg típusú számított
(!) mező tartalma az alábbi, akkor az Űrlap elmentve szöveg jelenik meg, továbbá egy link a honlapra: „<h2>Űrlap elmentve</h2> <br><h4><a href=/cdnyilv.nsf/honlap?OpenPage>Vissza a honlapra</a>” Ha a $$Return nevű szöveg típusú számított (!) mező tartalma az alábbi, akkor az Űrlap elmentés után automatikusan a honlapra ugrik: „[/cdnyilv.nsf/honlap?OpenPage]” Megjegyzés A mezőt rejtsük el mind a Notes, mind a webes felhasználók elől, mivel nincs szükség a láttatására. 4.6 További webes tippek Ebben a részben olyan beállításokról lesz szó, amelyek szervesen nem kapcsolódnak a CD nyilvántartás/Ödönke honlapja bemutatóadatbázisunkhoz, viszont a könyv terjedelmébe illeszkednek. 217 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA 4.61 Webes keresés lapjainak megváltoztatása Ha az adatbázisnézeteinkben automatikusan megjelenő Search gombra kattintunk, akkor a datadominoiconssearch.htm-ben található
oldal jelenik meg, aminél a megjelenő mezőben kell a feltételt a felhasználónak megadnia, majd a Keresés (Search gombot megnyomni): 4.27 ábra Az alaphelyzetbeli keresőoldal Ha az adatbázisunk teljes szöveges indexszel (full text index) rendelkezik, akkor a keresésünk eredményének formátuma az alábbi lesz: 4.28 ábra A keresés eredménye Ezt a két oldalt megváltoztathatjuk egyéni kívánság szerint, az ehhez szükséges nyomógomb és űrlapok a következők: Nyomógomb A Search gomb funkcióját a @Command([ViewShowSearchBar]) paranccsal hívhatjuk elő. A keresés kizárólag teljes szöveges index (full text index) létrehozása mellett működik. 218 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA Keresőoldal A keresőoldalhoz egy új űrlapot kell létrehozni $$Search névvel. Ezen az oldalon minimálisan az alábbi mezőket célszerű használnunk: !" Query Ennek a mezőnek a tartalma lesz a keresési feltétel. Tipp: További mezők létrehozásával a
Query mezőt finomíthatjuk úgy, hogy az automatikusan kiszámolja a feltételt. Ehhez számított típusúvá kell tenni a mezőt és feltételként az @If függvényt, a FIELD kapcsolót, továbbá az AND, OR paramétereket használhatjuk. !" Keresés gomb Ennek tartalma legyen a dokumentum elmentése és bezárása: @Command([FileSave]); @Command([FileCloseWindow]) !" SaveOptions mező Ennek tartalma legyen “0”. Így adhatjuk meg, hogy a keresési űrlapot a FileSave parancs ne mentse el, hanem kizárólag a keresés végrehajtására használja fel. A mezőt rejtsük el !" $$Return mező A mezőben kell definiálni azt, hogy mi hajtódjon végre (a ?SearchView segítségével). DBName:=@Subset(@DbName;-1); "[[/"+DBName+"/nézetnév/?SearchView&Query="+Query+"&Count=10]]" A mezőt rejtsük el. A Search gomb megnyomására most már a $$Search nevű űrlapunk jelenik meg, azaz a megváltoztatott keresőlap. 4.29 ábra A
keresőlap űrlapja és eredménye a weben 219 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA Keresés eredménye lap A keresés eredményeként megjelenített űrlap a $$SearchTemplateDefault, vagy a $$SearchTemplate for nézetnév nevet viselje. Ehhez tehát egy újabb űrlapot kell létrehoznunk, amelyen a keresés eredménye a $$ViewBody mezőben jelenik meg E fölé illetve alá helyezhetünk el az eredményt szinesítő szövegeket, képeket, stb. 4.30 ábra A keresési eredmény lapjának terve és megjelenése a weben 4.62 File upload control Ahhoz, hogy a webes felhasználók is tudjanak fájlokat csatolni egy dokumentumhoz, az űrlapra egy speciális elemet kell a fejlesztőknek beilleszteni, amelyet a Fájlfeltöltés vezérlése (File Upload Control) néven kell keresni a Létrehozás/Beágyazott elem (Create/Embedded Element) menüponton belül. A fájlcsatolásnál az alábbi jelenik meg a felhasználónál: 4.31 ábra Fájlcsatolás eszközének megjelenése az űrlapon és
a weben A felhasználó vagy beírja az adott fájlnevet az ablakba, vagy pedig a Browse gomb használatával kiválaszthatja azt a fájlrendszerből. Egy fájlcsatoló elem csak egy fájlt tud megjegyezni, így több fájl csatolásának szükségessége esetén több ilyen elemet kell használni. Figyelem! A fenti elem a Notesban nem használható, így mindenképpen válasszuk ki a Tulajdonság ablakában a Bekezdés elrejtése 4.6-os vagy újabb Notes elől (Hide paragraph from Notes R4.6 or later) beállítást 4.63 ACL beállítása a Webes adatbázistípusokra A IV. fejezetbeli Adatbázis szintű védelem pontban részleteztük a hozzáférési lista (ACL) beállításait. Ebben a fejezetben azért térünk vissza rá, mert a webes, az Internetre kikerülő (és nem csak az Intraneten belüli használatú) adatbázisok esetén különösen fontos a biztonsági rendszer pontos és alapos beállítása. 220 4. IRÁNY A WEB: ÖDÖNKE HONLAPJA A webről az adatbázist
megtekintő személyekre az ACL már ismertetett pontjain kívül az adatbázis hozzáférési listájának (Advanced) lapján található (Maximum Internet name & password) paramétere is vonatkozik. Ez határozza meg a webes felhasználó maximális jogosultságát. A biztonsági szinteket figyelembe véve adatbázisonként más és más ACL-t kell megadni az egyes felhasználókra. Ezekből két példa: Szigorúan bizalmas adatbázis (csak olvasni engedünk a webről, és csak azokat, akiknek jogot adunk rá, vagyis egy névvel és jelszóval bejelentkeztek): !" !" !" !" !" !" -Default-: Nincs hozzáférés Anonymous: Nincs hozzáférés azonosított felhasználók (pl. CDnézegetők csoport): Olvasó Szerkesztők: Szerkesztő Adminisztrátorok: Kezelő + törlési jog Max. Internet hozzáférés: Olvasó Információszolgáltató adatbázis (Ide tartozna a példabeli Ödönke honlapja adatbázis): !" !" !" !" !"
-Default-: Olvasó Anonymous: Olvasó Szerkesztők: Szerkesztő Adminisztrátorok: Kezelő + törlési jog Max. Internet hozzáférés: Szerkesztő 221 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI 5. Programozási környezet 5.1 Hol használhatjuk az egyes programozási lehetőségeket? A Lotus Notesban használható programozási lehetőségek a következők: !" Egyszerű művelet(ek) (Simple action) !" Képlet (Formula) !" LotusScript (4-es verzióban Parancsfájl) !" JavaScript !" Java (Importált Java) 5.1 ábra Az egyes programozási lehetőségek a tervezőpanelben egy ügynök esetén Az egyes objektumoknál vagy a fenti lehetőségek valamelyikét, vagy több programozási lehetőség közül is választhatunk: !" !" Csak képlet Ilyennel találkozhatunk egy űrlap ablakcímének definiálásakor. Csak LotusScript A mezők Initialize és Terminate eseményeinél találkozhatunk ezzel a lehetőséggel. !" !" Csak JavaScript Webes
stílusú eseményeknél, mint pl. onFocus Képlet és LotusScript Az űrlap PostOpen, QuerySave, stb eseményeinél a két lehetőség közül bármelyiket választhatjuk. !" Egyszerű művelet, képlet, LotusScript és JavaScript !" Egyszerű művelet, képlet, LotusScript és Java Mind a négy programozási lehetőség például a gomboknál fordul elő. Ez a lehetőség az ügynököknél (agent) fordul elő. 222 5. PROGRAMOZÁSI KÖRNYEZET !" Egyszerű függvény, mező és képlet Ez a speciális variációval a nézetek oszlopainak definiálásakor találkozhatunk. 5.11 Mit is jelentenek az egyes programozási lehetőségek? A képlet az a programozási lehetőség, amely már a Notes első verzióiban is megtalálható volt. Ezek nagy része a @függvények olyan egyszerű kifejezések, amelyek egy értéket (tipikusan egy mező értékét) változtathatják meg. Másik részük, a @parancsok alapvető műveleteket takarnak. Magában a nyelvben
lehetőség van feltétel alapú elágazásra, belső változók használatára, így egyszerű programozott logikákat alkothatunk segítségükkel. A képletnyelvben nincs lehetőség ciklusok definiálására. A parancsfájl, azaz a LotusScript egy objektumalapú Basic-szerű nyelv, amelynek segítségével az előre meghatározott objektumosztályokon keresztül érhetjük el a Notes és a Notes adatbázisok jellemzőit. Megtalálhatjuk a ciklus lehetőségét is a programozási lehetőségek között. A LotusScript program fordítását (compile) és az egyes osztálydefiníciók betöltését (include) a Notes maga végzi el a program mentésekor A JavaScript egy objektumorientált programozási nyelv, legpraktikusabban webes, vagy pedig a webről és a Notes-ról egyaránt használt alkalmazásokban használhatjuk. A Notes csak a programot tárolja, lefordított változat nem használható. A Java szintén objektumorientált programozási nyelv, kétféle formában
használható. Egyrészről natív Java kódot is írhatunk, de Java appletfájlokat is importálhatunk az alkalmazásokba. A Domino alkalmazások elemeihez a Notes Java osztálycsoportot használhatjuk, míg az egyéb funkciókat a Core Java class-ból érhetjük el. Egyedül az ügynököknél használható. Egyszerű műveletekkel néhány bonyolultabb képletet vagy parancsfájlt válthatunk ki. Ezek programozást nem kívánnak, csupán egy ablak (lásd 1.34 ábra) tartalmát kell értelemszerűen kitölteni. Képletek írása előtt nézzük meg, hogy ugyanazt meg tudja-e oldani egy egyszerű művelet/kifejezés. 5.12 Mikor használjunk képleteket és mikor scriptet? Általánosságban akkor jobb képleteket használni, ha a felhasználó által éppen használt objektumon kell valamilyen műveletet végezni. Ilyen pl egy mező kezdeti értéke, vagy pedig egy nézet kiválasztási feltétele. Scripteket akkor használjunk, ha egy másik objektumot kell elérni. Példa erre az
az eset, amikor az egyik dokumentumban lévő mező értéke egy másik dokumentum valamely értékétől függ. A scriptekkel több olyan lehetőségünk van, amely képletekkel nem megoldható, gondoljunk csak a hozzáférési listaHiba! A könyvjelző nem létezik. (ACL) módosítására vagy a ciklusokra. Egyszerűbb esetben viszont a képletek használata a javasolt, ugyanis jobb futási teljesítményt érhetünk el vele. 223 5. PROGRAMOZÁSI KÖRNYEZET 5.2 Képletek Képleteket a következő elemekből állíthatunk össze: !" Változók !" Állandók !" Műveletek !" Fenntartott kulcsszavak !" @függvények !" @parancsok (a @függvények része) Változók A Notes-ban elsősorban a mezőneveket használjuk, mint változókat, ugyanis azok értéke változhat egy űrlapon belül. (Ideiglenes változókat is használhatunk bonyolultabb értékek kiszámításánál, azok nem jelennek meg a dokumentumban.) A változóneveket egyedül is
használhatjuk képletként, de műveletek segítségével újakat is képezhetünk belőlük. Az alábbi táblázat néhány példát mutat be a változókra: A használat módja Egyedül Képletekkel @függvények argumentumaként Példa Vezetéknév Vezetéknév+” “+Keresztnév @ProperCase(Vezetéknév) Állandók Az állandók olyan értékek, amelyek nem változnak. Az alábbi táblázatok az állandók három fajtáját mutatja be: !" Szöveges állandók: Példa “Zsolt” Eredmény Zsolt ““ “Péter mondja: ”Igen”” Péter mondja: “Igen” “c:\notes\data” c: otesdata 224 Magyarázat A szöveges állandókat idézőjelek közé kell tenni. Az üres elemet két egymás utáni idézőjel jelzi. Ha idézőjelet (“) szeretnénk az állandóba helyezni, akkor egy fordított perjelet () kell tenni elé. A fordított perjel elé pedig egy másik fordított perjelet kell az állandóba helyezni. 5. PROGRAMOZÁSI KÖRNYEZET !" Szám
típusú állandók: Példa Eredmény 123 123 -123 ,123 123E-2 -123 0,123 1,23 Magyarázat Egész számhoz a 0-tól 9-es karaktereket használhatjuk Előjelek (+ és -) Tizedesvessző Tudományos ábrázolás !" Dátum/idő típusú állandók: [5:30] Példa Eredmény 05:30:00 [99.1230] 99.1230 [2000.0101] 2000.0101 [2000.0101 16:15] [5:30]-[5:15] 2000.0101 16:15:00 900 Magyarázat A dátum/idő állandót szögletes zárójelek közé kell tenni. A dátum formátuma meg kell hogy egyezzen az operációs rendszer beállításával. A dátumok négy számjeggyel tárolódnak, viszont 2000 előtti dátumok két számjeggyel jelenítődnek meg, míg a 2000 utániak négyjegyű évszámmal. A dátum és idő együtt is használható. Az időket másodpercekben méri a Notes, azaz a példabeli két időpont között 15*60=900 mp van. Műveletek A változókból és állandókból a műveletek segítségével képezhetünk új értékeket vagy módosíthatjuk azokat. A
műveleteket azonos adattípusú értékekkel kell végrehajtani Az adattípusok lehetnek szöveg, szám, dátum/idő, kulcsszó/lista Az alábbi főbb műveleteket használhatjuk: !" !" !" !" !" Matematikai Összehasonlító Logikai Összefűzés Hozzárendelés Matematikai műveletek Ezek a műveletek számokkal, vagy szám típusú mezővel végezhetők. 225 5. PROGRAMOZÁSI KÖRNYEZET Művelet Összeadás (+) Kivonás (-) Szorzás (*) Osztás (/) Zárójel (()) Előjelváltás (-) Példa TeljesÁr+Áfa TeljesÁr-Kedvezmény EgységÁr*Db TeljesÁr/Db Egységár*(Vételár+Nyereség) -(Levonás) Összehasonlító műveletek Az alábbi műveletek szám, illetve szöveg típusú mezőkkel/értékekkel végezhetők. Művelet Egyenlő (=) Nem egyenlő (!=, =!, <>, ><) Kisebb (<) Kisebb, vagy egyenlő (<=) Nagyobb (>) Nagyobb, vagy egyenlő (>=) Példa SELECT Év=1996 SELECT Név=“Péter” SELECT Hónap !=“December” SELECT
Kor<70 SELECT Év<=1999 SELECT Év>1999 SELECT Év>=2000 Megjegyzés: Szövegek között a kisebb/nagyobb (<,>) operátorokat az ABC rend szerint kell érteni, pl. “Aladár”<“Zénó” Logikai műveletek Művelet És (&) Vagy (|) Tagadás (!) Példa HétNapja=“Péntek” & Nap=13 Állapot=“Befejezett” | Állapot=“Lezárt” !(Befejezve) Összefűzés művelet Művelet Szöveges típusú mezők illetve állandók összefűzése szöveggé (+) Példa Irszám+” “+Város Szövegek összefűzése listává (:) “Budapest”:”Miskolc”:”Pécs” 226 Eredmény Az irányítószám és a város neve közé egy szóköz kerül. Ha Irszám=“3530” és Város=“Miskolc”, akkor a kifejezés eredménye: “3530 Miskolc” Az így kapott lista három elemű. 5. PROGRAMOZÁSI KÖRNYEZET Listák páronkénti összefűzése (+) Listák összefűzése permutációval (*+) “A”:”B”+”1”:”2” “A1”:”B2”
“A”:”B”*+”1”:”2” “A1”:”A2”:”B1”:”B2” Hozzárendelés művelet (ideiglenes változó használata) Hozzárendelés (:=) művelet elvégzésekor a jobb oldalon álló művelet kiértékelődik és annak eredménye kerül a bal oldali (ideiglenes) változóba. A jobb oldal határozza meg a bal oldal adattípusát. Példa Eredmény Az n ideiglenes változónak 1 értéket adunk. Az m változó értékét eggyel megnöveljük n:=1 m:=m+1 5.21 Kiértékelési sorrend A matematikai műveleteken belül a végrehajtási sorrend a szokásos, a többi esetén a kiértékelés sorrendjét az alábbi táblázat mutatja: (Az 1-es sorszámú művelet hajtódik végre először.) Kiértékelési sorrend 1 2 2.1 2.2 2.3 3 4 5 Művelet Összefűzés művelet Matematikai műveletek: Zárójel Szorzás és osztás Összeadás és kivonás Összehasonlító műveletek Logikai műveletek Hozzárendelés művelet növekvő precedencia A precedenciával kapcsolatban két
dologra kell ügyelni: !" a logikai műveletek nagyon kis precedenciájára, mint ahogy az alábbi táblázat mutatja: Példa SELECT Stílus=“rock”|”klasszikus” Eredmény Csak a rock stílusú dokumentumok lesznek kiválasztva. Az összehasonlító művelet (=) precedenciája nagyobb, tehát a Stílus=“rock” kiválasztás végrehajtódik, míg magában a “klasszikus” nem értelmezhető, így az a | (VAGY) művelet miatt érdektelen. 227 5. PROGRAMOZÁSI KÖRNYEZET SELECT Stílus=(“rock”|”klasszikus”) Nem lesz dokumentum kiválasztva. A zárójelen belüli “rock”| “klasszikus” értéke a logikai nem (0) lesz, így ilyen stílusú dokumentumot sem talál a Notes. Erre választódnak ki a rock vagy klasszikus stílusú dokumentumok! SELECT Stílus=“rock”| Stílus=“klasszikus” !" az összefűzés művelet nagyon nagy precedenciájára Példa 1:2:-3:4 1:2:(-3):4 Eredmény 1:2:-3:-4 A magas precedencia miatt a 3 és a 4 számok
együvé tartoznak (mintha 1:2:-(3:4) lenne) és így a mínuszjel mindkettőjükre vonatkozik. 1:2:-3:4 Így tehetjük a lista valamely elemét negatívvá. Fenntartott kulcsszavak A Notes képletnyelve néhány fenntartott kulcsszót tartalmaz, amelyek egyedi műveleteket végeznek el. Ha kulcsszót szeretnénk használni, annak kell mindig az első szónak lennie a képleten belül. Példa DEFAULT Méret := “kicsi” ENVIRONMENT Állapot := “elkezdve” FIELD Méret := “kicsi” REM “Ez itt a megjegyzés helye” SELECT Stílus=“rock” Eredmény Ha a dokumentumban megtalálható a Méret mező, akkor ez a sor érdektelen. Ha nincs ilyen mező, akkor a dokumentum úgy viselkedik, mintha lenne ilyen mező, mégpedig a “kicsi” értékkel. Ezzel a notes.ini fájlba tárolhatunk el egy értéket (megjelenése a $Állapot=elkezdve sor), amely függvényekkel a későbbiekben kiolvasható. A dokumentumban található Méret mező értéke “kicsi” lesz. Ha még nem
létezett ez a mező, akkor ez a sor létrehozza azt. Így helyezhetünk el megjegyzéseket a képletek közé. Nézetkiválasztó, replikációs és ügynökbeli formuláknál olyan dokumentumokat választ ki, melyeknél a Stílus mező tartalma “rock”. 228 5. PROGRAMOZÁSI KÖRNYEZET Egyéb, a képletekkel kapcsolatos általános szabályok !" Szóköz A képletekben tetszőleges számú szóközt használhatunk, egyetlen megkötés, hogy a fenntartott kulcsszavak után minimum egy szóköz szükséges. !" Új sor használata A képletekben a jobb áttekinthetőség miatt használhatunk soremelést is. !" Kisbetű/nagybetű A Notes nem érzékeny a kis- és nagybetűk használatára, tehát a cégnév és a Cégnév ugyanazt a mezőt jelentheti. Konvenció szerint a fenntartott kulcsszó legyen csupa nagybetű, míg a változók és @függvények nagybetűvel kezdődnek és kisbetűvel folytatódnak. !" Képletek egymás utáni használata Ideiglenes
változók vagy @parancsok használata esetén több képletet is használhatunk egymás után (ideiglenes változó esetén kell is). Az egyes képleteket pontosvesszővel kell elválasztani egymástól. Az ideiglenes változók csak az adott képleten belül érvényesek Kiértékelésük balról jobbra történik, a visszaadott érték pedig a legutolsó lesz. (A @parancsok esetén a kiértékelés sorrendje változhat, erről bővebben az 5.25 fejezetben olvashat.) Példa: dátum:= @Created; hónap:=@Month(dátum); @Text(hónap) Visszatérési érték: 9, szeptember esetén Szintaktikai hibák kezelése A Notes minden képletből való kilépéskor ellenőrzi a képlet szintaktikai helyességét, így akkor találkozhatunk ilyen hibákkal. A hiba rövid leírása egy ablakban jelenik meg, majd kizárólag a hiba kijavítása esetén léphetünk ki a képletből. Általános szintaktikai hibák a következők: !" rosszul begépelt @függvény vagy kulcsszónév !"
hiányzó (vagy több) zárójel !" az egyes képletek közt hiányzó pontosvessző A hibák felfedezését és kijavítását nehezítheti a többszörösen beágyazott formulák használata. 229 5. PROGRAMOZÁSI KÖRNYEZET 5.22 @függvények A Lotus Notes közel 200 @függvényt, vagyis beépített képletet tartalmaz, amelyek valamilyen számítást végeznek el és egy értékkel térnek vissza. A speciális @Command függvények (@parancsok) pedig valamilyen akciót hajtanak végre. Általában a függvények egy, vagy több argumentum megadása után adnak vissza értéket, néhány @függvény viszont nem igényel argumentumokat. Általános felépítésük tehát a következő: @függvénynév(arg1; arg2; ; argn); !" A függvény neve adja meg, hogy hány darab és milyen típusú argumentum szükséges. !" Az argumentumokat egymástól pontosvesszővel kell elválasztani, míg az egészet zárójelbe kell tenni. !" Néhány esetben a függvény
további kulcsszavakat kíván, amelyeket argumentumként szögletes zárójelbe kell tenni. Pl @Name([CN];Név) !" Ha egymás után több @parancsot használunk, azok közé pontosvesszőt kell tenni. Visszatérési érték A @függvények valamilyen visszatérési értéket adnak. Ezek a következő típusúak lehetnek: !" Szöveg/Szöveglista !" Szám !" Dátum/Idő !" Logikai: igaz/true (1) vagy hamis/false (0) A @függvényeket a következő témák szerinti kategóriákban tárgyaljuk: !" Feltételkezeléssel kapcsolatos függvények !" Szövegalakító függvények !" Logikai függvények !" Dátum/Idővel kapcsolatos függvények !" Számtani függvények !" Listákkal kapcsolatos függvények !" Adatátalakító függvények !" Egyéb, speciális függvények A listákban külön jelzem az 5-ös verzióban először megjelenő függvényeket. Feltételkezeléssel kapcsolatos függvények Lehetőségünk van egy
kifejezés logikai igaz vagy hamis értéke alapján különböző eredményt visszaadni. Egy kifejezés logikai értéket ad vissza, ha összehasonlító vagy logikai műveletet használunk benne, vagy pedig egy logikai függvényből áll. 230 5. PROGRAMOZÁSI KÖRNYEZET Példák ezekre a kifejezésekre: Összeg>10000 A kifejezés igaz értéket ad, ha az Összeg változó értéke nagyobb, mint 10000, egyébként hamisat. !(Befejezve) A visszatérési érték igaz, ha a Befejezve mező értéke hamis. Egyébként hamissal tér vissza. @IsNumber(Összeg) Ha az Összeg változó értéke szám, a kifejezés igaz, egyébként hamis. A következő függvényekkel közvetlen formában is kifejezhetjük az igaz, illetve hamis eseményeket: @True, vagy @Yes @False, vagy @No Az 1 (igaz) értéket adják. A 0 (hamis) értéket adják. A @If függvény segítségével egy kifejezés logikai igaz, vagy hamis értéke alapján másmás eredményt adhatunk vissza, így biztosítva a
feltételkezelést. E függvénynek páratlan számú, de minimum három paraméterének kell lennie: !" három paraméter esetén a szintaktika: @If(feltétel; igaz érték esetén; egyébként) A feltétel igaz értéke esetén a második paraméter lesz a függvény visszatérési értéke, hamis érték esetén a harmadik paraméter. Példa egy tipikus ablakcímre: @If(@IsNewDoc; “Új dokumentum”; Tárgy) Visszatérési érték: Ha a dokumentum egy új dokumentum, akkor az ablak címsorába az “Új dokumentum” szöveg kerül. Régi, már kitöltött dokumentumnál a Tárgy mező tartalmát adja vissza a kifejezés. !" öt, hét, stb. paraméter esetén a szintaktika: @If(feltétel1; igaz1 érték esetén; feltétel2; igaz2 érték esetén; ; ; egyébként) Az első feltétel igaz értéke esetén a második paraméter lesz a függvény visszatérési értéke. Ha a feltétel1 hamis, akkor a következő feltétel (feltétel2) kerül kiértékelésre Annak igaz
értéke esetén a visszatérési érték a negyedik paraméter, és így tovább. Ha az összes feltétel hamis értéket ad, akkor az utolsó paraméter a kifejezés értéke. Példa az Állapot mező értékére: @If(Befejezve; “Befejezve”; Határidő<=@Today; “Lejárt”; “Folyamatban”) Visszatérési érték: Ha a Befejezve mező értéke igaz, az Állapot mező értéke a “Befejezve” szöveg lesz. Ekkor a függvény kiértékelése befejeződik Ha a Befejezve mező értéke hamis, akkor a Határidő értékét vizsgálja a képlet. A mai napnál régebbi határidőnél az Állapot értéke “Lejárt” lesz. Minden egyéb esetben az Állapot mező a “Folyamatban” értéket mutatja. 231 5. PROGRAMOZÁSI KÖRNYEZET Az @If függvény által visszaadott érték tetszőleges mező, függvény és kifejezés lehet az értékadás művelet kivételével. Értékadást a függvényen kívül végezhetünk el az érték:=@If(feltétel; igazérték;
hamisérték) formátumban. Ha egy feltételágban több függvényt szeretnénk végrehajtani, akkor a @Do függvényt kell használnunk: @Do(képlet1; képlet2; A függvény paramétereiben megadott képletek (függvény vagy .képletn) parancs) a szokásos kiértékelési sorrendben végrehajtódnak. Példa: @If(@Prompt([YESNO]; "Mentés"; "Elmentsük a dokumentumot?"); @Do(@Command([FileSave]); @Command([FileCloseWindow])); @Command([FileCloseWindow])) Eredmény: Ha az Elmentsük. kérdésre a válasz igen, akkor a dokumentum elmentődik, majd bezárul, egyéb esetben csak bezárul. Szövegalakító függvények A dokumentumok mezőinek nagy része szöveges típusú, ezért a legfontosabb @függvények a szöveges mezőt vizsgálják vagy alakítják át. Négy fő csoportjuk az alábbiak: !" !" !" !" Szöveg tulajdonságait ellenőrző képletek Szöveg meghatározott karakteregységeinek visszaadása Kisbetű/nagybetű átalakító
függvények Egyéb, a szövegek átalakításánál leggyakrabban használt függvények Szöveg tulajdonságait ellenőrző képletek Ezekkel a szöveges érték valamely tulajdonságát ellenőrizhetjük, úgymint karakterszám vagy pl. egy adott minta szerint készült-e el Függvény @Length(szöveg) Leírás A függvény visszaadja a paraméterként megadott szövegben lévő karakterek számát, beleértve a szóközöket és írásjeleket is. Példa: @Length(“A fiú átkelt a széles, de lassú folyón.”) Visszatérési érték: 39. @Matches(szöveg; minta) A szöveget egy mintaszöveg alapján teszteli. A minta he232 5. PROGRAMOZÁSI KÖRNYEZET @Like(szöveg; minta) @Contains(szöveg; részszöveg) @Begins(szöveg; részszöveg) @Ends(szöveg; részszöveg) lyettesítő karaktereket is tartalmazhat: A “?” tetszőleges egyetlen karakternek felel meg, míg a “*” a karakterek tetszőleges sorozatának felel meg. Használhatunk halmazt is, úgy, hogy az {ABC}
jelölés az A, B, C karakterek bármelyikének felel meg, ugyanezt az {A–C} kifejezéssel is jelölhetjük. Példa: @Matches(Irányítószám, “????”) Visszatérési érték: Ha az Irányítószám értéke a magyar szabványnak megfelelően négy karakterből áll, akkor 1, egyébként 0. Összehasonlítja a szöveget egy mintával a @Matches-hez hasonlóan. Ez a függvény viszont megkülönbözteti a kisés nagybetűket, valamint az ANSI SQL szabvány szerint működik, vagyis az “ ” (aláhúzás) felel meg egyetlen karakternek, míg a “%” a több (vagy 0 darab) karakter sorozatának. Ellenőrzi, hogy a részszöveg szerepel-e a szövegben. A függvény megkülönbözteti a kis- és a nagybetűket. Példa: @Contains(Helység;”da”) Visszatérési érték: Ha a Helység értéke “Budapest”, akkor 1, vagyis igaz, ha “Miskolc”, akkor pedig 0. Ellenőrzi, hogy a részszöveg szerepel-e a szöveg elején. Példa: @Begins(“Budapest”;”Bu”) esetén a
visszatérési érték 1, míg a @Begins(“Budapest”;”bu”) esetén 0. Ellenőrzi, hogy egy részszöveg szerepel-e a szöveg végén. Szintén megkülönbözteti a kis- és nagybetűket. Szöveg meghatározott karakteregységeinek visszaadása A szöveg fontosabb karaktereit vagy szavait az alábbi függvények segítségével adhatjuk vissza: Függvény @Left(szöveg; karakterszám) Leírás Egy szövegben balról jobbra haladva visszaadja a szöveg bal oldali részét, méghozzá a karakterszám által megadott számú karaktert. Példa: @Left(“Lotus Notes”;3) Visszatérési érték: “Lot” @Left(szöveg; részszöveg) Ha a @Left függvény második paramétereként egy résszöveget adunk meg, akkor a függvény a részszövegtől balra eső karakterekkel tér vissza; a keresés során balról jobbra 233 5. PROGRAMOZÁSI KÖRNYEZET @LeftBack() @Right() @RightBack() @Middle(szöveg; karakterszám; karakterszám) @Middle(szöveg; részszöveg; karakterszám)
halad. Példa: @Left(Helység;”pe”) Visszatérési érték: “Buda”, ha a Helység mező tartalma “Budapest”. A függvény a @Left-hez hasonló azzal a változással, hogy a szövegben a keresés jobbról balra halad. Példa: @LeftBack(“Kiss Mária”;4) Visszatérési érték: “Kiss M”. Visszaadja a szöveg jobb oldali karaktereit. Megadható a jobb oldali rész karaktereinek a száma vagy egy szövegrész; az utóbbi esetben az ettől jobbra eső karaktereket adja vissza. Hasonló az előzőhöz, csak a keresés jobbról balra halad. Visszaadja a szöveg középső karaktereit. A keresés balról jobbra történik, és a paraméterek adják meg, hogy a középső rész hol kezdődik és végződik. A második paraméter jelzi, hogy hány karakter után kezdődjék a visszaadandó érték, és annak hosszát a harmadik paraméter határozza meg. Ha a hossz negatív, akkor jobbról balra kell számolni a karaktereket. Példa1: @Middle(“Micimackó”, 4, 3)
Visszatérési érték: “mac” Példa2: @Middle(“Micimackó”, 4, -3) Visszatérési érték: “ici” A részszöveg jelzi a visszaadandó rész kezdetét. Példa: @Middle(“Micimackó”, “ma”, 3) Visszatérési érték: “ckó” Függvény Leírás @Middle(szöveg; A karakterszám adja meg a kezdetet, míg a részszövegig karakterszám; részszöveg) tart a visszaadandó rész. Példa: @Middle(“Micimackó”, 2, “ack”) Visszatérési érték: “cim” @Middle(szöveg; A két részszöveg közötti karaktereket adja vissza a részszöveg; részszöveg) függvény. Példa: @Middle(“Micimackó”, “i”, “k”) Visszatérési érték: “cimac” @MiddleBack() A @Middle-höz hasonlóan visszaadja a szöveg középső karaktereit, viszont itt a keresés jobbról balra történik. @Word(szöveg; Megadja a szöveglista egy szavát. A “szó” itt a szöveg elválasztó; szám) olyan részét jelenti, amely a megadott elválasztó karakterrel van a szöveg
többi részétől elválasztva. A harmadik paraméter azt definiálja, hogy a fenti módon 234 5. PROGRAMOZÁSI KÖRNYEZET képzett lista hányadik számú elemét adja vissza. Ha például szóközt adunk meg elválasztóként, akkor a tényleges szavakat kapjuk. Példa: @Word(“Ez egy rövid szöveg”; “ “ ; 3) Visszatérési érték: “rövid”. Kisbetű/nagybetű átalakító függvények A szöveget, mint pl. a neveket kis- és nagybetű használata szempontjából egységesíthetjük az alábbi függvényekkel: Függvény @LowerCase(szöveg) @UpperCase(szöveg) @ProperCase(szöveg) Leírás A szövegben levő karaktereket kisbetűssé alakítja. Példa: @LowerCase(“Nemecsek Ernő”) Visszatérési érték: “nemecsek ernő” A szövegben levő kisbetűs karaktereket nagybetűssé alakítja. Példa: @UpperCase(“Figyelem!”) Visszatérési érték: “FIGYELEM!”. A szövegben levő szavakat név formára alakítja, azaz minden szó első betűje
nagybetű, az összes többi kisbetű. Példa: @ProperCase(Helység) Visszatérési érték: „Los Angeles”, ha a Város nevű mező tartalma: “los angeles”, “Los Angeles”, “LOS ANGELES”, “los Angeles” vagy egy hasonló variáció. Egyéb, a szövegek átalakításánál leggyakrabban használt függvények: Függvény @Trim(szöveg) Leírás Törli egy szövegből, vagy szöveglista esetén minden egyes szövegből a vezető és záró szóközöket; lista esetén az üres listaelemeket is. Példa: @Trim(“ rövid “) Visszatérési érték: “rövid”. @ReplaceSubstring A forrásban bizonyos szavakat vagy kifejezéseket a meg(forrás; mintalista; újlista) adott új szavakkal vagy kifejezésekkel helyettesíti. Ha listát adunk meg, akkor a megfelelő értékek helyettesítődnek. Példa1: @ReplaceSubstring( “Ékezetes szöveg” ; “É”:”ö” ; “E”:”o” ) esetén a visszatérési érték: “Ekezetes szoveg” Megjegyzés: Ezen alapulóan
“ékezettelenítő” függvényt is lehet készíteni. @Repeat(szöveg, szám) A szöveget a megadott számszor megismétli. Példa: @Repeat(“cha”;3) 235 5. PROGRAMOZÁSI KÖRNYEZET @NewLine @Char(szám) @Unique Visszatérési érték: chachacha. Egy szövegbe egy új sort (soremelést) szúr be. Példa: “Budapest” + @NewLine + “1117” Visszatérési érték: “Budapest” “1117” További karaktereket generálhatunk a @Char függvénnyel. Egy IBM 850 kódlap kódszámát a megfelelő egykarakteres sztringgé konvertálja. A @Char(0) és @Char(13) egyaránt soremelés karaktert ad vissza. A @Char(9) a tabulátor karaktert adja meg A függvény a felhasználónéven és az időn alapuló egyedi véletlen szövegértéket generál. Dokumentumok alapértelmezésbeli azonosítószámaként használhatjuk Példa egy visszatérési értékre: “STAS-49JJQ6” Dátum/Idővel kapcsolatos függvények A Notes az időkezeléssel teljesen kódtábla és Y2K
-kompatibilis, viszont a megjelenítés beállításfüggő. Ez azt jelenti, hogy ha az egyik felhasználó számítógépe angol dátumformátumot használ, a másik viszont magyart, akkor a mentés után a nézetben kétféle formátum látszik. Ezeket a szöveges függvényekkel karöltve lehet egységes formátumba hozni. A dátum típusú mezőkben található értékekkel használhatjuk az alábbi függvényeket: Függvény @Date(év; hónap; nap; óra; perc; másodperc) Leírás A megadott év, hónap, nap, óra, perc és másodperc adatokból időt képez. Példa1: @Date(2000; 6; 10; 8; 30; 0) Visszatérési érték: [2000.0610 08:30:00] @Date(időpont/dátum) @Created @Accessed @Modified Ha a @Date függvény paramétereként időpont/dátum-ot adunk meg, akkor csak a dátum részt adja vissza. Példa1: @Date([2000.0610 08:30:00]) Visszatérési érték: 2000.0610 A dokumentum készítésének dátumát és idejét adja vissza. Példa: Ha a dokumentum készítési dátuma
2000. június 21, és ideje délelőtt 8:26:50, akkor a @Created függvény vis??szatérési értéke 2000.0621 8:26:50 DE A dokumentum legutóbbi megnyitásának dátumát és idejét adja vissza. A dokumentum legutóbbi módosításának (szerkesztésének és mentésének) dátumát és idejét adja vissza. 236 5. PROGRAMOZÁSI KÖRNYEZET @Now @Today @Tomorrow @Yesterday @Weekday(időpont/dátum ) @Day(időpont/dátum) @Month(időpont/dátum) @Year(időpont/dátum) Függvény @Hour(időpont/dátum) @Minute(időpont/dátum) @Second(időpont/dátum) Az aktuális dátumot és időt adja vissza. Az aktuális dátumot adja vissza. A holnapi nap dátumát adja vissza. A tegnapi nap dátumát adja vissza. A hét napjainak megfelelő értéket ad vissza. Ha a megadott időpont vasárnapra esik, akkor a visszatérési érték 1, hétfő esetén 2, , szombat esetén 7. A megadott időpont/dátum megfelelő nap értékét adja vis??sza számként. Példa: @Day(@Now) Visszatérési
érték: Ha az aktuális dátum június 10, akkor a visszatérési érték 10. A megadott időpont/dátum megfelelő hónap értékét adja vissza számként. Példa: @Month(@Now) Visszatérési érték: Ha az aktuális dátum június 10, akkor a visszatérési érték 6. A megadott időpont/dátum megfelelő év értékét adja vissza. Példa: @Year(@Now) Visszatérési érték: Ha az aktuális dátum 2000. január 10, akkor a visszatérési érték 2000. Leírás A megadott időpont megfelelő óra értékét adja vissza. A megadott időpont megfelelő perc értékét adja vissza. A megadott időpont megfelelő másodperc értékét adja vissza. @Time(év; hónap; nap; óra; perc; másodperc) Ugyanazt adja vissza, mint a @Date hasonlóan paraméterezett változata. @Time(időpont/dátum) Ha a @Time függvény paramétereként időpont/dátum-ot adunk meg, akkor csak az idő részt adja vissza. Példa1: @Time([2000.0610 08:30:00]) Visszatérési érték: 08:30:00 Egy
időpont/dátum értéket módosít a megadott számértékekkel. A módosítás lehet negatív is Példa: @Adjust(Idő;0;1;0;-1;0;0) Visszatérési érték: az Idő mezőben található időpont értéknél egy hónappal későbbi és egy órával korábbi értéket ad vissza. @Adjust(időpont/dátum; év; hónap; nap; óra; perc; másodperc) 237 5. PROGRAMOZÁSI KÖRNYEZET Számtani függvények A számtani függvények az összes programnyelv által leggyakrabban használt függvényeket tartalmazza. Maga a Notes nem bonyolult számításokra való, de az egyszerűbbek az alábbi függvények segítségével megoldhatók: Függvény @Abs(szám) @Sign (szám) @Sum(szám; szám; .) @Integer(szám) @Round(szám) @Round(szám; faktor) Leírás A megadott szám abszolútértékét adja vissza. A szám előjelét adja meg, 1-et ad vissza, ha pozitív számról van szó, -1-et, ha negatívról és 0-t 0 esetén. A megadott számokat összegzi. A megadott szám egészrészét adja
vissza. A számot a legközelebbi egész számra kerekíti. A szám mellett egy faktort is megadhatunk, amellyel a 10 valamelyik hatványára kerekíthetünk. Példa1: @Round(1234,56; 10) Visszatérési érték: 1230 @Max(szám; szám) @Min(szám; szám) Függvény @Modulo(szám; szám) @Power(alap; hatvány) @Sqrt (szám) @Pi @Log(szám) @Ln(szám) @Exp(szám) @Random @Sin(szögérték) @Cos(szögérték) @Tan(szögérték) @Asin(érték) Példa2: @Round(1234,56; 0,1) Visszatérési érték: 1234,6 Két szám közül a nagyobbat adja vissza. Két szám közül a kisebbet adja vissza. Leírás Azt a maradékot adja vissza, amely az első számot a második számmal elosztva marad. Példa: @Modulo(13; 4) Visszatérési érték: 1, mivel 13=4*3+1 Az alap megfelelő hatványra emelve adja a visszatérési értéket. Példa: @Power(2; 3) Visszatérési érték: 8, mivel 23=8 A megadott szám négyzetgyökét adja vissza. Ez a pi szám (3,14159) A megadott szám 10-es alapú
logaritmusát adja vissza. A megadott szám természetes (e-alapú) logaritmusát adja vissza Az e megadott számú hatványra emelt változatát adja vissza. A függvény egy 0 és 1 közötti véletlen számot generál. A radiánban megadott szög szinuszát számolja ki. A radiánban megadott szög koszinuszát számolja ki. A radiánban megadott szög tangensét számolja ki. A megadott szám arkusz szinuszát számolja ki és radiánban adja vissza. 238 5. PROGRAMOZÁSI KÖRNYEZET @Acos(érték) @Atan(érték) @Atan2(x; y) A megadott szám arkusz koszinuszát számolja ki és radiánban adja vissza. A megadott szám arkusz tangensét számolja ki és radiánban adja vissza. Egy szög y/x tangens értékének arkusz tangensét számolja ki és radiánban adja vissza. Adatátalakító függvények Az egyes adatformátumok között átalakító függvényeket ismertetjük, mivel a műveleteket csak azonos típusú értékekkel lehet végezni. Függvény @Text(érték)
@Text(érték; formátum) Leírás Tetszőleges értéket szöveg típusúvá konvertál. A szám vagy idő típusú érték átalakításánál további formátumparaméterek adhatók meg. Ezeket részletesen a Súgó tartalmazza. Példa: @Text([1999.0315 10:35];”D1S0”) Visszatérési érték: “03.15” Függvény Leírás @TextToNumber(szöveg) Szöveget szám típusúvá alakít. Ha a szöveg számkarakterekkel kezdődik, és betűvel folytatódik, akkor a számot helyesen konvertálja Ha a szöveg nem számkarakterrel kezdődik, akkor hibajelzést ad vissza Példa1: @TextToNumber(“2ség”) Visszatérési érték: 2 Példa2: @TextToNumber(“kétség”) Visszatérési érték: @ERROR @TextToTime(szöveg) A szöveget idő/dátum típusúvá alakítja. Példa: @TextToTime(“1999.315 2:35”) Visszatérési érték: 99.0315 02:35 @IsText(érték) Megvizsgálja, hogy a megadott érték szöveg típusú-e. Ha szöveg, akkor a visszatérési érték igaz (1), egyébként
hamis (0). @IsNumber(érték) Megvizsgálja, hogy a megadott érték szám típusú-e. Ha szöveg, akkor a visszatérési érték 1, egyébként 0. @IsTime(érték) Megvizsgálja, hogy a megadott érték idő/dátum típusú-e. Ha szöveg, akkor a visszatérési érték 1, egyébként 0. Listakezelés 239 5. PROGRAMOZÁSI KÖRNYEZET Mint ahogy azt már az összefűzés műveletnél láthattuk, a lista valójában a szöveg, vagy szám típusú elemek összefűzése a kettőspont (:) használatával. Például: “Budapest”:”London”:”New York”. Egy lista csak azonos típusú elemeket tartalmazhat Lista elemet kapunk a kulcsszó típusú mezők (párbeszédpanel-lista, lista, kombinált lista, jelölőnégyzet) által kiválasztott több elem eredményeként. A következőkben speciálisan a listákkal foglalkozó függvényeket láthatjuk: Függvény @Elements(lista) @Subset(lista; n) @Unique(lista) Függvény @Explode(szöveg) @Explode(szöveg; elválasztójel)
@Implode(lista) @Implode(lista; elválasztójel) @IsMember(szöveg; lista) Leírás Egy lista elemeinek számát adja vissza. Példa: @Elements(“Kiss”:”Nagy”) Visszatérési érték: 2 A függvény a lista első n elemét adja vissza (balról nézve). Negatív szám megadása esetén jobb oldali n elemet adja. Példa: @Member("szilva":"alma":"körte";2) Visszatérési érték: "szilva":"alma" A listából eltávolítja a többször szereplő elemeket. Példa: @Replace("alma":"körte":"szilva":"barack":"szilva") Visszatérési érték: "alma":"körte":"szilva":"barack" Leírás A paraméterként megadott szöveget a függvény felbontja listává úgy, hogy elválasztójelként a szóköz, a vessző és a pontosvessző számít. Példa: @Explode(“Vízkereszt, vagy amit akartok”) Visszatérési érték:
“Vízkereszt”:”vagy”:”amit”:”akartok” Itt megadhatjuk paraméterként, hogy mit tekintsen a függvény elválasztójelként akkor, amikor a szöveget listává bontja. Példa: @Explode(“Vízkereszt, vagy amit akartok”;”,”) Visszatérési érték: “Vízkereszt”:” vagy amit akartok” A függvény az @Explode fordítottja, vagyis egy listát olvaszt össze szöveggé úgy, hogy az elválasztójelként a szóközt használja. Példa: @Implode(“Rómeó”:”és”:”Júlia”) Visszatérési érték: “Rómeó és Júlia” Második paraméterként megadhatjuk, hogy mi legyen a lista elemei közti elválasztójel a szöveggé olvasztáskor. Példa: @Implode(“Ádám”:”Éva”:”Lucifer”;”,”) Visszatérési érték: “Ádám,Éva,Lucifer” A függvény megállapítja, hogy a szöveg eleme-e a listának. Ha igen, akkor igaz (1) a visszatérési érték, egyébként hamis (0) Példa1:
@IsMember("körte";"alma":"körte":"szilva") Visszatérési érték: 1 240 5. PROGRAMOZÁSI KÖRNYEZET @IsMember(lista1; lista2) @IsNotMember() @Keywords(szöveg; lista) Függvény @Replace(lista; mitlista; mirelista) @Member(szöveg; lista) Példa2: @IsMember("kört";"alma":"körte":"szilva") Visszatérési érték: 0 Megvizsgálja, hogy a lista1 részhalmaza-e a lista2-nek. Ha részhalmaza, akkor a visszatérési érték 1, egyébként 0. A függvény a @IsMember ellentettje, azaz a visszatérési érték hamis (0), ha elemről vagy részhalmazról van szó, egyébként igaz (1). Az első paraméterként megadott szöveget a Notes a háttérben szavakra bontja ( a “ , ? ! ; : [ ] { } < > és szóköz elválasztójeleket figyelve), majd a második paraméterként megadott listából azokat az elemeket adja vissza, amelyek szóként szerepelnek a szövegben. Példa: @Keywords("A körte
nyáron érik, míg az alma ős??szel is";"alma":"körte":"szilva") Visszatérési érték: "alma":"körte" Leírás A függvény a listában megkeresi a mitlista elemeit, és ha talál, akkor kicseréli azt a mirelista elemeire, majd az átalakított listát adja vissza. Példa: @Replace("alma":"körte":"szilva";"szilva";"barack") Visszatérési érték: "alma":"körte":"barack" Visszaadja a szöveg, mint listaelem sorszámát a listában. Ha a szöveg nincs a listában, a függvény 0-t ad vissza. Példa: @Member("szilva";"alma":"körte":"szilva") Visszatérési érték: 3 A felhasználóval, vagy a rendszerrel kapcsolatos speciális függvények Itt a felhasználó és környezetének meghatározásához tartozó függvényeket soroljuk fel. Függvény Leírás @UserName A bejelentkezett felhasználó, vagy
szerver teljes nevét adja vissza. Példa: Nagy Péter/Marketing/CÉG jelentkezett be Visszatérési érték: “CN=Nagy Péter/OU=Marketing/O=CÉG” @Name([művelet]; A megadott név formátumát lehet megváltoztatni. Főbb név) műveletek: [CN] – visszaadja a név CN (általános név) részét. Példa: @Name([CN]; “Nagy Péter/Marketing/CÉG”) Visszatérési érték: “Nagy Péter” [OUn] – visszaadja a név megadott számú OU (szervezeti egység) részét. Példa: @Name([OU1]; “Nagy Péter/Marketing/CÉG”) Visszatérési érték: “Marketing” 241 5. PROGRAMOZÁSI KÖRNYEZET Függvény @UserRoles @DbManager @MailDbName @DbName @Password(szöveg) [Canonicalize] – a nevet teljes formátumában írja ki Példa: @Name([Canonicalize]; “Nagy Péter/Marketing/CÉG”) Visszatérési érték: “CN=Nagy Péter/OU=Marketing/O=CÉG” [Abbreviate] – a nevet rövidített formátumában írja ki Példa: @Name([Abbreviate]; “CN=Nagy
Péter/OU=Marketing/O=CÉG”) Visszatérési érték: “Nagy Péter/Marketing/CÉG” [ToKeyword] – a megadott név általános név nélküli részeit fordított sorrendbe rakja és fordított perjellel választja el. Ezt a formátumot a kategorizált nézetekben használhatjuk jól. Leírás Példa: @Name([ToKeyword]; “Nagy Péter/Marketing/CÉG”) Visszatérési érték: “CÉGMarketing” Az aktuális felhasználó szerepköreinek listáját adja vissza az éppen nyitva lévő adatbázisra. A szerepköröket az adatbázis hozzáférési listájában (ACL) lehet beállítani. Helyi adatbázis esetén üres sztringet ad vissza. Az aktuális adatbázis azon felhasználóinak, csoportjainak és szervereinek listáját adja vissza, amelyek Menedzser joggal rendelkeznek az adatbázisra nézve. Példa: @DbManager Visszatérési érték: “LocalDomainServers”;”Managers” A felhasználó levelesládájának helyét adja vissza. A kételemű lista első eleme a szerver neve
(helyi adatbázis esetén ““), második eleme pedig a fájlnév a hozzá tartozó elérési útvonallal. Példa egy visszatérési értékre: “Server1”;”mailusername.nsf” Az aktuális adatbázis helyét adja vissza a @MailDbName-nél kifejtett kételemű listában. A megadott szöveget titkosítottan jelenít meg. A kódolt változatból nem állíthatjuk vissza az eredeti szöveget. Ezt a függvényt jól használhatjuk egy mező átfordító képleteként, így titkosítva a jelszavakat. Példa: @Password(„alma”) Visszatérési érték: “(22E4359ABFF32E4F2C64EDDA78B2E972)” 242 5. PROGRAMOZÁSI KÖRNYEZET Nézetekkel kapcsolatos függvények A nézetekben található (főként szülő/gyermek viszonyban álló) dokumentumokkal kapcsolatban kaphatunk vissza információkat: Függvény @AllChildren Leírás Az adott dokumentum közvetlen gyermekdokumentumát választja ki. Csak nézet kiválasztási képletében használható @Responses Az aktuális
nézetben az adott dokumentum válaszainak számát adja vissza. Csak ablakcímben használható Függvény @DocChildren Leírás Visszaadja egy dokumentum gyermekdokumentumainak számát. Csak oszlopképletben használható. Példa: @DocChildren, miközben a nézet a következő: dokumentum gyermekdok1 algyermekdok1 algyermekdok2 gyermekdok2 algyermekdok1 Visszatérési érték: 2, mivel a dokumentumnak két közvetlen gyermeke van. @DocDescendants Visszaadja egy dokumentum gyermek- és az alatti algyermekdokumentumainak számát. Csak oszlopképletben használható Visszatérési érték a @DocChildren-nél leírt példában: 5, mivel a dokumentumnak a két közvetlen gyermekén kívül még három algyermeke is van. @IsCategory Megállapítja, hogy a megadott sor kategória, vagy dokumentum. Kategória esetén a visszatérési érték “*”, egyébként ““. Csak oszlopképletben használható. @IsCategory(igazsz Az előző képlet kiegészítve azzal, hogy kategória esetén
az öveg;hamisszöveg) igazszöveget adja vissza, egyébként a hamisszöveget. Példa: @IsCategory (“kategória”;”dokumentum”) Visszatérési érték: Kategória esetén “kategória”, dokumentum esetén “dokumentum”. @IsExpandable Ha a megadott dokumentum vagy kategória kiterjeszthető, akkor a “+” jelet adja vissza, ha nem, akkor pedig a “-” jelet. Csak oszlopképletben használható. Az @IsExpandable(igazszöveg;hamisszöveg) formátum használata esetén megadhatjuk a visszaadandó szövegek megnevezéseit. 243 5. PROGRAMOZÁSI KÖRNYEZET Dokumentumokkal kapcsolatos függvények A dokumentumok állapotát és néhány tulajdonságát tudhatjuk meg az alábbiak használatával: Függvény @DocLength Leírás A dokumentum hozzávetőleges méretét adja meg bájtokban. Függvény @Author Leírás A dokumentum szerzőjének vagy szerzőinek nevét adja vissza. A Szerző típusú mezővel megváltoztathatjuk, hogy ki legyen az adott dokumentum
következő szerzője. A dokumentum mezőneveinek listáját adja vissza. A csatolt fájlok számát adja vissza. Példa egy ikonként megjelenő oszlopban: @If(@Attachments;5;0) Visszatérési érték: Egy gépkapocs ikon, ha a dokumentumhoz van hozzácsatolt fájl, egyébként semmi nem jelenik meg. A csatolt fájlok fájlneveit adja vissza A csatolt fájlok hosszát adja vissza bájtokban. @DocFields @Attachments @AttachmentNames @AttachmentLengths A következőkben felsorolt függvényekkel a dokumentum adott állapotát vizsgálhatjuk meg. Az @IsNewDoc függvénnyel például az új (mentés előtti) dokumentumot különböztethetjük meg a már elmentettől Függvény @IsNewDoc Leírás Igazat (1) ad a függvény, ha a dokumentumot még nem mentettük ki, egyébként hamisat (0). @IsResponseDoc Igazat (1) ad a függvény, ha a dokumentum válasz típusú, egyébként hamisat (0). @IsDocBeingEdited Igazat (1) ad a függvény, ha a dokumentum szerkesztés módban található,
egyébként hamisat (0). @IsDocBeingLoaded Igazat (1) ad a függvény, ha a dokumentum a memóriába betöltött, egyébként hamisat (0). @IsDocBeingSaved Igazat (1) ad a függvény, ha a dokumentum mentés alatt van, egyébként hamisat (0). @IsDocBeingMailed Igazat (1) ad a függvény, ha a dokumentum éppen postázódik, egyébként hamisat (0). @IsDocBeingRecalculated Igazat (1) ad a függvény, ha a dokumentum frissítés alatt van, egyébként hamisat (0). Adatok kezelésével kapcsolatos függvények Az adatok kezelésével foglalkozó függvényeket az alábbi elrendezésben találhatják meg: 244 5. PROGRAMOZÁSI KÖRNYEZET !" !" !" !" !" !" Egy adatbázison belüli adatok lekérdezése és beállítása Más Notes adatbázison belüli adatok elérése Adatok elérése a címjegyzékből Adatok elérése a notes.ini-ből vagy profil dokumentumból Külső adatok elérése ODBC segítségével Adatelérés további módozatai Egy
adatbázison belüli adatok lekérdezése és beállítása Függvény @DocumentUniqueID Leírás A dokumentum egyedi azonosítóját (unique ID, vagy UNID) adja vissza. Ha egy számított mezőnek ezt az értéket adjuk, akkor a dokumentumban egy dokumentum-lánc (doclink) jelenik meg önmagára. Gyermekdokumentum esetén a $Ref mezőben a szülő dokumentumazonosítóját kaphatjuk. Példa: @Text(@DocumentUniqueID) Visszatérési érték: “D16FEA229621BD4FC12567900058E5CE” @InheritedDocumentUniqueI Ha az egyik dokumentum valamely más dokumentumból D örökli a mezőket, a függvény a fődokumentum egyedi azonosítóját adja vissza. Ha nincs öröklés, akkor az eredmény megegyezik a @DocumentUniqueID értékével. @IsAvailable(mezőnév) Igaz (1) a visszatérési érték, ha a megadott mező szerepel a dokumentumban, egyébként hamis (0) értéket ad vissza. @IsUnavailable(mezőnév) Az @IsAvailable ellentéte. Igazat (1) ad, ha nincs a dokumentumban a megadott mező,
egyébként hamisat (0). @GetDocField(unid; A dokumentumazonosító és a mezőnév alapján a mező fieldName) értékét adja vissza. Példa: @If(@IsNewDoc; Tárgy; @GetDocField($Ref; "Tárgy")) Visszatérési érték: A $Ref a szülődokumentumra mutat, így a függvény a már elmentett dokumentum esetén a szülődokumentum Tárgy mezőjét adja vissza. @SetDocField(unid; A dokumentumazonosító és a mezőnév alapján fieldName; érték) megkeresett mező az adott értékét kapja. @DeleteField A mezőnek ezt az értéket adva a teljes mező törlődik az adott dokumentumból. Példa: FIELD Tárgy := @DeleteField Eredmény: a Tárgy nevű mező törlődött a dokumentumból. 245 5. PROGRAMOZÁSI KÖRNYEZET Más Notes adatbázison belüli adatok elérése Egy Notes alkalmazásban, vagyis adatbáziscsoportban többször elő kell hívni más adatbázison belüli értékeket, vagy értékcsoportokat. Ezekre vonatkozik a @DbColumn és @DbLookup függvény. Mindkét
függvényben meg kell adni azt az adatbázist, amelyből az adatot ki szeretnénk nyerni. A következő @DbColumn függvény megkeresi és előhívja az adott adatbázis egyik nézetének, vagy gyűjtőjének adott oszlopában található összes értéket. A függvény tehát egy listát ad vissza, amit pl. kulcsszó típusú mezők elemeiként használhatunk fel @DbColumn( osztály : gyorsítótár ; szerver : adatbázis ; nézet ; oszlopszám ) Az egyes paraméterek a következők: !" osztály Az adatbázis típusát kell megadni. Notes adatbázis esetén ide “” vagy “Notes” szöveget kell írni. Az ODBC elérésről később lesz szó !" gyorsítótár Ha a “NoCache” szöveget írjuk ide, akkor minden függvényhasználatnál az értékek újból behívódnak, minden más esetben (pl. “”) az értékek a gyorsítótárba kerülnek A gyorsítótár használata meggyorsítja az adatok elérését, mivel egy Notes bejelentkezés alatt csak az első esetben
szedi le az adatokat. Néha az adatok gyors változása miatt szükségünk lehet a gyorsítótár kiiktatására, viszont az állandó újraolvasás jelentős időveszteséget eredményezhet. !" szerver : adatbázis A lehívandó adat helyét, vagyis szerver és adatbázisnevét kell megadni. A lehetőségek: !" ugyanazon adatbázis esetén a teljes kifejezés helyett: “” !" ugyanazon a szerveren található adatbázis esetén: “”:”db.nsf” !" a teljes kifejezés helyett a replika ID-t is használhatjuk, pl. Designer súgó esetén: “8525672F:0079E2EB” !" általános esetben pedig: pl. “BpServer01”:”mail\adminnsf” !" nézet A nézet nevét kell megadni, ahonnan az oszlop adatait vissza szeretnénk kapni. A másodlagos név használata célszerű! !" oszlopszám Azon oszlop száma, ahol az adatok találhatók. Példa a @DbColumn függvényre: Ha az eloadokat másodlagos nevű nézet az első oszlop szerint kategorizált, a
következőképpen néz ki: 246 5. PROGRAMOZÁSI KÖRNYEZET Előadó Lokomotív Gt. Cím Cdszám Stílus Ringasd el magad 1 Rock akkor a @DbColumn( "" : "NoCache" ; "" : "" ; "eloadokat" ;1) függvény az előadók neveit szedi elő az első oszlopból. Mivel a nézet kategorizált, ezért két egyforma név nem fordulhat elő a listában. Így hozhattunk létre egy kulcsszó típusú mezőt, amiben az előadók nevei sorakoznak. Figyelem! A @DbColumn csak 64Kb adatot tud visszaadni. A visszaadott adatok mennyisége szöveg esetén a (2 + (2 * visszaadott elemek száma) + az összes szöveg mérete) képlettel, míg szám vagy dátum esetén a ((10 * visszaadott elemek száma) + 6) képlettel határozható meg. A nagy adatbázisok tervezésénél vegyük figyelembe ezt a korlátozást és megfelelő szétbontással, pl. A-K, L-Z biztosítsuk a használhatóságot A @DbLookup függvény megkeresi az adott adatbázis egyik
nézetének, vagy gyűjtőjének első oszlopában a megadott kulcs szerinti értéket tartalmazó dokumentumot vagy dokumentumokat. A függvény a dokumentum(ok)nak a megadott nézet és oszlopszámban található vagy az adott mezőnevű értékét adja vissza. Ez a függvény tehát dokumentumonként egy értéket ad vissza. @DbLookup( osztály : gyorsítótár ; szerver : adatbázis ; nézet ; kulcs ; oszlopszám vagy mezőnév) Az első paraméterek használata megegyezik a @DbColumn-nál definiáltaknak. Az új értékek: !" !" !" kulcs Az a szöveg, amely szerinti dokumentumokat ki szeretnénk válogatni. A szövegnek pontosan meg kell egyezni a nézetbeli felirattal, operátorok (pl. <) vagy helyettesítő karakterek (pl. *) NEM használhatók. A nézet legalább egy oszlopának rendezettnek kell lenni, különben hibajelzést kapunk. oszlopszám A megadott nézet adott számú oszlopában található értéket adja vissza a függvény. mezőnév A
megkeresett dokumentumok megadott nevű mezőiben található értékeket adja vissza a függvény. A mezők megkeresése időigényesebb folyamat, mint az oszlopszám szerinti keresés, ezért inkább azt használjuk egy további oszlop felvételével. A @DbColumn-nál leírt 64Kb-os korlát a @DbLookup függvényre is vonatkozik. 247 5. PROGRAMOZÁSI KÖRNYEZET Példa a @DbLookup függvényre: Ha a noveny másodlagos nevű nézet a következőképpen néz ki: Csoport gyümölcs gyümölcs zöldség Növény Alma Körte Sárgarépa akkor a @DbLookup( "" : "NoCache"; ""; "noveny"; “gyümölcs”; 2) függvény a gyümölcsök neveit szedi elő, azaz “alma”:”körte” lesz a visszaadott érték. Adatok elérése a címjegyzékből A címjegyzék az 5-ös Notes-ban jelentősen kibővült, mivel bekerültek az adminisztrációhoz szükséges jellemzőkön kívül például a munkahelyi hierarchiára jellemző mezők, továbbá
néhány egyedileg konfigurálható mező is. Így most már nem szükséges egy külön adatbázist készíteni a hierarchia és egyéb munkahelyi jellemzők tárolására, azok ugyanis a címjegyzékből előhívhatók az alábbi függvény segítségével. Függvény Leírás @NameLookup([kapcsoló]; A függvény a megadott nevű felhasználó adott paraméteréfelhasználónév; paraméter) nek értékét adja vissza. A kapcsolókkal szabályozhatjuk a keresés mélységét és alaposságát. Az [EXHAUSTIVE] (Notes 5-ös függvény!) kapcsoló az összes elérhető címjegyzékben keresi a felhasználót. Ha a @NameLookup nem találja meg az adott felhasználót, akkor egy üres sztringgel tér vissza. Adatok elérése a notes.ini-ből vagy profil dokumentumból Adatok adhatók át egyik dokumentumból a másikba a notes.ini fájl, vagy a profil dokumentum segítségével Függvény @SetEnvironment(változó; érték) ENVIRONMENT @Environment(változó) Leírás A függvény az
aktuális felhasználó saját munkaállomásának notes.ini-jében létrehoz egy olyan sort, amelynek tartalma: pl. @SetEnvironment(“Gyumolcs”; “alma”) esetén $Gyumolcs=alma Az előzőhöz hasonló eredményt érhetünk el az ENVIRONMENT kulcsszó használatával. Az előző esetbeli szintaktika a következő: ENVIRONMENT Gyumolcs:= "alma" A notes.ini-ben található változó kiolvasása történhet így A példánkban @Environment(“Gyumolcs”) visszatérési értéke: “alma” 248 5. PROGRAMOZÁSI KÖRNYEZET A notes.ini-s tárolás legfőbb tulajdonsága, hogy csak az aktuális felhasználó láthatja a saját notes.ini-jét A profildokumentum ezzel szemben az adatbázisban tárolódik, és mindenki elől rejtve marad, de mindenki használhatja is. Általában egy profil dokumentum elégséges, – de mivel opcionálisan szűkíthető az elérés egyedi felhasználóra is, – több dokumentumot is létrehozhatunk. Függvény @SetProfileField( profilnév
; mezőnév ; érték [ ; felhasználó] ) @GetProfileField( profilnév ; mezőnév [ ; felhasználó] ) @Command( [EditProfile] ; profilnév [; felhasználó]) Leírás A profildokumentum adott mezőjének adhatunk így értéket. A profildokumentumról mezőértékeket olvashatunk ki. A profilt ezzel az utasítással akkor szerkeszthetjük, ha létrehozunk egy űrlapot a profil nevével és létrehozzuk a mezőket is rajta. Külső adatok elérése ODBC segítségével ODBC segítségével a Windowsos platformokon külső adatforrásokat érhetünk el. Ehhez először a Vezérlőpult (Control Panel) 32 bit ODBC beállításait kell beállítanunk. Létre kell hozni egy Data Source objektumot, ahol be kell állítani a nevet és fájlnevet. 5.2 ábra Kép a 32bit ODBC-ről Ezután használhatjuk a @DbColumn és @DbLookup függvényeket megfelelően felparaméterezve. Például: 249 5. PROGRAMOZÁSI KÖRNYEZET
@DbColumn("ODBC";"Vevok";"";"";"Sheet1";"Varos") Adatelérés további módozatai Az előzőkben a Notes saját adatbázisainak, illetve külső adatforrások ODBC meghajtók általi elérését részleteztük. Az alábbiakban összefoglaljuk az adatbáziskapcsolatok további (jelen pillanatig rendelkezésre álló) lehetőségeit: !" @Db függvények és LS:DO (LotusScript Data Object) Az ODBC általi adatelérés képlet és LotusScript megfelelői !" DECS (Domino Enterprise Connection Services) Szerverfeladat, amely egy varázsló- (wizard) típusú konfigurációval lehetővé teszi, hogy az alkalmazások natív és valósidejű hozzáférést kapjanak adatokhoz és alkalmazásokhoz. Jelenlegi ingyenes adatforrások: Oracle, DB2, Sybase, fájlrendszer, ODBC, EDA/SQL !" !" További rendszerekhez (pl. SAP, PeopleSoft, CICS, MQSeries) kiegészítő termékként léteznek kapcsolódást natívan
lehetővé tevő modulok. Ezekre a Connector-okra épülnek rá a Domino Connector LSX-ek (LotusScript Extension), amelyekkel könnyen programozhatóvá tehetők a kapcsolatok. Lotus Enterprise Integrator (előző nevén NotesPump) Külön termék, a DECS funkcionalitás kiegészítője. Megbízható valósidejű kapcsolatot és szinkronizációt teremt a Domino alkalmazások és a relációs (vagy egyéb) adatbázisok között még rendkívül nagy adatmennyiségek esetén is. !" Domino driver for JDBC Java appletekből és alkalmazásokból általános JDBC elérést biztosít a Domino adatbázisokban tárolt információkhoz. 5.23 Kapcsolat a felhasználóval A felhasználóknak a mezők segítségével adott az adatbevitel és információeljuttatás lehetősége. Kiemelt esetekben célszerű egy ablakot megjelenítve információt adni pl egy mező kitöltéséről. Ugyanilyen közvetlen kapcsolatba kell kerülni a felhasználóval, ha mindenképpen egy megadott
sorrendben szeretnénk egy űrlapot kitöltetni. Az alábbiakban ezeket a függvényeket foglaljuk össze. Információ megjelenítése a képernyőn A @Prompt függvény [Ok] kapcsolójának használatával jeleníthetünk meg egy tájékoztató üzenetet. Pl. @Prompt([Ok];"Emlékeztető";"Ne feledd, hogy ") A függvény futtatásakor annak megjelenése: 250 5. PROGRAMOZÁSI KÖRNYEZET 5.3 ábra (Képernyőkép a @Prompt függvény eredményéről) Felhasználói adatok bekérése A Prompt függvény további kapcsolóival valamilyen adatot kérhetünk be. Lehet ez egy Igen, vagy Nem gomb megnyomása, lehet egyszerű szövegbeírás, de egy programozható listából való választás is. A következő táblázatban a kapcsolók változatait összesítjük: Ok YesNo YesNoCancel OkCancelEdit OkCancelList OkCancelCombo OkCancelEditCombo OkCancelListMult LocalBrowse Password Leírás Tájékoztató üzenet megjelenítése A felhasználó megadhat egy Igen/Nem
döntést A felhasználó megadhat egy Igen/Nem vagy Mégse döntést A felhasználó megadhat egy szöveget A felhasználó az értékek listájáról kiválaszthat egy értéket A felhasználó az értékek legördülő listájáról választhat ki egy értéket A felhasználó az értékek listájáról kiválaszthat egy értéket vagy begépelhet egy szöveget A felhasználó az értékek listájáról kiválaszthat egy vagy több értéket A felhasználó fájlneveket választhat a helyi fájlrendszerből. A felhasználó megadhat egy jelszót úgy, hogy az nem jelenik meg a képernyőn Az összes fenti esetben a paraméterezés eltérő (a Súgóban utánanézhető), most néhány felhasználási példát emelünk ki ezekből: !" @Prompt([YesNoCancel]; "Üzenet elküldése?"; "Üzenet elküldése a To, CC, és BCC mezőkön felsorolt címzetteknek." ) Ha a felhasználó Igen-t választ, a visszatérési érték igaz (1), Nem esetén nem (0), Mégse
esetén –1. !" @Prompt([OkCancelEdit]; "Adja meg a nevét"; "Adja meg a nevét a mezőben.";@Name([CN]; @UserName)) Általános névbekérő ablak, alaphelyzetként a bejelentkezett felhasználó Notes nevét írja ki. 251 5. PROGRAMOZÁSI KÖRNYEZET !" @Prompt([OkCancelList]; "Válasszon adatbázist"; "Válassza ki a megnyitandó adatbázist."; "Terv"; "Terv":"Telefonkönyv") A Terv és a Telefonkönyv szavak találhatók abban a listában, amiből a felhasználó választhat, alaphelyzetként a Terv szó a kiválasztott. Dokumentumkiválasztás nézetből A @PickList függvény megjelenít egy ablakot, amelynek tartalma egy megadott nézet, amelyből a felhasználó egy vagy több dokumentumot ki tud választani. A @PickList a kiválasztott dokumentum(ok) sorszámmal megadott oszlopértékét adja vissza. Szintaxis: @PickList( [Custom] : [Single] ; szerver : fájl ; nézet ; ablakcím ;
kérdés ; oszlop ) Példa a függvényre: termékkód:=@PickList( [Custom] ; @DbName ; "Termékek" ; "Válasszon terméket" ; "Kérem adja meg a megrendelni kívánt termékeket" ; 5 ); A termékmegrendelés képlete az aktuális adatbázis Termékek nézetét jeleníti meg, és visszaadja a nézet ötödik oszlopának tartalmát, mondjuk a termékkódot. Nevek kiválasztása a Címjegyzékből A @PickList( [Name] : [Single] ) paraméterek használatával a Címjegyzékekből választhat a felhasználó egy vagy több személyt, csoportot vagy szervert, és a függvény a nevekkel tér vissza. Űrlap megjelenítése ablakban A @DialogBox függvény az aktuális dokumentumot a megadott űrlap segítségével megjeleníti egy párbeszédpanelben. A felhasználó a dokumentummal és az űrlappal folytatott munka után az OK vagy a Mégse gombbal zárhatja be a panelt. Szintaxis: @DialogBox( űrlap ; [AutoHorzFit] : [AutoVertFit] : [NoCancel] :
[NoNewFields] : [NoFieldUpdate] : [ReadOnly] ; cím ) Levél küldése Levél küldése egy másik felhasználónak a @MailSend függvény segítségével alapvetően két módon hívható: !" Paraméterek nélkül a @MailSend elküldi az aktuális dokumentumot (amelyik a @függvény kiértékelésekor éppen feldolgozás alatt van) a dokumentum SendTo mezőjében megadott címzetteknek. Szükséges, hogy a dokumentumban legyen SendTo mező. 252 5. PROGRAMOZÁSI KÖRNYEZET !" @MailSend( cím ; másolatcím ; vakmásolatcím ; tárgy ; megjegyzés ; mezők ; [ kapcsolók ] ) Egy vagy több paraméterrel a @MailSend egy új üzenetfeljegyzést készít az argumentumlistában megadott információk alapján, amelyet elküld a cím, másolatcím és vakmásolatcím argumentumokkal megadott címzetteknek. A tárgy paraméter a levél tárgya lesz, míg a megjegyzés mezőbe a levél törzsébe írandó szöveget írhatjuk, ehhez adódik hozzá a paraméterként megadott
mezők tartalma. Az alábbi példában az aktuális dokumentumra mutató dokumentumlánc kerül a levél törzsébe: @MailSend ("Pesti Barnabás/Bud/Kerekerdo";"";"";"Kattints kettőt az alábbi dokumentumláncra";"";"";[IncludeDocLink]) Részletes kapcsolólista a Súgó adatbázisban található. Futási hibák kezelése, alkalmazástesztelés A futás közben előforduló hibák az alábbi csoportokba sorolhatók: !" Nem várt hibák Ez az a csoport, amelyet a felhasználónak nem lenne szabad látnia. Ezek pl a nem megfelelő paraméterszám esetén előbukkanó “Kevés argumentum a @függvényhez” típusú hibák. Ezeket a hibákat a részletes, és lehetőleg mindenre kiterjedő teszteléssel lehet kiszűrni. !" Szemantikai hibák Ide olyan hibák tartoznak, amelynél hibajelzést nem lát a felhasználó, viszont mást végez el a függvény, mint amelyet szerettünk volna végeztetni. Ha a @Prompt
függvénynek szám paramétert adunk, akkor az semmit sem (a számot sem) ír ki. Ezt a hibatípust is csak alapos teszteléssel kerülhetjük el !" Várt és lekezelt hibák Olyan hibákra kell itt gondolni, amelyet egy felhasználó normál körülmények között megtehet, viszont hibajelzést produkál. Példa erre egy adatbázis nevének megadásakor egy érvénytelen fájlnév beírása. Ezeket az eseteket a fejlesztőnek kell lekezelnie és “bolondbiztossá” tenni az alkalmazást. A következő függvényeket használhatjuk ilyen célokra: !" !" !" @IsError(kifejezés) igaz (1) értéket ad, ha a kifejezés hibát generálna. Ekkor a saját függvényünket (pl. egyéni hibajelzést) állíthatunk elő @Failure(üzenet) és a @Success kifejezések használhatók a mezők bemenet érvényesítési képleteinél (1.28 fejezet) @Return(érték) a képlet futtatását megszakítja és a megadott értékkel tér vissza. A Notes képletnyelvének nincsen
saját nyomkövető (debug) eszköze. Ilyen célra a @Prompt függvényt lehet használni [Ok] paraméterrel, azzal ugyanis úgy szakíthatjuk meg 253 5. PROGRAMOZÁSI KÖRNYEZET a képletek futását, hogy közben egy ablakba kiírathatjuk a számunkra érdekes mezők tartalmát, és az ablak az Ok gomb megnyomásáig a képernyőn látható. Másik lehetőség egy olyan mező használata, amelyhez a nyomkövetés során hozzáírjuk a számunkra érdekes mezők tartalmát az adott időpontokban. Így egy futtatás végeztével megtekinthetjük a mezőt és tartalmát. Természetesen a program tesztelése után a @Prompt függvényeket és nyomkövető mezőket is távolítsuk el. További új (Notes 5) függvények Az új lehetőségekkel kapcsolatos néhány függvény: Függvények Leírás @ValidateInternetAddress([ A megadott internetes címet ellenőrzi, hogy megfelelnek-e kulcsszó]; cím) az RFC 821 vagy RFC 822 formátumnak. A kulcsszavak lehetnek: (Notes 5-ös
függvény!) [Address821] Ez a RFC821 formátumot ellenőrzi, pl. sera@aloha2000.hu [Address822] Ez pedig a RFC822 formátumot, pl. “Séra, Tamás” <sera@aloha2000.hu> Ha az ellenőrzés sikeres volt, akkor egy üres sztringet ad vissza a függvény, egyébként valamilyen angol nyelvű hibajelzést. Példa néhány hibajelzésre: “Invalid or missing Domain” “Invalid LocalPart or character found” @UndeleteDocument Az egyes adatbázisokra beállítható a szoftveres törlés (soft delete) lehetősége, azaz a törlés parancsra nem törlődik (Notes 5-ös függvény!) véglegesen a dokumentum. Az @UndeleteDocument függvénnyel állíthatunk vissza egy már szoftveresen törölt dokumentumot. 5.24 @Parancsok A Lotus Notes közel 400 @parancsot, vagyis speciális @Command függvényt tartalmaz. @Parancsokkal az összes szokásos Notes felhasználói menüművelet végrehajtható, valamint ezeken kívül további speciális parancsok is elérhetők. A parancsok csak
olyan környezetben futtathatók, amelyeket egy felhasználó is megtehet, így például időzített ügynöknél nem használhatók. Webes környezetben a parancsok nagy része nem használható, hiszen a felhasználói felület teljesen eltérő. Ezzel, illetve a parancsok paraméterezésével kapcsolatban bővebb információ a Súgó Képletnyelv @Parancsok A-Zig részében olvasható. 254 5. PROGRAMOZÁSI KÖRNYEZET Szintaktikailag a parancsok a @függvények közé tartoznak, hasonlóan hozzájuk némelyikük igényel argumentumokat, de a többség nem. Általános felépítésük tehát a következő: @Command( [parancsnév] ; arg1; arg2; ; argn); vagy @PostedCommand( [parancsnév] ; arg1; arg2; ; argn); !" A parancs neve adja meg, hogy hány darab és milyen típusú argumentum szükséges. !" A parancs nevét szögletes zárójelbe kell tenni, az argumentumokat pedig egymástól pontosvesszővel választjuk el, míg az egészet zárójelbe kell tenni.
!" A @PostedCommand paranccsal a parancsok kiértékelési sorrendjét változtathatjuk meg, később részletezzük. Visszatérési érték A @parancsok visszatérési értéke igaz (1) vagy hamis (0), attól függően, hogy a műveletet el lehetett végezni, vagy sem. A fejlesztők általában a visszatérési érték ellenőrzését nem szokták kihasználni, mivel csak néhány esetben van értelme, pl. [FileOpenDatabase] esetén. 5.25 Kiértékelési sorrend A @parancsok kiértékelési sorrendje kis mértékben eltér a @függvényekétől. Ott ugyanis biztosak lehettünk benne, hogy az egyes függvények egymás után hajtódnak végre. A @Command parancsok néhány kivételtől eltekintve szintén balról jobbra, illetve fentről lefelé hajtódnak végre. Az összes @Command parancsot lehet @PostedCommand szintaktikával írni. Ekkor a @PostedCommand jelzésű parancsok mindenképpen az összes @függvény után hajtódnak végre. Hasonlóan működnek a @Command
kivételei, amelyek a következők: [FileCloseWindow], [FileDatabaseDelete], [FileExit], [NavigateNext], [NavigateNextMain], [NavigateNextSelected], [NavigateNextUnread], [NavigatePrev], [NavigatePrevMain], [NavigatePrevSelected], [NavigatePrevUnread], [NavigateToBackLink], [ToolsRunBackgroundMacro], [ToolsRunMacro], [ViewChange], [ViewSwitchForm]. Példa1: A sorrend a szokásos, vagyis előbb szerkesztő módba kerül a dokumentum, majd kiíródik az üzenet: @Command([EditDocument]; "1"); @Prompt([OK]; "Szerkesztés"; "A dokumentum szerkesztő módban van.") Példa2: A parancs a @függvény (@Prompt) után hajtódik végre, vagyis előbb íródik ki az üzenet, majd csak utólag kerül a dokumentum szerkesztő módba: @PostedCommand([EditDocument]; "1"); @Prompt([OK]; "Szerkesztés"; "A dokumentum szerkesztő módba fog kerülni.") 255 5. PROGRAMOZÁSI KÖRNYEZET A parancsok egymáshoz viszonyítva sorrendben
hajtódnak végre. Kisebb problémákat okozhat még az számunkra, hogy a végrehajtás sorban kezdődik el, viszont a Notes a következő parancs elindítása előtt nem mindig várja meg, hogy az előző parancs végrehajtódjon. Figyeljünk erre a nagy időigényű parancsoknál, mint például az [OpenView], ha a nézetindexek nincsenek felfrissítve. A függvények és parancsok sorrendiségének biztosítására az @If és a @Do függvényeket használhatjuk (lásd 5.22 fejezet) 5.26 Néhány fontosabb @parancs A @parancsok közül csak a legfontosabbakat említjük meg az alábbi csoportosításban: !" Dokumentumokkal kapcsolatos parancsok !" Vágólapműveletek és kijelölés !" Kurzorműveletek !" Nézetekkel kapcsolatos parancsok !" Súgóval kapcsolatos parancsok !" Egyéb érdekes parancsok Dokumentumokkal kapcsolatos parancsok !" @Command([Compose]; szerver : adatbázis ; űrlap ; szélesség : magasság) A megadott szerveren
található adatbázisban az űrlap alapján egy új dokumentum keletkezik. A szélesség és magasság paraméterek opcionálisak, az ablak méretét jelzik hüvelykben. !" @Command( [OpenDocument] ; írhatóvagycsakolvasható ; UNID ; szélesség : magasság ) Az UNID (dokumentumazonosító)-val megadott dokumentum megnyitásra kerül. Ha az első paraméternek 1-et adunk, akkor a dokumentum szerkesztő módba kerül, míg 0 esetén olvasó módba. Ha az UNID paramétert nem adjuk meg, akkor a parancs az aktuálisan kiválasztott dokumentumon hajtódik végre. A szélesség és magasság paraméter hasonló, mint a [Compose] esetén !" @Command( [ViewSwitchForm] ; űrlapnév ) Az aktuális dokumentumot a megadott űrlappal nyitja meg. !" @Command( [EditDocument] ; mód ) A mód paraméter megadásával az aktuális dokumentumot szerkesztő (mód=1), illetve olvasó (mód=0) módba tehetjük. Paraméter megadása nélkül a dokumentumot olvasó módból
szerkesztőbe teszi, illetve szerkesztő módból olvasó módba. !" @Command([FileSave]) A szerkesztő módban lévő dokumentumot elmenti. 256 5. PROGRAMOZÁSI KÖRNYEZET !" @Command([FilePrint] ; másolatokszáma ; laptól ; lapig ; ifdraft ; ifview ; űrlapnév ; töréstípus ; ifreset ; kezdődátum ; végdátum ) A kiválasztott vagy nyitott dokumentumot, illetve nézetet nyomtathatjuk ki. A részletes paraméterezés a Súgóban található. !" @Command([FileCloseWindow]) Bezárja az aktuális ablakot. Ha egy szerkesztő módban lévő dokumentumablakról van szó, akkor előbb visszakérdez, hogy el kívánjuk-e menteni a dokumentumot. Vágólapműveletek és kijelölés !" Vágólapműveletek: @Command([EditCopy]) @Command([EditCut]) @Command([EditPaste]) Dokumentumon belül a kijelölt dokumentumrész, vagy nézetben magával a dokumentummal végződnek a vágólapra való másolás, kivágás, illetve beillesztés műveletek. !" !"
@Command([EditSelectAll]) @Command([EditDeSelectAll]) Dokumentumon belül a teljes dokumentum, nézeten belül az összes dokumentum kijelölhető, illetve a kijelölés megszüntethető. @Command([EditClear]) A kijelölt részt (dokumentumrész vagy teljes dokumentum) törli. Kurzorműveletek !" @Command( [EditDown] ; szám ) @Command( [EditUp] ; szám ) @Command( [EditLeft] ; szám ) @Command( [EditRight] ; szám ) A képernyőn található kurzor a megadott számmal (szám megadása nélkül 1gyel) fel/le/balra/jobbra mozdul. Szerkesztő módú dokumentum esetén a kurzor az [EditDown] hatására az eggyel alatta lévő mezőre áll. !" @Command([EditBottom]) @Command([EditTop]) Szerkesztő módú dokumentum esetén a kurzor a legalsó/legfelső szerkeszthető mezőre áll. !" @Command([EditGotoField] ; mezőnév ) 257 5. PROGRAMOZÁSI KÖRNYEZET Szerkesztő módú dokumentum esetén a kurzor a megadott nevű szerkeszthető mezőre áll. !"
@Command([EditNextField]) @Command([EditPrevField]) Szerkesztő módú dokumentum esetén a kurzor a következő/előző szerkeszthető mezőre áll. Nézetekkel kapcsolatos parancsok !" @Command([FileOpenDatabase]; szerver : adatbázis ; nézetnév ; kulcs ; újpéldány ; ideiglenes ) A megadott szerveren található adatbázis megfelelő nézete megnyílik és a kurzor a kulcs által definiált dokumentumon áll. Ehhez szükséges, hogy a nézet az első oszlop szerint rendezett legyen. Ha a kulcs paramétert kihagyjuk, akkor nem választódik ki dokumentum. !" @Command([OpenView] ; nézetnév ; kulcs ; újpéldány ) A [FileOpenDatabase]-hez hasonlóan megnyílik egy nézet az aktuális adatbázisban. !" @Command( [ViewChange] ; nézetvagygyűjtőnév ) Az aktuális nézet a megadott nevű nézet vagy gyűjtő lesz. !" !" @Command([NavigateNext]) @Command([NavigateNextHighlight]) @Command([NavigateNextMain]) @Command([NavigateNextSelected])
@Command([NavigateNextUnread]) @Command([NavigatePrev]) Az aktuális nézeten belül az aktuális dokumentum a következő/előző megadott tulajdonságú dokumentum lesz. A tulajdonságok a következők lehetnek: [NavigateNext]: közvetlen következő, [NavigateNextHighlight]: szabad szöveges keresésben kiválasztott következő, [NavigateNextMain]: következő szülődokumentum, [NavigateNextSelected]: következő kiválasztott, [NavigateNextUnread]: következő olvasatlan. @Command( [Folder] ; gyűjtőnév ; mozgatvagymásol ) Az aktuális dokumentum a megadott gyűjtőbe kerül; ha az utolsó paraméter 1, akkor mozgatással, 0 esetén másolással. !" @Command( [RemoveFromFolder]) Az aktuális gyűjtőben lévő aktuális dokumentum kikerül a gyűjtőből. 258 5. PROGRAMOZÁSI KÖRNYEZET Súgóval kapcsolatos parancsok !" @Command( [HelpAboutDatabase]) Az adatbázis névjegyét jeleníthetjük meg. !" @Command( [HelpUsingDatabase]) Az adatbázis
használata dokumentumot jeleníthetjük meg. !" @Command( [HelpAboutNotes]) A Notes verziószámot tartalmazó bejelentkező képét jeleníthetjük meg !" @Command([OpenHelpDocument]; [ClientHelp] ; nézetnév; kulcs) @Command([OpenHelpDocument]; [DesignerHelp] ; nézetnév; kulcs) @Command([OpenHelpDocument]; [AdminHelp] ; nézetnév; kulcs) @Command([OpenHelpDocument]; szerver : adatbázis; nézetnév; kulcs) Az első három esetben a kliens, a tervező és az adminisztrátori kliens Súgójának (helphelp client.nsf, stb) megfelelő nézetéből a kulcs alapján megadott dokumentum kerülmegnyitásra. Sokkal érdekesebb a negyedikként jelzett paraméterezés. Egy Notes alkalmazáshoz a fejlesztő, vagyis mi saját súgófájlt készíthetünk. Ennek használatához az űrlap OnHelpRequest eseményében kell definiálni a fenti függvényt a megfelelő paraméterezéssel. Ekkor a felhasználó az F1 megnyomására az általunk írt és definiált adatbázis
megfelelő nézetének adott kulcsú dokumentumát láthatja. Egyéb érdekes parancsok !" @Command( [Execute] ; alkalmazás ; fájlnevek ) A teljes elérési úttal megadott alkalmazás elindul, mintha az operációs rendszerből indítanánk. Ha az alkalmazás (pl szövegszerkesztő) egyéb fájlokat is meg kell, hogy nyisson, azokat adhatjuk meg második paraméterként. !" @Command([ViewRefreshFields]) A szerkesztő módban lévő dokumentum mezőit frissíti (számított mezők), vagy ha nézetben vagyunk, akkor a nézet frissül. A parancs olyan, mintha az F9 billentyűt használnánk. !" @Command([ToolsRefreshAllDocs]) Az adott nézet összes dokumentumában lévő mezők felfrissülnek, mintha saját ma- 259 5. PROGRAMOZÁSI KÖRNYEZET gunk megnyitnánk az összes dokumentumot, majd elmentenénk azokat (kivétel az űrlap eseményei, amelyek nem futnak le). !" @Command([ToolsRefreshSelectedDocs]) Csak a kiválasztott dokumentumok frissülnek.
!" @Command([FileExit]) Ez a parancs a Notesot zárja be. 5.3 LotusScript 5.31 Áttekintés A LotusScript egy belső programozási nyelv, amely BASIC alapokra épül, de azt jelentősen továbbfejleszti. Lehetővé tesz objektum-alapú programozást jó néhány Lotus termékben és az egyes termékek között is. A LotusScript és a fejlesztési környezete egy közös programozási környezetet nyújt az egyes Lotus programokhoz minden platformon. Jelenleg a következő termékekben szerepel a LotusScript: a Lotus Notes 4.0-s verziójától, Approach 96-os verziójától, Freelance Graphics 96-os verziójától, Word Pro 96-os verziójától, Lotus 1-2-3 a 97-es verziótól, LSCube. A LotusScript az egyes termékekhez az előre definiált osztályokon keresztül kapcsolódik, de természetesen mi is hozhatunk létre osztályokat, ill. hozzáférhetünk az LSX Toolkit segítségével létrehozott külső osztályokhoz is. Ezeken kívül külső C függvényeket is
meghívhatunk, akár egy Windows DLL-ből is. A LotusScript legfontosabb előnyei: !" Egy BASIC nyelv továbbfejlesztése, így könnyű megtanulni, használni, főleg azoknak, akik már ismerik a Visual Basic programozási nyelvet. !" Platform-független: bármely platformon megírt LotusScript változtatás nélkül fut a többi platformon is, lehet az akár Windows, Macintosh, OS/2, UNIX, OS/390, vagy AS400. !" Objektum-alapú: minden Lotus termék előre definiált osztályokat tartalmaz, és írhatunk olyan programokat, amelyek az osztályok segítségével létrehozott objektumokkal dolgoznak. Ezek a programok esemény-vezéreltek, mint egy akció gomb megnyomása, egy objektumra való rákattintás, vagy egy dokumentum, nézet megnyitása. !" Több Lotus termékben is megtalálható: egy nyelven lehet mindegyik termékhez programot írni 260 5. PROGRAMOZÁSI KÖRNYEZET !" Az integrált fejlesztési környezet (IDE) lehetővé teszi, hogy egy helyen
hozzunk létre, szerkesszünk, nyomkövessünk egy scriptet, ill. kérdezzük le a változók értékeit, és az egyes objektumok tulajdonságait. !" LotusScript könyvtárak: létrehozhatunk függvény és objektum könyvtárakat, amelyeket a USE parancs segítségével másik alkalmazásban, vagy másik Lotus termékben is felhasználhatunk. !" Létrehozhatunk saját osztályokat és objektumokat is, amelyeket a későbbiekben felhasználhatunk. Ez a LotusScript extensions (LSX), amelynek segítségével az objektum-alapú programozásunkat jelentősen gyorsíthatjuk. A scriptek LotusScript nyelvű utasítások sorából állnak, míg egy alkalmazás több scriptből áll, amelyeket lefordítottak, és amelyeket a felhasználó futtathat. Minden Lotus termék tartalmaz objektumokat, amelyek segítségével lehet egy alkalmazást lehet létrehozni. Az objektumokhoz események vannak rendelve, egy-egy esemény pedig az alkalmazáson történt egy-egy műveletnek felel meg.
Scripteket azért írunk, hogy meghatározzuk a választ ezekre az eseményekre. Példa Egy gomb lenyomása lehet egy esemény, amelyre valamilyen választ kell adni. Ezt a választ többféleképpen is meg lehet adni: használhatjuk a @ függvényeket, a LotusScript függvényeit és osztályait, JavaScriptet, vagy egy egyszerű műveletet is meg lehet adni. 5.32 Programozási környezet Script szerkesztő A script szerkesztő segítségével írhatunk, módosíthatunk, nézhetünk meg egy scriptet. Ebben a szerkesztőben megtalálhatók a szöveg megszerkesztéséhez szükséges alapvető eszközök: lehet szöveget másolni, kivágni, beilleszteni. Lehetőséget ad több script megtekintésére is. Az utasításokat a megfelelő objektum megfelelő eseményéhez kell beírni. A LotusScript ezután az objektum eseményéhez kapcsolja az utasításokat. A script lefordítása két lépésben történik: !" Egy-egy sor begépelése után egy részellenőrzést hajt végre a
Notes, ahol azonosítja a kulcsszavakat, konstansokat, stb. 261 5. PROGRAMOZÁSI KÖRNYEZET !" A script elmentésekor fordítódik le ténylegesen a LotusScript program, majd lefordítva hozzácsatolódik az objektum eseményéhez. A script szerkesztő több dologgal is segíti a szerkesztést: !" Az utasítássor felismert részét színekkel kiemeli. Az alap beállítás szerint a kulcsszavakat kékkel jelöli, a konstansokat lilával, a megjegyzéseket zölddel. Egy sor leírása után azonnal a megfelelő színűre változik a sorok szavainak színe, a színbeállítás viszont megváltoztatható. !" Az egyes sorok behúzását automatikusan elvégzi, amint az kiderül: ha egy feltétel kezdő és vég utasítását leírjuk (If, End If), akkor a közöttük lévő részben szereplő sorokat automatikusan beljebb kezdi. !" Segít az összetartozó utasítások létrehozásában: ha leírjuk az „If feltétel Then” sort, és a Then szó után Entert
nyomunk, akkor a Notes magától a kurzort követő sorba írja az „End If” sort, mivel a szintaktikából ez következik. !" Ha hiba történik a fordításkor, azt hibajelzéssel jelzi a Notes, majd a sor is színt vált: az alapbeállítás esetében piros lesz az egész sor. A hiba leírását alul, a Hibák (Errors) nevű különálló sorban találhatjuk meg. Megjegyzés A Notes a fordításkor (vagyis elmentéskor) csak az első hibajelzésig fordít, ha hibát talál, akkor azonnal megáll. Scriptek nyomkövetése Ha egy script nem azt teszi, amit mi szeretnénk, vagy hibával leáll, akkor szükségünk lehet a nyomkövető (debugger) segítségére. Ehhez a nyomkövető a következő segítségeket tudja nyújtani: !" Addig futtatja az alkalmazást, amíg az el nem ér egy töréspontot (breakpoint), vagy egy stop utasítást. !" Végrehajthatja egyenként az egyes sorokat. !" Megmutatja a változók és az objektumok tulajdonságainak értékét. A
nyomkövető bekapcsolásához: !" Válasszuk a Fájl/Eszközök menü/LotusScript nyomonkövetése (File/Tools /Debug LotusScript) pontját. !" Hajtsuk végre azt a műveletet, amely elindítja a kérdéses scriptet (pl. nyomjuk meg a megfelelő gombot, stb.) 262 5. PROGRAMOZÁSI KÖRNYEZET A nyomkövető kikapcsolásához újra ki kell választani a Fájl/Eszközök menü LotusScript nyomonkövetése pontját. A nyomkövető elindulása után két ablakot láthatunk: 5.4 ábra A nyomkövető (debugger) A felső ablakban a scriptünk található, itt a futására vonatkozó utasításokat lehet kiadni, míg az alsóban különböző nyomkövetési információkat olvashatjuk, amelyek az alábbiak: !" Az első lapon (Töréspontok - Breakpoints) a töréspontok vannak felsorolva: ha valamelyikre rákattintunk, akkor a script megfelelő sorára ugrik a nyomkövető. !" A második lapon (Változók - Variables) a változók és az objektumok tulajdonságainak
listája található: ha valamelyikre rákattintunk, akkor az alsó sorban (Új érték - New Value) új értéket adhatunk neki. Ha egy kis kék háromszög van egy sor előtt, akkor az egy objektumot jelent, amelyeknek általában elég sok tulajdonságuk van. A kis kék háromszögre kattintva kinyitható a tulajdonságok listája. 263 5. PROGRAMOZÁSI KÖRNYEZET !" A harmadik lapon (Kimenet - Output) a script kimenetét figyelhetjük meg (pl. Print utasítás), ill. a Másolás (Copy) gomb segítségével a vágólapra is másolhatjuk. A Mind törlése (Clear All) gombbal törölhetjük a kimentett megjelenítő ablakot. A felső ablakban a következőket tehetjük: !" Az Objektum (Object) és az Esemény (Event) ablakban kiválaszthatjuk, hogy melyik Objektum melyik eseményét szeretnénk nyomkövetni. !" Folytatás (Continue gomb - F5 gomb is): ha ezt megnyomjuk, a script futása folytatódik, mintha a nyomkövető ott sem lenne, viszont ha a futás közben
hibát talál, akkor megáll a hibás soron. !" Belépés (Step Into - F8): végrehajtja a következő sort (amely előtt a kis sárga nyilacska áll), majd a futás újra megszakad: lehet nézegetni, változtatni a változók értékeit. !" Átlépés (Step Over - Shift-F8): hasonló, mint az előbbi, azzal a különbséggel, hogy ha ciklikus utasításhoz ér, akkor a ciklus összes utasítását végrehajtja mindaddig, amíg a ciklus véget nem ér, csak ezután szakítja meg a scriptet. !" Kilépés (Step Exit - Ctrl-F8): addig folytatja a végrehajtást, amíg az adott script be nem fejeződik. Ezután visszatér a scriptet hívó programba, és megáll a script hívása utáni soron. Ha nem hívta senki a scriptet, akkor addig folytatja, amíg nem talál egy újabb töréspontot, vagy amíg be nem fejeződik az alkalmazás. !" Állj (Stop): a script futását véglegesen megszakítja és kilép a nyomkövetésből. Töréspont elhelyezése, eltávolítása:
!" Válasszuk ki azt a sort, ahol a futást meg szeretnénk szakítani, majd nyomjuk meg az F9 gombot, vagy válasszuk a Nyomkövetés (Debug) menü Töréspont beállítása/törlése (Set/Clear Breakpoint) pontját, vagy kattintsunk duplán a sorra. Ha el szeretnénk távolítani a töréspontot, akkor a megfelelő töréspont kiválasztása után ugyanígy kell eljárni. 5.33 Script szintaxis Utasítások szintaxisa Egy script utasítások sorából áll, egy utasítás pedig egy vagy több szövegsorból. Az egyes utasítások között lehetnek üres sorok, a szöveg behúzása és az utasítások elemei között szóközök és tabulátorok nem befolyásolják a script értelmét. 264 5. PROGRAMOZÁSI KÖRNYEZET Egy utasítás alapvetően egy sorból áll, de meg lehet törni több sorba is, az (aláhúzás) jellel. Az jelnek kell lennie a sor utolsó elemének, utána csak megjegyzést lehet írni és az jelet meg kell előznie legalább egy szóköznek. Egyéb
esetekben az utasítás végét a soremelés karakter jelenti. Ha egy sorba több utasítást szeretnénk tenni, akkor a : (kettőspont) jelet kell használni. Példa Print ”Ez egy sor” Print ”Ez egy is” & ’Itt lehet megjegyzés ”egy sor” Print ”Első utasítás” : Print ”Második utasítás” Sztringek felépítése A LotusScriptben sztring az, amely idézőjelek (””), függőleges vonalak (||), vagy kapcsos zárójelek között szerepel, pl.: ”Ez egy sztring” {Ez is sztring} |Ez egy harmadik sztring| A fenti három jelölés egyenértékű. Egyedül a függőleges vonalakkal határolt sztringnek van egy kis különlegessége: ekkor a sztring több soron keresztül is tarthat (azaz tartalmazhat soremelés karaktert is): MessageBox |Ezt a szöveget a Notes két sorba fogja kiírni| Ha a fenti karakterek közül valamelyiket szeretnénk szerepeltetni a szövegben, akkor duplán kell írni, vagy a sztring határoló karakterének a másik kettő közül
kell valamelyiket használni: Print {Ez egy idézőjel ” karaktert tartalmazó szöveg} Print “Ez a szöveg is tartalmaz egy idézőjel ”” karaktert” Az üres sztringet a ”” karakterek jelzik. A sztringek nem ágyazhatók egymásba. Adattípusok A LotusScript a következő beépített típusokkal rendelkezik: !" Integer: előjeles rövid egész számok !" Long: előjeles nagy számok 265 5. PROGRAMOZÁSI KÖRNYEZET !" !" !" !" Single: egyszeres pontosságú lebegőpontos számok Double: kétszeres pontosságú lebegőpontos számok Currency: fixpontos, előjeles, 4 decimális helyiértéket tartalmazó számok String: karakterek lánca Ezeken kívül még a következő adattípusok és adatstruktúrák léteznek: !" Tömb (Array): azonos típusú adatok halmaza, a tömbnek maximum 8 dimenziója lehet. !" Lista (List): egydimenziójú halmaz azonos típusú adatokból, amelyben az egyes elemekre a neveikkel hivatkozunk, nem az
indexükkel. !" Variant: speciális adattípus, amely bármilyen, az előbbiekben felsorolt típusú adatot tartalmazhat, így tartalmazhat Integer, Long, tömb, lista, stb. típust, sőt Boolean és Dátum/idő típusú adatot is. !" Felhasználó által definiált adattípus, ill. osztály: a felhasználó által meghatározott típusú elemeket tartalmazhatja, hasonlóan a C vagy Pascal nyelvben megszokotthoz. Konstansok A LotusScript beépített konstansokat is tartalmaz. A fontosabbak: !" NOTHING: egy objektumhivatkozást tartalmazó változó alapértéke. Ha egy ilyen változónak ezt az értéket adjuk, akkor nem fog a továbbiakban semmire sem mutatni. !" TRUE és FALSE: a logikai Igaz (-1) és Hamis (0) érték !" EMPTY: ez a Variant típusú változó alapértéke, és csak ilyen típusnak lehet értékül adni. Ekkor a változó az üres sztringet, vagy a 0 számot tartalmazza Ezeken kívül a Notes LotusScriptje még sokféle előre definiált
konstanst tartalmaz, amelyek az LSCONST.LSS fájlban vannak, és amelyeket a %Include ”LSCONST.LSS” utasítással tehetjük számunkra is elérhetővé. Ilyen konstansok pl a MessageBox parancshoz tartoznak, amelyek megmondják, hogy milyen típusú ablakot jelenítsen meg a Notes. (Lásd Notes Designer Súgó) Konstansokat mi is deklarálhatunk a Const konstNév = kif 266 5. PROGRAMOZÁSI KÖRNYEZET utasítással. A konstNév a konstans neve, a kif pedig a konstans értéke Ez lehet egy konkrét érték, egy másik konstans, vagy lehet használni a LotusScript függvényeket is, de csak akkor, ha a konstans értéke kiszámítható előre, fordításidőben. Ha a konstansunknak meg szeretnénk határozni a típusát, akkor a konstNév után kell írni az adattípus jelét: %, ha Integer típusúnak szeretnénk, &, ha Long, !, ha Single, #, ha Double, @, ha Currency, és $, ha String típusúnak szeretnénk a konstanst. Pl.: Const sztring$ = “Ez egy sztring konstans”
Változó deklarálása Modul szinten a következő szintaktika szerint lehet deklarálni a változókat: {Dim} váltNév [As adattípus] A váltNév a változó neve, az adattípus pedig a változó típusát fogja meghatározni. Az adattípus azért nem kötelező, mivel itt is alkalmazható a konstansoknál már említett változónév után írt adattípus jel. Dim sztring As String Dim sztring2$ Megjegyzés A LotusScriptben a változók deklarálása alapesetben nem kötelező. Ha nem deklarálunk egy változót, akkor az automatikusan Variant (vagy a megadott) típusú lesz (lásd lejjebb). Mégis, a script olvashatóságáért és nyomonkövethetőségéért érdemes minden változót deklarálni (mellesleg ezzel sok, nem várt hibát is ki tudunk küszöbölni). Ha szeretnénk, hogy a Notes megkövetelje tőlünk, hogy minden változót deklaráljunk előre, akkor az Option Declare utasítást kell kiadnunk. Változók implicit deklarálása Ha egy változót nem deklarálunk
előre a fenti módon, és mégis létre szeretnénk hozni, akkor implicite is deklarálhatjuk: Sztring$ = ”Ez egy sztring” 267 5. PROGRAMOZÁSI KÖRNYEZET Ekkor, ha még a Sztring nevű változó nem volt definiálva, akkor létrejön String típusként, mivel a változó végén használtuk az adattípus jelét. Ez a fenti sor egyenértékű az alábbi két sorral, amikor is ugyanezt a változót explicite deklaráljuk: Dim Sztring As String Sztring = ”Ez egy sztring” Amennyiben a változót úgy deklaráljuk implicite, hogy nem írjuk a végére az adattípus jelét, akkor a változó automatikusan Variant típusú lesz: Változó1=0.2 Tömbök deklarálása A tömbök deklarálása, a változókéhoz hasonlóan a Dim kulcsszóval történik. A tömb dimenzióját a tömb neve mellé, zárójelbe kell írni: Dim tömb1 (4) As Integer Ekkor egy ötelemű, egydimenziós tömböt deklaráltunk: az egyes értékei a tömb(0), tömb(1), tömb(2), tömb(3), tömb(4)
segítségével érhetők el. Meghatározhatjuk, hogy a tömb határai mettől meddig tartsanak, erre a To utasítást használhatjuk: a fenti példában 0-tól 4-ig tartott, de az alábbi példában 1-től 5-ig fog terjedni. Dim tömb2 (1 To 5) As Integer Ha többdimenziójú tömböt szeretnénk létrehozni, akkor a dimenziókat vesszővel kell elválasztani egymástól: Dim tömb3 (4, 3) As String Ekkor egy kétdimenziós tömböt hoztunk létre, ahol az első dimenzió 0-tól 4ig, a második pedig 0-tól 3-ig terjed (tulajdonképpen ez egy 5 x 4-es mátrixnak fogható fel). Itt is meg lehet határozni pontosan, hogy az egyes határok mettől meddig terjedjenek: Dim tömb4 (1998 To 2000, 1 To 12) As Integer Természetesen több dimenziójú is lehet (maximum 8) a tömb: Dim tömb5 (6,7,8,10) As Long 268 5. PROGRAMOZÁSI KÖRNYEZET Ha azt szeretnénk, hogy a tömbök indexe mindig 1-egy kezdődjön, akkor is, ha a To kulcsszóval nem határozzuk meg, hogy az index mettől
meddig terjedjen, akkor használhatjuk az Option Base n utasítást, ahol n 0 vagy 1 lehet. Az Option Base 0 utasítás leírása után a modul minden tömbjének minden indexe 0-val fog kezdődni (ez az alapértelmezés), az Option Base 1 leírása után pedig mindig 1-gyel. Dinamikus tömbök Ha nem tudjuk előre, hogy mekkora tömbre lesz szükségünk, vagy futás közben változtatni szeretnénk a tömb méretét, akkor használhatunk dinamikus tömböt is. Ehhez először deklarálni kell a tömböt úgy, hogy csak két zárójellel jelöljük a tömböt: Dim tömb1 () As String Mivel a tömbről semmilyen méretbeli információt nem adtunk, ezért ez a sor még csak deklarálja a tömböt, lefoglalja a nevét (tömb1), de még nincs dimenziója, sem elemei. Csak akkor lesz használható a tömb, ha a többi információt is megadjuk. Erre a ReDim utasítás szolgál, és ez fog valójában helyet foglalni a memóriában a tömb részére. ReDim [ Preserve ] tömbNév ( határok
) [ As adatTípus ] Itt a tömbNévnek már előzőkben definiálva kell lennie, a határok adják meg az új méretét a tömbnek. Az adatTípust is meg lehet adni, viszont ennek ugyanannak kell lennie, mint amivel deklaráltuk a dinamikus tömböt. Az előző példánál maradva: ReDim tömb1 (1 To 5) utasítás után már van egy használható tömbünk, amely 5 sztring típusú elemet tartalmazhat. Ha már van egy dinamikus tömbünk, és meg akarjuk változtatni a határait, esetleg a dimenzióit is, akkor újra ki kell adni a ReDim utasítást, új paraméterekkel. ReDim tömb1 (1 To 8) Ekkor a tömbünk az öt elem helyett már 8 elemet is tartalmazhat. Ha már elemeket is tettünk a tömbbe, és meg akarjuk tartani őket, akkor kell a ReDim szintaktikában található Preserve paramétert használnunk: ha ezen paramétert is megadjuk, akkor a tömb újradefiniálásakor a régi elemek megőrződnek. 269 5. PROGRAMOZÁSI KÖRNYEZET ReDim Preserve tömb1 (1 To 10) Listák A
listák egydimenziójú halmazok, amelyeknek az elemei azonos típusú adatok, és amelyekben az egyes elemekre a neveikkel hivatkozunk, nem az indexükkel. A listák azért is hasznosak, mivel dinamikusak: ha elemet teszünk bele, akkor automatikusan nő, ha kiveszünk belőle egy elemet, akkor pedig automatikusan csökken a mérete. A listák deklarálása a tömbökhöz és a változókhoz hasonlóan történik, de itt használnunk kell a List kulcsszót. Dim lista1 List As String A lista minden elemének nevet kell adni, majd ekkor kell értéket rendelni az elemhez. lista1 (”elem1”) = ”Ez az első eleme a listának.” A fenti példában az elem neve az általunk adott ”elem1”, az értéke pedig ”Ez az első eleme a listának.” Ha hivatkozni akarunk az elemre, például meg akarjuk jeleníteni az értékét, akkor az elem nevét kell megadni: Print lista1 (”elem1”) Ennek az utasításnak a kimenete az ”Ez az első eleme a listának.” szöveg lesz Elágazások
Ezek az utasítások a program futása során csak egyik blokkjuk utasításait hajtják végre. If feltétel Then utasítások Else utasítások Az utasítás a klasszikus If / Then / Else struktúrát követi: ha az If után álló feltétel igaz, a Then kulcsszó utáni utasítások, amennyiben hamis, akkor az Else után álló utasítások hajtódnak végre. Ez az utasítás egy sor, azaz ha több utasítást is el szeretnénk helyezni valamelyik blokkban, akkor a „:” vagy az „ ” jel segítségével kell tördelni a sorokat. Ebben az esetben sokkal jobban átlátható utasítás a következő: If feltétel Then Utasítások [ElseIf feltétel Utasítások] 270 5. PROGRAMOZÁSI KÖRNYEZET [Else Utasítások] End if Ebben az esetben, ha az If után álló feltétel igaz, akkor a Then kulcsszó utáni utasítások, ellenkező esetben, ha valamelyik ElseIf utasítás igaz, akkor a megfelelő ElseIf utáni utasítások, ha pedig egyik feltétel sem igaz, akkor az Else
utasítás utáni utasítás hajtódik végre. A blokkoknak abban a sorrendben és szintaktikával kell követniük egymást, mint ahogyan fejjebb látszik, viszont itt az utasítások csoportjai bármennyi sort elfoglalhatnak. A harmadik elágazási csoport a Select Case csoport, erre a csoportra nem térünk ki részletesen, szintaktikája és feladata hasonló az egyéb nyelvekben megismertekével (bővebben a Notes Designer Súgójában olvashatunk róla). Ciklusképző utasítások Ezek az utasítások a törzsükben lévő utasításokat többször (ciklikusan) hajtják végre. Do [While | Until feltétel] [Utasítások] Loop vagy Do [Utasítások] Loop [While | Until feltétel] Ha a feltétel előtt a While kulcsszó található, akkor az Utasításokat addig hajtja végre program, amíg a feltétel igaz: amint hamissá válik, befejeződik a ciklus. Az Until kulcsszó esetén pont fordított az eredmény: ha az Until kulcsszót írjuk a feltétel elé, akkor a ciklus addig
tart, amíg a feltétel igazzá nem válik (vagyis amíg hamis a feltétel). A két szintaktika között pedig a különbség könnyen kitalálható: az első alapján a ciklus ún. „elől tesztelő” lesz, vagyis, ha a ciklusba nem kell belépni, akkor egyetlen egyszer sem hajtódnak végre az Utasítások, a második esetben pedig a ciklus „hátul tesztelő”, vagyis legalább egyszer biztosan végre lesznek hajtva az Utasítások. 271 5. PROGRAMOZÁSI KÖRNYEZET For ciklusváltozó = első To utolsó [Step lépésköz] [Utasítások] Next [ciklusváltozó] Ez az utasítás megegyezik az egyéb nyelvekben megismertekkel: az Utasításokat megadott számszor megismétli, miközben a ciklusváltozó az első értéktől az utolsóig felveszi értékét, a megadott lépésközzel, vagy ennek hiányában egyesével. A Next utasítássorában a ciklusváltozó kiírása nem kötelező, ekkor több egymásba ágyazott ForNext utasítás esetén a Notes automatikusan helyesen
(egymásba ágyazottan) növeli a megfelelő ciklusváltozók értékét. A következő utasítás egy tömb vagy lista minden elemén végrehajtja az adott utasításokat: ForAll ciklusváltozó In tartalmazó Utasítások End ForAll Itt az Utasítások végrehajtásakor a ciklusváltozóval hivatkozhatunk a tartalmazó tömb vagy lista egy-egy konkrét elemére. Eljárások Eljárások definiálása: Sub eljárásnév [(paraméterek)] Utasítások End Sub Az eljárásnév lesz az eljárás neve, amely az Utasításokat fogja meghívni. Ha leírjuk a script szerkesztőben egy új sorba, hogy Sub ., majd Entert nyomunk, akkor a Notes automatikusan létrehozza az új eljárást a megfelelő objektumnál: ha az új eljárást az űrlap valamelyik metódusánál írjuk a script szerkesztőbe, akkor az új eljárás is az űrlaphoz fog tartozni. Amennyiben egy mezőnél hozzuk létre az új eljárást, akkor az a mező metódusai/tulajdonságai között fog szerepelni. Ez azért fontos,
mivel a metódus nyilvánosságánál (private / public) nem mindegy, hogy az új eljárás melyik objektum része lesz. A nyilvánossággal és a láthatósággal e könyv kereteiben nem tudunk foglalkozni, ezekről a Notes Designer Súgója ad bővebb információkat. 272 5. PROGRAMOZÁSI KÖRNYEZET Az eljárás paramétereinek szintaktikája a következő: [ByVal] paramNév [() | List] [As adattípus] Itt a paraméter nevét a paramNév helyére kell írni; a „()”azt jelzi, hogy természetesen lehet tömb is ill. lista („List”) is a paraméter A paraméter neve elé írt ByVal szó esetén a paramétert érték szerint adja át a Notes az eljárásnak, nem pedig az alapértelmezett név szerint. Az eljárást a Call eljárásnév [(paraméterek)], vagy az eljárásnév [paraméterek] szintaktikával lehet meghívni. A két szintaktika között csak formai különbség van: a Call utasítás használata esetén kötelező a paramétereket határoló zárójelek
használata, a második esetben pedig nem. Függvények Függvények definiálása: Function függvényNév [(paraméterek)] [As adattípus] Utasítások End Function Ugyanazok vonatkoznak a függvények definiálására is, mint amelyeket a fentiekben az eljárásoknál már megtárgyaltunk. Az egyetlen különbség, hogy mivel a függvénynek visszatérési értéke is van, itt az adattípussal annak típusát is meg kell adni. A függvény paraméterlistájának szintaktikája és használata is megegyezik az eljáráséval: [ByVal] paramNév [() | List] [As adattípus] A függvény visszatérési értékének megadása: Függvénynév = változó Itt a változó típusának természetesen meg kell egyeznie a függvény definíciójakor megadottal. 273 5. PROGRAMOZÁSI KÖRNYEZET A LotusScript rengeteg előre beépített függvényt tartalmaz, ezek többsége más nyelvekből ismert lehet: pl. Str$(), amely sztringgé alakítja a paraméterként kapott számot, a MessageBox,
amely egy üzenetablakot jelenít meg a felhasználó számára, vagy pl. a Sin() függvény, amely a paraméterként kapott szám szinuszát adja vissza, stb. Ezekről részletesen a Notes Designer Súgójában lehet olvasni. Megjegyzések elhelyezése a scriptben Ha megjegyzést szeretnénk írni a scriptünkbe, akkor használjuk a Rem kulcsszót, amelyt a sor elejére kell írni. A második lehetőség, ha egy aposztrófot „’” teszünk a sorban bárhová. Az aposztróf után írt szöveg megjegyzésnek számít a sor végéig. Ha egy nagyobb kódrészt szeretnénk megjegyzéssé tenni, akkor használhatjuk a %REM és %ENDREM fordítási direktívákat. Ezeket a direktívákat egy önálló sorba kell beírni, viszont a két direktíva közötti rész minden sora megjegyzésnek fog számítani. 5.34 A LotusScript front-end és back-end osztályai A Lotus Notes LotusScriptje előre definiált osztályokat tartalmaz a Notes objektumainak eléréséhez. Majdnem minden osztályhoz
tartoznak tulajdonságok (Property), amelyek az osztály segítségével létrehozott objektum tulajdonságait tartalmazzák. Ezek lehetnek csak olvashatók és írható-olvashatók. Az osztályokhoz tartoznak metódusok (Method), amelyek segítségével valamit tehetünk az objektummal, és események (Event), amelyek az objektumon bekövetkezhetnek. Az objektum az osztályból a script futása során létrejött konkrét példány. A programozás során az objektumokon bekövetkező eseményekre határozzuk meg a választ. Ezen osztályok két fő részre oszthatók: !" A back-end (adatbázis szintű) osztályok a Notes adatbázisaihoz, nézeteihez, dokumentumaihoz, ill. egyéb elemeihez való hozzáférést segítik !" A front-end (UI - User Interface, felhasználói felület) osztályok a felhasználó által éppen használt objektumokhoz való hozzáférést teszik lehetővé. Ilyen lehet, pl. az éppen nyitott dokumentum, nézet, adatbázis, stb Fontos megjegyezni,
hogy a fenti tulajdonságok miatt a szerver által futtatott scriptek (pl. a szerveren futó ügynökök) csak back-end osztályokat, míg a felhasználó munkaállomása mindkettőt használhatja. 274 5. PROGRAMOZÁSI KÖRNYEZET A Notes osztályok bemutatásakor nem törekszünk a teljességre: csak a fontosabb osztályokat ismertetjük és ezeknek is csak egy-egy általunk fontosnak ítélt metódusát, tulajdonságát, ill. eseményét emeljük ki A teljes megismeréshez nélkülözhetetlen lesz a Notes Designer Súgójának használata. Front-end osztályok Az UI osztályok viszonylag kevesen vannak: NotesUIWorkspace osztály A NotesUIWorkspace osztály lehetővé teszi a jelenlegi munkaterület elérését: lehetőségünk van egy új dokumentum létrehozására (ComposeDocument metódus), vagy megjeleníthetjük a „Mozgatás gyűjtőbe” ablakot (Folder metódus), amely segítségével az aktuális vagy kijelölt dokumentumokat a felhasználó a megfelelő gyűjtőbe
teheti. Az objektum tulajdonságai között pedig megtalálhatjuk az éppen nyitott (és aktív) dokumentumot (CurrentDocument tulajdonság), vagy nézetet (CurrentView). NotesUIDatabase osztály A jelenleg használt, nyitott adatbázishoz való hozzáférést teszi lehetővé. Az osztály segítségével visszakaphatjuk az adatbázis összes dokumentumát (Documents tulajdonság), megnyithatunk egy nézetet (OpenView metódus), vagy meghatározhatjuk, mi történjen egy dokumentum törlése előtt (QueryDocumentDelete esemény). NotesUIView osztály A NotesUIView osztály segítségével az éppen aktuális nézetet érhetjük el: kinyomtathatjuk (Print metódus), visszakaphatjuk a nézet összes dokumentumát (Documents tulajdonság), vagy a UI nézethez tartozó backend (adatbázis szintű) nézetet (View tulajdonság). Az objektumon értelmezett események segítségével pedig például meghatározhatjuk, hogy ha ebből a nézetből meg akarnak nyitni egy dokumentumot, akkor a
dokumentum megnyitása előtt mi történjen (QueryOpenDocument esemény) NotesUIDocument osztály A NotesUIDocument osztály segítségével az éppen aktuális dokumentumhoz férhetünk hozzá (ahhoz, amelyiket a felhasználó éppen szerkeszti). Valószínűleg ez lesz az egyik leggyakrabban használt osztályunk. Megváltoztathatjuk például a nyitott dokumentum valamelyik mezőjének 275 5. PROGRAMOZÁSI KÖRNYEZET tartalmát (FieldSetText metódus), vagy elküldhetjük a dokumentumot valakinek (Send metódus). Megtudhatjuk, hogy ez a dokumentum egy új (még el nem mentett) dokumentum-e (IsNewDoc tulajdonság), vagy a szerkesztés – nem szerkesztés üzemmódok között válthatunk, ill. megtudhatjuk, éppen melyik módban vagyunk (EditMode tulajdonság). Az osztályban definiált események segítségével meghatározhatjuk, mi történjen a dokumentum elmentése előtt vagy után (QuerySave, ill. PostSave események) Button osztály Egy gombot, akció gombot,
forrópontot reprezentál. Ebben az osztályban összesen csak két esemény van, ezekből a lényeges a Click, amely segítségével meg lehet határozni, hogy mi történjen a gomb (forrópont, stb.) megnyomásakor. Sem tulajdonsága, sem metódusa nincs. Field osztály Egy mezőt reprezentál, és ennek sincsen sem metódusa, sem tulajdonsága. Összesen két esemény van itt definiálva, ezek segítségével lehet meghatározni, mi történjen, ha a felhasználó belép, vagy kilép a mezőből (Entering, Exiting). Hogyan használjuk az UI (front-end) osztályokat? A fenti osztályok használatát legjobb, ha néhány kisebb példán keresztül nézzük meg. Már volt róla szó, de azért még egyszer fel kell hívni a figyelmet arra, hogy a Notes programozás is eseményvezérelt, azaz minden kis program elindulását valamilyen eseményhez kell kötni. A legegyszerűbb, ha egy gomb megnyomásához kötjük. Példa Hozzunk létre egy új űrlapot, vegyünk fel rá két,
szerkeszthető szöveges mezőt („Iras” és „Masolat” néven). Hozzunk létre egy gombot (pl „Másolat” felirattal), és érjük el, hogy a gomb megnyomása után az „Iras” mezőben lévő szöveg másolódjon át a „Masolat” mezőbe. Ehhez a gomb „Click” eseményében ki kell választani, hogy LotusScript programot szeretnék írni, és, pl. a következő kis scriptet kell beírni: 276 5. PROGRAMOZÁSI KÖRNYEZET 5.5 ábra A Másolat gomb „Click” eseménye A script logikai működési elve nagyon primitív: kiolvassuk az „Iras” mező tartalmát egy ideiglenes változóba („sTartalom”), majd beírjuk a „Masolat” mezőbe az „sTartalom” változó értékét. A fenti kis script, bármilyen egyszerű is, nagyon tanulságos, sok mindenre rávilágít. !" Először is, ha a képletnyelv segítségével valósítottuk volna meg a fenti feladatot, akkor mindössze a következő két sorra lett volna szükségünk a gomb „Click”
eseményében: FIELD Masolat := Iras; @All Így rögtön elkönyvelhetjük az első figyelmeztetést: nem biztos, hogy minden feladatot LotusScript segítségével érdemes megoldani, hanem jól meg kell gondolni, hogy melyik feladatnak mivel érdemes nekiállni. !" Másodszor: megfigyelhetjük, hogy mint általában a hasonló nyelveknél, itt is pont ( . ) választja el az objektumot és a tulajdonságát, vagy metódusát Ha még szemléletesebben szeretnénk megmutatni az objektumok egymáshoz való viszonyát, akkor a fenti scriptet a következő két sorral is írhattuk volna: 5.6 ábra Az átalakított script Ebben a formában azért kevésbé követhető a script: az első verzió, bár hosszabb, talán egy kicsit olvashatóbb. 277 5. PROGRAMOZÁSI KÖRNYEZET !" Harmadszor: mint látható, az összes változót explicite deklaráltuk. Ez, ahogyan már volt róla szó, nem kötelező. !" Negyedszer: látható, hogy hogyan kell létrehozni egy új
objektumot: a New kulcsszót kell alkalmazni. A script első sorát megfigyelve láthatunk erre példát: a sor végrehajtása után a „ws” változó egy objektumot fog tartalmazni, mégpedig egy új NotesUIWorkspace objektumot. !" Ötödször: amit megfigyelhetünk, hogy a második sorban látszólag szintén létrehozunk egy objektumot, azonban ez csalóka. Itt csak deklaráltuk, hogy az „uidoc” nevű változó majd egy NotesUIDocument típusú objektumot fog tartalmazni. A második sor végrehajtása után az „uidoc” változó még nem mutat semmilyen objektumra, ha hivatkoznánk rá, akkor az „Object variable not set” hibaüzenetet kapnánk. Ahhoz, hogy valamilyen objektumra mutasson, ahhoz létre kell hozni egy új objektumot (New kulcsszó, lásd fejjebb), vagy hozzá kell rendelni a változóhoz egy, már létező objektumot: ezt a Set kulcsszó segítségével tehetjük meg. A Set parancsot tehát akkor kell használni, ha egy létező objektumhoz akarunk
változót rendelni. A kis scriptünk logikája a következő: a New kulcsszó segítségével létrehoztunk egy új objektumot (NotesUIWorkspace típusút), amely tartalmaz több objektumot: a CurrentDocument tulajdonsága például visszaadja azt az objektumot, amely a jelenlegi nyitott dokumentumot reprezentálja (de, pl. a CurrentDatabase a jelenlegi adatbázist adja vissza). Azt tudjuk, hogy a CurrentDocument tulajdonság egy NotesUIDocument típusú objektumot ad vissza, tehát egy ilyen típusú változót kell definiálni (a script második sora), majd a már létező (a „ws” objektumban meglévő) objektumhoz rendelni (a script negyedik sora). !" Hatodszor: hogyan kell használni a metódusokat. A harmadik sorban létrehoztunk egy új, sztring típusú változót („sTartalom”). Ennek szeretnénk majd értékül adni az „Iras” mező értékét. Mivel már van egy objektumunk, amely a jelenlegi dokumentumra mutat (a negyedik sor után az „uidoc”), ezen
objektum egyik metódusának (FieldGetText) segítségével kiolvashatjuk a mező értékét (ötödik sor). !" Az utolsó megjegyzés pedig, hogy az utolsó sorban láthatjuk, hogy a fenti objektum („uidoc”) egyik metódusával beírjuk a „Masolat” mezőbe az új értéket. Itt azt érdemes megfigyelni, hogy ha egy metódusnak nincs visszatérési értéke, akkor – hasonlóan az eljárásokhoz – a Call kulcsszó segítségével lehet meghívni. Fejlesszük egy kicsit tovább a fenti scriptünket! Érjük el, hogy az „Iras” mezőből kilépve a mező tartalma automatikusan íródjon be a „Masolat” mezőbe. 278 5. PROGRAMOZÁSI KÖRNYEZET Ehhez a gomb „Click” eseményében lévő scriptet (a fenti hat sorost), tegyük át az „Iras” mező „Exiting” eseményébe (a fejezet elején megtanultuk, hogy a Field osztályhoz két esemény tartozik, ezek közül az egyik az „Exiting”). Jelöljük ki a scriptet, másoljuk a vágólapra, majd a
kattintsunk az „Iras” mezőre. Válasszuk ki az Objects (Objektumok) ablakból a mező „Exiting” eseményét, és ide másoljuk be a vágólapról a scriptet. A gombot akár le is törölhetjük az űrlapról. Mentsük el az űrlapot Hozzunk létre egy új dokumentumot az űrlapunk segítségével: kipróbálhatjuk, hogy, ha kilépünk az „Iras” mezőből, akkor a tartalma azonnal átmásolódik a „Masolat” mezőbe. Miért fontos ez a kis továbbfejlesztés? Azért, mert a mezőmásolást a gomb segítségével akár (mint ahogyan láttuk) a képletnyelv segítségével is meg tudtuk volna oldani, azonban ezt a továbbfejlesztést – hogy a másolás a mezőből való kilépés után automatikus legyen – csak a LotusScript segítségével tudjuk megoldani, mivel a mező „Exiting” eseményébe csak LotusScriptet írhatunk, képletet nem. Back-end osztályok A back-end osztályok lehetőséget adnak arra, hogy az adatbázis olyan részeihez is hozzáférjünk,
amelyeket a felhasználó nem nyitott meg. Lehetőséget adnak pl. két (vagy több) adatbázis összekapcsolására, különböző lekérdezésekre, stb. A back-end osztályok legfontosabb kiinduló osztálya a NotesSession. NotesSession osztály Ez az osztály reprezentálja a script jelenlegi környezetét. Megtudhatjuk a felhasználó nevét (UserName tulajdonság), az operációs rendszer nevét, (Platform tulajdonság), a Notes verziószámát (NotesVersion tulajdonság), vagy az adatbázis nevét, amelyikben a script éppen fut (CurrentDatabase tulajdonság). Beállíthatjuk, ill kiolvashatjuk a környezeti változók értékeit (SetEnvironmentVar, GetEnvironmentString metódusok), vagy megnyithatunk (nem a felhasználó felé) egy konkrét adatbázist (GetDatabase metódus). Majdnem mindig innen fogunk kiindulni, ha egy back-end adatbázis valamelyik részét szeretnénk elérni. NotesDatabase osztály A Notes egy adatbázisát érhetjük el a segítségével. Megtudhatjuk az
adatbázis 279 5. PROGRAMOZÁSI KÖRNYEZET fájlnevét (FileName tulajdonság), vagy visszakaphatjuk az összes dokumentumát (AllDocuments tulajdonság). Beállíthatjuk a Hozzáférés listát (ACL tulajdonság), megnyithatjuk (Open metódus), lemásolhatjuk (CreateCopy). Ha valamelyik nézetéhez, vagy egy meghatározott dokumentumához szeretnénk hozzáférni, akkor természetesen ezeket is vissza lehet kapni (GetView, GetDocumentByUNID metódusok). NotesItem osztály A Notes dokumentumtárolásáról fontos tudni, hogy a dokumentumban lévő információkat ún. elemek („item”) hordozzák A felhasználó felé az elemeket a Notes a mezőkön keresztül jeleníti meg. Ha egy mező neve és az elem neve azonos, akkor a mező azt az elemet jeleníti meg. Így pl a „Név” nevű mező a „Név” nevű elem tartalmát jeleníti meg. Az összes többi elemet csak a LotusScript segítségével lehet elérni. Például egy Rich Text mezőben lévő csatolás (attachment) is
egy elemként van tárolva, amely egy szöveg típusú tömb, ahol a tömb 0. eleme tartalmazza a csatolás nevét Ez a típusú tárolás azzal jár, hogy ha egy dokumentum egy-egy mezőjéhez (vagy valamelyik másik eleméhez) hozzá szeretnénk férni, akkor a NotesItem osztályt kell használnunk, amely egy elemet jelenít meg. A NotesItem osztály legfontosabb tulajdonságai közé tartozik, hogy visszakaphatjuk az aktuális elem szövegét (Text tulajdonság), vagy értékét (Values tulajdonság). Az elem szövege mindig sztring típust ad vissza, akkor is, ha az elem számot vagy dátumot tartalmaz. Az elem értéke pedig az érték típusának megfelelő típusú és formátumú értéket ad vissza. NotesDocument osztály A NotesDocument osztály felel meg egy, az adatbázisban már létrehozott (elmentett) dokumentumnak. Segítségével hasonlókat tehetünk meg, mint a NotesUIDocument osztállyal, azzal a nagy különbséggel, hogy a dokumentum nincs megnyitva a
felhasználó előtt. Megtudhatjuk, hogy mikor hozták létre a dokumentumot (Created tulajdonság), vagy, hogy az ehhez a back-end dokumentumhoz tartozó UI (front-end) dokumentum meg van-e nyitva (IsUIDocOpen tulajdonság). Lehetőségünk van a dokumentum egy eleme értékének (ld. NotesItem osztály) a felülírására (ReplaceItemValue metódus), egy elem értékének kiolvasására (GetItemValue metódus), vagy egy Rich Text elem létrehozására (CreateRichTextItem metódus). 280 5. PROGRAMOZÁSI KÖRNYEZET A dokumentumot elküldhetjük valakinek (Send metódus), beletehetjük egy gyűjtőbe (PutInFolder metódus), vagy kivehetjük belőle (RemoveFromFolder metódus). Ha valamit megváltoztattunk a dokumentumban, akkor mentsük el (Save metódus), hiszen a változások csak akkor maradnak meg, ha explicite elmentjük a dokumentumot. NotesDocumentCollection osztály Az osztály segíti, hogy egyszerre több (akár nagyon sok) dokumentummal egyszerre dolgozhassunk, ill.
több osztály tulajdonsága ill metódusának eredménye ilyen típusú objektumként jelenik meg. A NotesDatabase osztály már említett AllDocuments tulajdonsága például egy ilyen objektumot ad vissza: az objektum tartalmazni fogja az adatbázis összes dokumentumát. Ilyen objektum lehet egy keresés eredménye, vagy egy nézet tartalma is. Ha ezeket kezelni szeretnénk valamilyen módon, ahhoz ismerni kell ezen osztályból keletkező objektumok tulajdonságait ill. metódusait (de legalább is a fontosabbakat). Az objektumról megtudhatjuk, hogy hány dokumentumot tartalmaz (Count tulajdonság), vagy, hogy rendezett-e (IsSorted). Hozzáadhatunk vagy eltávolíthatunk belőle egy dokumentumot (AddDocument, DeleteDocuement metódusok), visszakaphatjuk a dokumentum-csoport első, utolsó, következő, stb. dokumentumát (GetFirstDocument, GetLastDocument, GetNextDocument metódusok). Esetleg az összes dokumentumot betehetjük egy gyűjtőbe (PutAllInFolder), vagy
lepecsételhetjük őket (StampAll metódus). Ez utóbbi metódus igen kellemes tulajdonságokkal rendelkezik: egyrészt az összes, a csoportban szereplő dokumentum elemének értékét megváltoztathatjuk egyszerre, másrészt, nem kell a dokumentumokat elmenteni a változtatás után, mint egyébként. Harmadrészt sokkal (nagyságrendekkel) gyorsabb, mintha ugyanezt a műveletet minden dokumentumon külön-külön elvégeznénk. NotesView osztály Ez az osztály segíti a Notes nézetekhez való hozzáférésünket. A nézetek tartalmához többféleképpen is hozzáférhetünk. Először is: használhatjuk a NotesView osztály metódusait, amelyek segítségével megkaphatjuk a nézet első, utolsó, következő, stb. dokumentumát (GetFirstDocument, GetLastDocument, GetNextDocument 281 5. PROGRAMOZÁSI KÖRNYEZET metódusok). Ha valamilyen kulcs szerint szeretnénk dokumentumokat visszakapni, akkor használhatjuk a GetAllDocumentsByKey vagy a GetDocumentsByKey metódusokat
(a keresés mindig az első, rendezett oszlop szerint történik). A NotesView osztály segítségével megkaphatjuk egy dokumentum „gyerekdokumentumát” (GetChild metódus), vagy a „szülődokumentumát” (GetParentDocument metódus), amennyiben az adatbázis tartalmaz „Válasz” és „Válasz a válaszra” típusú dokumentumokat (Ezekről a második fejezet válaszűrlapokról szóló részében tanultunk). Ezeken kívül megtudhatjuk, hogy a nézet kategorizált-e (IsCategorized tulajdonság), vagy hogy az adatbázisban ez a nézet-e az alapértelmezett nézet (IsDefaultView tulajdonság). A második módszer: amikor a nézetnek nem egy dokumentumát, hanem egy sorát akarjuk visszakapni. Erről a NotesViewEntry osztálynál olvashatunk NotesViewEntry osztály Egy nézetnek visszakaphatjuk csak a dokumentumait (ezekről a NotesView osztálynál olvashatunk), és visszakaphatjuk egy sorát is. Mi a különbség? Az, hogy egy nézet lehet kategorizált, tartalmazhat
összegzéseket ill. konfliktus dokumentumokat és természetesen „valódi” dokumentumokat is. Egy ilyen nézetben nem minden sorhoz tartozik konkrét dokumentum, de jó lenne, ha ezeket az „extra” sorokat is tudnánk kezelni, a dokumentumokkal együtt. Ezeken kívül fontos az, hogy az osztály segítségével megtudhatjuk, hogy a dokumentum-hierarchiában hol szerepel egy dokumentum. NotesViewEntry objektumot kaphatunk vissza, ha a NotesView osztály GetEntryByKey metódusát használjuk, amely egy kulcs alapján adja vissza a nézet egy sorát. A visszakapott NotesViewEntry típusú objektumról megtudhatjuk, hogy konkrétan mi is az: egy kategória sor (IsCategory tulajdonság), egy konfliktus dokumentum (IsConflict tulajdonság), egy dokumentum (IsDocument tulajdonság), vagy egy ös??szegzés (IsTotal tulajdonság). Az osztály egyik fontos tulajdonsága a Document tulajdonság, amely amennyiben egy dokumentumot jelenít meg a sor, akkor visszaadja azt NotesDocument
objektumként. 282 5. PROGRAMOZÁSI KÖRNYEZET A másik fontos tulajdonsága a ColumnValues tulajdonság, amely egy tömbbe adja vissza a sor egyes oszlopainak értékeit (azaz e tulajdonság segítségével, ha ki akarjuk olvasni egy vagy több mező tartalmát, és azok szerepelnek a nézetben, akkor nem kell eljutni a NotesDocument objektumhoz). A fenti tulajdonságokon kívül fontosak a dokumentum-hierarchiáról szóló tulajdonságok: a ChildCount elárulja, hogy ehhez a sorhoz hány „gyerekdokumentum” tartozik, a SiblingCount megmondja, hogy hány dokumentum van még azonos hierarchia szinten ezzel a dokumentummal. Az IdentLevel pedig visszaadja, hogy a dokumentum a hierarchiában pontosan hol található. NotesViewEntryCollection osztály Ez az osztály nagyon hasonlít a NotesDocumentCollection osztályhoz, szerepe is hasonló. Az osztály csak azokat a sorokat tartalmazza, amelyek dokumentumokhoz kapcsolódnak (tehát nem tartalmaz összegzéseket vagy kategória
sorokat.) Ilyen típusú objektumot csak a NotesView osztály GetAllEntriesByKey metódusa, és az AllEntries tulajdonsága ad vissza. Ez utóbbi egy fontos tulajdonsága a NotesView osztálynak: ezen keresztül egyszerre elérhető a nézet összes dokumentuma. NotesViewNavigator osztály Az osztály neve elsőre egy kicsit félrevezető: itt nem a navigátorokról van szó, hanem ez egy harmadik megközelítési módja a Notes nézeteknek. Ez az osztály akkor fontos, ha a dokumentum-hierarchiában akarunk kalandozni: lehetővé teszi, hogy egy-egy dokumentumhoz kapcsolódó összes „gyerekdokumentumot” elérhessük, ill. közöttük navigálhassunk Az osztály érdekessége, hogy nem fontos, hogy hierarchia-viszonyban legyenek a dokumentumok: ki lehet választani csak a nézet bizonyos részét, és azon navigálni (tulajdonképpen egy rész-nézetet lehet létrehozni, ill. használni a segítségével). NotesACL osztály A NotesACL osztály segítségével egy Notes adatbázis
Hozzáférési Listájához (ACL) férhetünk hozzá. Itt létrehozhatunk egy bejegyzést (CreateACLEntry metódus), vagy kiolvashatjuk egy bejegyzését (GetEntry metódus). Ezt a típusú objektumot a NotesDatabase osztály ACL tulajdonsága adja vissza. A 283 5. PROGRAMOZÁSI KÖRNYEZET NotesACL osztály majdnem mindig egy NotesACLEntry típusú objektumot ad vissza. NotesACLEntry osztály Ez az osztály az, amely a HL egy bejegyzését reprezentálja. Ennek segítségével lehet megtudni a konkrét bejegyzésről, hogy egy csoportra (IsGroup tulajdonság), vagy egy személyre vonatkozik (IsPerson tulajdonság). Itt lehet visszakapni (és beállítani) a konkrét jogokat is a Level tulajdonság segítségével, ill. a bejegyzés törlését is ez az osztály teszi lehetővé (Remove metódus). NotesAgent osztály A Notes ügynökeihez lehet hozzáférni a segítségével. Az ügynököket a NotesDatabase GetAgent vagy Agents tulajdonságai segítségével lehet visszakapni. A
GetAgent egy konkrét ügynököt ad vissza NotesAgent típusú objektumként, az Agents tulajdonság pedig az összest. A NotesSession objektum CurrentAgent tulajdonságával az éppen futó ügynököt kaphatjuk vissza, szintén NotesAgent típusú objektumként. A NotesAgent osztály tulajdonságai segítségével megtudhatjuk az ügynök nevét (Name), az ügynököt futtató szerver nevét (ServerName), vagy azt, hogy osztott-e az ügynök (IsPublic). A metódusai segítségével futtathatjuk (Run), vagy törölhetjük az ügynököt (Remove). Hogyan használjuk a back-end osztályokat? Az előbbiekben röviden áttekintettük, hogy mik a fontosabb back-end osztályok, és ezeknek mik a fontosabb tulajdonságaik ill. metódusaik Most lássuk, hogy hogyan is kell őket használni. Amelyet a legelején le kell szögezni, az egy nyilvánvaló tény: a back-end osztályokon – a tulajdonságukból adódóan – nincsenek események értelmezve. Azonban már többször volt arról
szó, hogy a Notes programozása eseményvezérelt. Ezekből az következik, hogy mindig egy UI osztály valamelyik eseményéből kell kiindulnunk, akkor is, ha csak a back-end osztályok működését szeretnénk megnézni. 284 5. PROGRAMOZÁSI KÖRNYEZET Nézzünk meg egy nagyon egyszerű példát a back-end osztályokra. Próbáljuk megszámolni, hogy hány dokumentum található az adatbázisunkban (pl. a második fejezetben létrehozott Ügyfélkövetés adatbázisban). Ehhez az adatbázisban hozzunk létre egy új űrlapot (legyen a neve „Statisztika”), és vegyünk fel rá egy gombot (ez a gomb lesz majd az esemény). A feladat tehát, hogy a gomb megnyomása után egy üzenetablakban megmondja a Notes, hány dokumentum található az adatbázisunkban. A gomb „click” eseményében válasszuk a LotusScriptet, és írjuk be a következő kis scriptet: 5.7 ábra Az adatbázis dokumentumait megszámláló script Lássuk, hogyan működik ez a kis program. Ahogyan
már az osztályok rövid ismertetésekor is volt szó róla, a back-end osztályok legmagasabb szintjén a NotesSession osztály áll (hasonlóan, ahogyan az UI osztályoknál a NotesUIWorkspace). Innen kell (általában, de nem mindig) kiindulni. A „session” egy új objektum, amely az első sor végrehajtása után jön létre. Az objektum egyik tulajdonsága tartalmazza annak az adatbázisnak a nevét, amelyikben a script fut (ez a tulajdonság a CurrentDatabase). Ezek után meg kell kapnunk az adatbázis összes dokumentumát tartalmazó objektumot (az adatbázis AllDocuments tulajdonsága ezt adja vissza). Ha ez megvan, akkor már csak meg kell tudni, hogy ez az objektum hány elemet tartalmaz: mivel az adatbázis AllDocuments tulajdonsága egy NotesDocumentCollection típusú objektumot ad vissza, erről viszont tudjuk, hogy meg tudja mondani, hogy hány dokumentumot tartalmaz a gyűjtemény (Count tulajdonság), már vissza is kaptuk a dokumentumok számát. 285 5.
PROGRAMOZÁSI KÖRNYEZET Az üzenetablak megjelenítéséhez a Notes egy beépített függvényét használjuk, a MessageBoxot, amely megjeleníti a paraméterként megadott szöveget. Mivel mi egy számot kaptunk vissza a Count tulajdonsággal, ezt még át kell alakítani, hogy a paraméter típusa megfelelő legyen: ehhez használjuk a Notes egy másik, szintén beépített függvényét, az Str$-t, amelyik a paraméterként kapott számot sztring típusúvá alakítja. Fejlesszük egy kicsit tovább a programunkat az UI osztályok felhasználásával: az előbbiekben visszakapott számot írjuk be a dokumentumba. Hozzunk létre egy mezőt a „Statisztika” űrlapunkon, mondjuk „Dokszám” névvel, írjuk a mező elé egy szöveget, amelyből kiderül, hogy mit fog tartalmazni, majd írjuk úgy át a fenti kis scriptünket, hogy a kiszámított dokumentum szám ne egy üzenetablakban jelenjen meg, hanem íródjon be a mezőbe. !" GYAKORLAT Ehhez módosítsuk a
gombunkat, hogy a következő scriptet hajtsa végre: 5.8 ábra A módosított, dokumentum számláló script Amint láthatjuk, ha kipróbáljuk, akkor a dokumentum egyetlen mezőjébe beírja az adatbázisban lévő dokumentumok számát. A script működése nem nagyon igényel már magyarázatot, az UI osztályokról és az előbbi magyarázat alapján egyértelmű. 286 5. PROGRAMOZÁSI KÖRNYEZET A módosított scriptünkön megfigyelhetjük, hogy – egyes nyelvektől eltérően – a LotusScriptnek mindegy, hogy hol van a változó deklarációja, csak annyi a kitétel, hogy előbb legyen, mint ahogyan használjuk. Fejlesszük még tovább a „Statisztika” űrlapunkat! Másoljuk be az Ügyfélkövetés adatbázisba (ha eddig nem ott lett volna), és próbáljuk meg rávenni, hogy gyűjtsön egy kis statisztikát számunkra. Az Ügyfélkövetés adatbázist használó képzeletbeli cégünk főnökei biztos kíváncsiak egy-két dologra. Elképzelhető, hogy tudni
szeretnék egy kiválasztott (belső) emberről, hogy pl. hány feladat tartozik hozzá, amely még nincs készen, mennyit végzett már el, és hány olyan van, amelyek elvégzésének már a határideje is lejárt és még mindig nincs kész. Ezeken az adatokon kívül megmondhatná a statisztika, hogy mennyi megjegyzés, cégdokumentum, esemény felvitele tartozik hozzá, ill. hogy összesen hány dokumentum tartozik a kiválasztott emberhez. Valami hasonló dokumentumot szeretnénk kapni: 5.9 ábra Egy lehetséges statisztika űrlap Hogy ezt elérjük, ehhez először is új mezőket kell felvennünk. 287 5. PROGRAMOZÁSI KÖRNYEZET !" GYAKORLAT Vegyünk fel egy mezőt, ahol kiválaszthatja a főnök, hogy kiről akar statisztikát készíteni. Legyen a mező neve „Ember”, a típusa dialógusablaklista, a választható emberek listáját pedig a következő formula határozza meg (ezt a Mezőtulajdonságok ablak Choices részébe kell beírni, úgy, hogy a Use
formula for choices-t választjuk a legördülő ablakból): @DbColumn("":"NoCache";"":"";"Kapcsolat";1) Ezzel a Belső kapcsolat nézet első oszlopát kapjuk vissza (amely kategorizált, és azoknak a belső embereknek a nevei szerepelnek itt, akikhez tartozik valamilyen dokumentum). A „Kapcsolat” a Belső kapcsolat nézet egy nevének egy szinonimája (másodlagos neve). !" GYAKORLAT Vegyünk fel még néhány mezőt: Mezőnév Darab Azonnal Kész NemKész Lejárt Megjegyzések Esemény Cégek Leírás Összesen ennyi dokumentum tartozik hozzá Ennyi azonnal elvégzett tevékenysége van Az elvégzett feladatok száma A még el nem végzett feladatok száma Az el nem végzettek közül ennyi határideje már le is járt A megjegyzések száma Az általa eddig felvitt események száma A hozzá (is) tartozó cégek száma Mindegyik mező legyen szöveg típusú, és írjunk eléjük valamilyen szöveget, amely jól
leírja, hogy mit tartalmaz a mező (olvasható legyen a dokumentum). Hozzunk létre még egy mezőt, szintén a statisztika számára, amely azt mondja meg, hogy összesen hány belső ember szerepel az adatbázisban. Ennek a mezőnek a neve legyen „Emberszám”. Rendezzük el tetszés szerint a mezőket és a feliratokat (esetleg használjunk táblázatokat is, hogy szép legyen az űrlap). Válasszunk valamilyen kellemes hátteret, legyen cím is az űrlapon stb. 288 5. PROGRAMOZÁSI KÖRNYEZET !" GYAKORLAT Szükségünk lesz majd egy újabb nézetre is: legyen ennek a nézetnek a neve „Belső kapcsolat 2”, a szinonima neve pedig „Kapcsolat2”, és legyen rejtett is (tegyük zárójelek közé a nevét). Úgy hozzuk létre, hogy lemásoljuk a Belső kapcsolat nézetünket, majd minden oszlopban szüntessük meg a kategorizálást, de az oszlop rendezését hagyjuk változatlanul. Változtassuk meg a nézet nevét az előbbiek szerint, majd mentsük el. A
nézetre a dokumentumok közötti kereséseink miatt lesz szükség. Most már „csak” a lényeg van hátra: meg kell valósítanunk a fenti célokat, ki kell tölteni a dokumentumot. Írjuk át a már meglévő gombunk „Click” eseményét. Amelyet eddig megírtunk, továbbra is használható, tartsuk meg. A következő három script részlet mindegyike szükséges a fenti mezők kitöltéséhez, azonban azért, hogy érthetőbbek legyenek az egyes scriptek, egyenként nézzük meg őket. !" GYAKORLAT Tehát ahhoz, hogy a fenti összes cél megvalósuljon, a gombunk eddigi tartalma mellé mind a három következő script részletet be kell írni, változatlan formában, egymás után. Lássuk az utoljára felvett mezőt (amelyik a belső emberek számát jeleníti meg) kitöltő scriptet: 5.10 ábra Az emberek számát kitöltő script Röviden a script működéséről: a „db” nevű objektumunk a jelenlegi adatbázisnak felel meg (mivel az előbbiekben tárgyalt
script során már hozzárendeltük). Ennek a NotesDatabase típusú objektumunknak van egy 289 5. PROGRAMOZÁSI KÖRNYEZET metódusa, a GetView, amely egy NotesView típusú objektumként visszaadja a kért nézetet (így lehet a legegyszerűbben visszakapni egy back-end nézet objektumot). Itt még az eredeti, kategorizált nézetet használjuk, nem a nemrég létrehozott, rejtett, kategorizálatlan nézetet. A NotesView osztálynak pedig van egy tulajdonsága, a TopLevelEntryCount, amely (ha a nézet kategorizált) megadja, hogy a legfelső kategória szintjén hány bejegyzés van. Pont ez kell nekünk: ha megnézzük a Belső kapcsolat nézetünket, akkor láthatjuk, hogy a legfelső kategória szinten pont azok vannak, akik belső emberek, és tartoznak hozzájuk dokumentumok. A visszakapott számot már csak sztringgé kell alakítani, és a megfelelő mezőbe beírni. !" GYAKORLAT A következő script rész azt számolja meg, hogy hány dokumentum tartozik a
kiválasztott emberhez (kitölti a „Darab” nevű mezőt): 5.11 ábra Az egy emberhez tartozó dokumentumok számát kitöltő script A script először kiolvassa az „Ember” nevű mező tartalmát: az „uidoc” objektumunkat már az első scriptben használtuk, ez az eredeti script alapján a jelenlegi UI dokumentumra mutat (ezen objektum segítségével írtuk be a dokumentum „Dokszám” mezőjébe az adatbázisban található dokumentumok számát). Az „uidoc” FieldGetText metódusával kiolvassa az „Ember” mező tartalmát (ahogyan a Hogyan használjuk az UI (front-end) osztályokat c. fejezetben láttuk). Ha megvan a belső ember neve, akkor meg kell szerezni az összes dokumentumot, amely hozzá kapcsolódik (egy NotesDocumentCollection objektumba), majd meg kell tudni, hogy mennyi dokumentumot fogtunk össze (ahogyan az adatbázis összes dokumentumának megszámolásakor csináltuk). 290 5. PROGRAMOZÁSI KÖRNYEZET Ahhoz, hogy visszakapjuk az összes
dokumentumot, amely a keresett személyhez tartozik, segítségül kell hívnunk a nemrég elkészített nézetünket. Ebben a nézetben megtalálható az összes dokumentum, amely az adatbázisban van, mégpedig úgy, hogy az első, rendezett oszlopában annak az embernek a neve szerepel, akihez a dokumentum tartozik. A „view” objektumhoz most ezt a „Kapcsolat2” nevű nézetet rendeljük, majd használjuk a NotesView osztály egy metódusát, a GetAllDocumentsByKey-t. Ez a metódus elég jól használható: a paraméterként kapott sztringet összehasonlítja a nézet első rendezett oszlopával (ennek nem feltétlenül kell az első oszlopnak lennie a nézetben), és visszaadja az összes olyan dokumentumot (egy NotesDocumentCollection objektumban), amelynél az első rendezett oszlop a kulccsal megegyezik. Ha megvan az összes dokumentum, amely a keresett emberhez tartozik, meg kell tudnunk, hogy ez hány darab (Count tulajdonság), és már lehet is a megfelelő mezőbe
beírni. Megjegyzés: a GetAllDocumentsByKey metódus nem csak egy sztringet kaphat paraméterként, hanem egy sztring tömböt is. Ha ez történik, akkor a tömb első elemét az első, a második elemét a második, stb. rendezett oszloppal hasonlítja össze a Notes, és azokat a dokumentumokat adja vissza, amelyek mindegyik kulccsal egyeznek. !" GYAKORLAT Lássuk az utolsó részletet, amely az egyes dokumentum típusokat számolja össze (hány megjegyzés, cégkártya, feladat van az egyes emberhez rendelve (lásd 5.12 ábra)) A „doccol” objektumunk az előző script részletben már megszületett: azokat a dokumentumokat tartalmazza, amelyek a kiválasztott emberhez tartoznak. Most nem kell egyebet tenni, mint a „doccol” objektum minden egyes dokumentumán végigmenni, kiolvasni a megfelelő mezőket, eldönteni, hogy melyik dokumentum melyik dokumentum típushoz tartozik, és a megfelelő számlálót megnövelni (vagyis megszámolni, hogy melyikből mennyi
van). A script rész lelke a DoLoop ciklus. Az alapgondolat az, hogy a gyűjteményen úgy megyünk végig, hogy vesszük az első dokumentumot a NotesDocumentCollection GetFirstDocument metódusával, majd a 291 5. PROGRAMOZÁSI KÖRNYEZET GetNextDocument metódus segítségével mindig a következő dokumentumra ugrunk. Ha a GetNextDocument metódus nem ad vissza dokumentumot (mert már az utolsó dokumentumon állunk), akkor véget ér a ciklus. Arra figyelni kell: lehet, hogy a gyűjtemény egyetlen dokumentumot sem tartalmaz, vagyis „elől tesztelő” ciklust kell képezni. (Megjegyzés: ForNext ciklust is készíthettünk volna, hiszen tudjuk, hogy hány dokumentum van a gyűjteményben, de azért ez „elegánsabb”). 5.12 ábra Az egyes dokumentum típusokat megszámoló script Annak eldöntésére, hogy tartalmaz-e dokumentumot a változó, az „Is” kulcsszót használjuk, amely két objektum hivatkozást tartalmazó változót 292 5. PROGRAMOZÁSI KÖRNYEZET
hasonlít össze. A konstansoknál pedig már megtanultuk, hogy a Nothing konstans az objektumot nem tartalmazó ilyen típusú változó értéke. A Case utasítás segítségével eldöntjük, hogy a kiolvasott mezők különböző értékei alapján melyik dokumentum melyik típusnak felel meg. Amely lényeges ebben a részben: hogyan kell egy back-end dokumentum egy konkrét mezőjének a tartalmát kiolvasni? Mint tudjuk, a Notes a dokumentumokban ún. elemekben („item”) tartja az információkat. Egy dokumentum mezőjét úgy lehet kiolvasni, hogy az azonos nevű elem értékét kell kiolvasni. A NotesDocument típusú objektumoknak van egy metódusuk, a GetItemValue, amely egy konkrét elem értékét adja vissza (de, hogy azért ne legyen olyan egyszerű), minden típusú elemhez a neki megfelelő típusú adatformában: pl. a szöveg vagy szöveg lista (pl Név) típusú mező értékét egy sztring tömbben, a szám vagy szám listát tartalmazó mező értékét
„Double” típusú szám tömbben, stb. Arról, hogy melyik típus miként adja vissza, a Notes Designer Súgójában olvashatunk. A lényeg számunkra itt az, hogy a szöveg típusú mező tartalmát is egy tömbben adja vissza, a mező valódi értéke pedig a tömb első (pontosabban nulladik) elemében található. Tehát, például egy dokumentum „Válasz” nevű mezőjének a tartalmát így lehet kiolvasni, ha a konkrét dokumentumot a „doc” nevű NotesDocument típusú objektum tartalmazza: Dim MezoTartalom As String MezoTartalom=doc.GetItemValue (”Válasz”) (0) Itt a (0) jelzi, hogy a visszakapott tömb nulladik elemét szeretnénk megkapni. Ezt a technikát láthatjuk a fenti script részben, mégpedig a Case Else sor utáni sorban. Az összes többi helyen viszont valami másféle technikával olvassuk ki a mezők tartalmát: ezt a fajta kiolvasást az ún. „Kiterjesztett osztály” formátum szerint végezzük. Kiterjesztett osztály E szerint a
NotesDocument objektum egy elemét a dokumentum egy tulajdonságának tekintjük (legalábbis formailag), és így hivatkozunk rá. Az előbbi példa, a „Válasz” mező tartalmának kiolvasása így néz ki: 293 5. PROGRAMOZÁSI KÖRNYEZET Dim MezoTartalom As String MezoTartalom=doc.Válasz (0) Ez egy jobban olvasható és jól használható formátum, mint az előző, viszont „logikailag” egy picit sántít (de ezt elnézzük neki). Amely viszont fontos: a kétféle megközelítés eredménye ugyanaz! Ebből az is következik, hogy itt is (mint látható) tömböt kapunk vissza szöveg típusú mezőnél, és itt is a nulladik elem tartalmazza magát a sztringet. A Select Case feltételsor logikája röviden a következő: az adott dokumentumból kiolvassuk a „Válasz” mezőt. Ennek értéke alapján eldönthető, hogy a dokumentum „Feladatkijelölés”, „Megjegyzés” vagy „Azonnal elvégzett tevékenység”. Amennyiben egyik sem, akkor a „Form” mező
alapján eldönthető, hogy a dokumentum cégkártya, vagy pedig egy esemény leírása. Ha a „Válasz” mező értéke „Feladatkijelölés”, akkor még megnézzük az „Állapot” mezőt: ha ez a „Kész” szót tartalmazza, akkor kész a feladat, ha a „Még nincs kész” szöveget, akkor nincs készen a feladat. Ekkor még azt is meg kell vizsgálni, hogy lejárt-e a feladat megoldására adott határidő (a „Nap” mező alapján). Ennél a mezőnél a következőre érdemes figyelni: a „Nap” mező egy dátum típusú mező. E mező kiolvasásakor az eredményt Dátum típusú tömbben adja vissza a Notes, a tömb első elemét tehát egy dátum típussal kell összehasonlítani. A Date függvény dátum típusként adja vissza a mai dátumot (ennek a függvénynek van egy párja is, a Date$, amely sztring típusként adja vissza a mai dátumot – ld. Notes Designer Súgó) A script rész végén a számláló-változókat sztringgé alakítjuk, majd beírjuk a
dokumentumba. !" GYAKORLAT Ha mind a három script részt beírtuk a gomb „click” eseményébe, próbáljuk ki a statisztika űrlapunkat működés közben is. Ne felejtsük el a végén megjegyzésekkel ellátni a scriptünket, mivel ez már egy elég nagy script ahhoz, hogy a későbbi használat során már ne emlékezzünk arra, hogy hogyan is működik. 294 5. PROGRAMOZÁSI KÖRNYEZET Még egy ötlet Ha azt szeretnénk, hogy a felhasználó ne tudja átírni a statisztika eredményeit, vagyis a megfelelő mezőket, akkor tegyük őket Számított típusúvá! Természetesen az „Ember” mezőt ne, hogy ki lehessen választani, kiről akarjuk elkészíteni a statisztikát. A többi mező viszont legyen Számított, és a képletük (mivel ez kötelező a számított mezőnél) legyen a saját nevük: pl. a „Darab” nevű mezőnek legyen „Darab”. Így helyes eredmény fog megjelenni, a script segítségével bele is tudunk írni, viszont a felhasználó
nem tudja megváltoztatni a tartalmát. 295 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI 6. Rendszeradminisztráció alapjai A Lotus Notes/Domino adminisztrációs fejezeten belül az alapvető fogalmak tisztázása után néhány, a valós életben leggyakrabban előforduló feladatot végzünk el. A további részegységekről, feladatokról a Súgó adatbázisban lehet utánanézni. 6.1 Néhány alapfogalom Notes/Domino szerver A szerver a legfontosabb része a Notes rendszernek; képes arra, hogy adatbázisokat tároljon és így az információkat elérhetővé tegye egyszerre több kliens számára. Az információ a replikáció útján terjedhet a teljes szervezeten / cégen keresztül. A Notes szerver lehetőséget ad a Notes levelezésre, SMTP levelezésre, POP3- és webszerverként működhet. Nem szabad a Notes szervert és a fájlszervert összetéveszteni: !" !" a fájlszerver alapegysége a fájl; jogosoltságokat a fájl- és könyvtárszinten adhatunk meg a
Notes szerver alapegysége az űrlap/dokumentum; jogosultságokat már az egyes mezőszintekre adhatunk A szerveren a szerverszoftver fut (DOS stílusú ablak); utasításokat vagy itt, vagy az adminisztrációs kliensből, vagy a szerverkonzolból adhatunk ki. Notes kliens A kliens képes adatbázis-kapcsolatot teremteni a szerverrel. Telepítéskor válaszhatunk: !" Notes: alkalmazásokat/adatbázisokat futtathatunk vele a szerverről !" Domino Designer: alkalmazásokat fejleszthetünk a Notes szerverre !" Domino Administrator: innen adminisztrálhatjuk a Notes rendszert, ezt a kliensfajtát fogjuk a továbbiakban használni Egyéb kliensek Mivel a Domino szerver egy többfunkciós szerver, több más kliensfajtával is elérhetjük szolgáltatásait. Ilyen például a Pegazus Mail levelező program – mint POP3 kliens – amellyel leveleket szedhetünk le a szerverről, vagy a Netscape Navigatorral – mint böngészővel – a Domino webszerver adatait (az
adatbázisokat) nézhetjük meg, vagy tölthetünk ki űrlapokat. Notes Named Network (NNN) 296 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI Szerverek azon csoportja, amelyek állandó hálózati kapcsolatban vannak egymással (LAN vagy routeres WAN), és ugyanazon hálózati protokollon kommunikálhatnak egymással. A levéltovábbításnál lesz jelentősége ennek a fogalomnak. Tartomány / Domain: A szervereknek és felhasználóknak azon csoportja, amelyek egy szervezethez/ céghez tartoznak. A domain egy biztonsági szempontból jól kezelhető, de zárt rendszert alkot A tartománynév a név utáni @ mögött található, például Nagy Péter/Cégnév @Domainnév Domino címjegyzék / Domino Directory (régi nevén Név- és Címjegyzék / Name & Address Book): A domain adminisztrációs adatbázisa, itt kell regisztrálnunk az összes szervert, felhasználókat, kapcsolatokat, stb. Egy tartomány minden szerverén ugyanannak a Címjegyzék adatbázisnak a replika másolata
megtalálható. 6.2 Az elmélet 6.21 Példarendszer tervezése A fejezeten belül a Kerekerdő Kft. Notes hálózatát fogjuk felépíteni A cég budapesti központú és egy pécsi telephellyel rendelkezik. Így két Notes szervert és az adminisztrátoron kívül két Notes felhasználót fogunk létrehozni. Egy Notes rendszer felépítése előtt alaposan át kell gondolnunk a tartomány- és azon belül az elnevezési struktúrát, mivel ez a rendszer biztonságának az alapja. 6.22 A domain A teljes céget egy tartományba illesszük be, így a cég összes szerverén megtalálható lesz a Címjegyzék. A tartomány neve Kerekerdo lesz Több domain (másképpen mondva több cég) kapcsolatáról később részletesebben lesz szó. 6.23 Hierarchikus elnevezési rendszer (X500) Minden szerver és felhasználó egy hierarchikus névvel rendelkezik, pl. Nagy Péter/Hun/Cégnév vagy Budapest szerver/Hun/Cégnév. A hierarchia előnyei: !" !" !" ugyanazzal a névvel
rendelkező felhasználókat meg tudjuk különböztetni (Nagy Péter/Marketing/Cég és Nagy Péter/Informatika/Cég) adatbázisokhoz való jogosultságot korlátozhatjuk pl. az összes informatikusra a */Informatika/Cég kifejezéssel a regisztrálási jog is átadható, vagyis a magyarországi iroda munkatársait az itteni adminisztrátor veheti fel a rendszerbe, míg más országbeli felhasználót az ottani adminisztrátor kezel. 297 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI A nevek szintaktikája: CN/(OU1)/(OU2)./O/(C) A név egyes részei részletesen: A név részei Leírás CN: Common Name, általános név OU: Organizational Unit, szervezeti egység neve Felhasználóknál a teljes név, szervereknél a szervernév tartozik ide. Tipikusan a szervezeten belüli osztály neve, vagy a hely (országnév) szerepel itt. Maximálisan négy OU szint lehet egy névben. A szervezet, vagy a cég neve található itt. O: Organization, szervezet neve C: Country, országrövidítés
Kötelező Kétbetűs országrövidítés, Magyarország a HU. Igen Karakterek maximális száma 80 Nem, de általában egy szervezeti egység használata ajánlott 32 Igen min. 3, max. 64 Nem 2 Javaslatok az elnevezésekhez: !" Az elnevezési struktúra mindig az adott szervezethez igazodjék. Helyes szervezeti egység-nevek választása esetén az egyes személyek nevei nem változnak. Pl: Ha a cégen belüli személyek gyakran változtatják a telephelyeiket, akkor célszerű a telephelyet NEM választani szervezeti egységként. !" A nevek legyenek rövidek, de értelmezhetők. Pl HUN nyilvánvalóan országunkat jelöli. !" Ékezeteket az általános névnél használhatunk, de a szervezet és a szervezeti egység neve ne tartalmazzon ékezetes karaktereket! !" 1 szervezeti egység használata javasolt, de az áttekinthetőség kedvéért kettőnél lehetőleg ne használjunk több szintet. !" Néhány cég a központosított szerverfarmjának
külön OU-t adott. A példánkban használt elnevezési rendszer a fenti szempontok alapján a következő lett: A cég két (földrajzilag Budapesten és Pécsett elhelyezkedő) szerverének neve: BpServer01/Kerekerdo és PecsServer01/Kerekerdo lesz. Az adminisztrátor neve Admin/Kerekerdo, a budapesti felhasználó a Pesti Barnabás/BUD/Kerekerdo, míg a pécsi felhasználó a Pécsi Kornélia/PECS/Kerekerdo nevet viseli. 298 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI 6.24 A hitelesítők és ID fájlok rendszere A Notes rendszerben minden hitelesítő, szerver és felhasználó azonosítására egy-egy azonosító fájl (ID fájl) szolgál. Az ID fájlok egyediek, méretük kb 3 kbyte Tartalmuk: !" !" !" !" a felhasználó vagy szerver neve titkos és nyilvános kulcspár (RSA) egyszintű titkosítási kulcsok továbbá az egész ID fájl egy jelszóval le van titkosítva A biztonsági rendszer másik eleme a jelszó. Minden ID fájlhoz tartozik egy jelszó,
csak annak a birtokában használhatjuk az adott ID fájlt (azzal szüntethetjük meg a titkosítását). Egy felhasználó akkor léphet be, ha a felhasználói ID fájl a birtokában van (hálózat, vagy akár egy lemez formájában), továbbá a jelszót is tudja. A szervereknek általában nem adnak jelszót, hogy a szervergép újraindítása gördülékenyen mehessen. Legfontosabb azonban a hitelesítők jelszóvédelme. A jó jelszó legalább 8 karakterből áll, azon belül betűkből és számokból. Az 5-ös Notesban az egyes jelszavakra bonyolultsági szinteket állíthatunk fel 0-tól 16-ig; a hitelesítőkre javasolt a 10, felhasználókra a 8, szerverekre a 0 szint. Az első szerver telepítése után, de még a többi szerver és a felhasználók regisztrálása előtt létre kell hozni a felhasználókhoz/szerverekhez tartozó hitelesítőket. Minden szinthez a megelőző szintet kell felhasználnunk. Szervezet (cert.id) /Kerekerdo Szervezeti egység: /BUD/Kerekerdo
/PECS/Kerekerdo BpServer01 Admin Pesti Barnabás PecsServer01 Pécsi Kornélia 6.1 ábra A hitelesítők hierarchiája a példaszervezeten belül Példánkban a teljes folyamat a következő lesz: !" !" /Kerekerdo szervezeti hitelesítő (cert.id) létrehozatala /BUD/Kerekerdo szervezeti egység hitelesítő (budcert.id) létrehozatala a certid használatával 299 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI !" /PECS/Kerekerdo szervezeti egység hitelesítő (pecscert.id) létrehozatala a certid használatával Miután elkészítettük a pécsi és a budapesti hitelesítőket, a /PECS/Kerekerdo hitelesítőt eljuttathatjuk Pécsre a megfelelő adminisztrátornak. A budapesti adminisztrátor további feladata: !" !" !" !" Admin/Kerekerdo felhasználó (admin.id) regisztrálása a certid segítségével BpServer01/Kerekerdo szerver (bpserver.id) regisztrálása a certid segítségével PecsServer01/Kerekerdo szerver (pecsserv.id) regisztrálása a
certid segítségével Pesti Barnabás/BUD/Kerekerdo felhasználó (pestibar.id) regisztrálása a budcertid segítségével A pécsi adminisztrátor feladata: !" Pécsi Kornélia/PECS/Kerekerdo felhasználó (pecsikor.id) regisztrálása a pecscertid segítségével Az elkészített azonosítófájlok segítségével a szerver és a kliens beállítása megtörténhet az egyes gépeken. 6.3 A gyakorlat 6.31 A számítógépek és azok előzetes beállításai A következő feladatok végrehajtásához három számítógépre lesz szükség: ebből két számítógépen a szerverek lesznek elhelyezve, míg egy számítógép lesz a felhasználók és az adminisztrátor univerzális gépe. Az egyes számítógépek legyenek hálózatba kötve és mindegyiken a TCP/IP hálózati protokoll legyen beállítva. Figyelem! TCP/IP hálózatok esetén a szerver nevének (példánkban BpServer01) a megfelelő IP számmal szerepelnie kell a DNS-ben. Ha nem szerepel, akkor az összes
szerver és munkaállomás hosts fájljában (w9x-en a Windows, NT esetén a winntsystem32driversetc alkönyvtárban található) benne kell lennie a szervernév és IP szám párosnak, pl. 192.16815 BpServer01 Az operációs rendszerekben megtalálható ping nevű segédprogrammal ellenőrizzük, hogy a gépek a TCP/IP segítségével láthatják egymást. 300 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI Indítsuk el a felhasználóknak szánt gépen az MS-DOS parancssort (MS-DOS Prompt/Command Prompt) és itt írjuk be: ping bpserver01 Ekkor jó beállítás esetén egy helyes válaszsor: Reply from 192.16815: bytes=32 time<10ms TTL=128 Helytelen beállítás esetén a következő hibajelzés valamelyikét kapjuk: Request timed out, vagy Destination host unreachable, vagy Bad IP address XXX. 6.32 Első szerver telepítése A Lotus Domino szerver telepítőkészlet NEM található meg a könyvhöz mellékelt CD-n, viszont ingyenesen igényelhető a Lotus Magyarországtól
(http://www.lotushu) Az első szerver kiemelt jelentőségű, mivel ekkor készül el az a Címjegyzék adatbázis, amely a rendszer lelke lesz. A folyamat során létrejön még a certid, a serverid, és az adminisztrátor user.id-je Az egyes Notes verzióknál a telepítés folyamata és a kitöltendő mezők változhatnak, az alapfolyamat a következő: !" !" 1. Szakasz: fájlok másolása (installation) a LotusNotes és LotusNotesData alkönyvtárakba 2. Szakasz: fájlok konfigurálása (setup) A Server alkönyvtárnak az operációs rendszernek megfelelő (pl. NT esetén W32intel) alkönyvtárában lévő setup.exe fájlt indítsuk el Az ablakok értelemszerű kitöltése után az első szakaszban a fájlok átmásolódnak a gépünkre. A második szakaszban el kell indítanunk a szervert (pl. NT-n Start/Programok/Lotus alkalmazások/Lotus Domino Server). Ez lezárja a DOS típusú szervert, majd elindítja a Domino telepítő klienst, azon pedig elindul a Domino
Configuration (5.0) adatbázis Ebben az adatbázisban történik a négylépéses installáció. Az egyes lépések a következők: 1. Első szerver-e, vagy nem? Mivel ez az első szerver, ezért azt a pontot válasszuk ki. Így tudatjuk a telepítő programmal, hogy létre kell hoznia a Címjegyzéket és a hitelesítőket is. 2. Egyszerű, vagy részletes telepítés (Quick and Easy, vagy Advanced) Célszerű a részletes telepítést választani, mivel az egyszerű telepítés általában csak a nagyon jól beállított gép esetén hoz ténylegesen gyors eredményt. 3. Szolgáltatások beállítása 301 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI A harmadik képernyőn az alapszolgáltatásokon felüli szolgáltatásokat választhatjuk ki. Ilyenek pl HTTP, POP3, SMTP, Eseménykezelő (Event Manager), Statisztika (Statistics) 4. Adminisztrációs beállítások A negyedik képernyőn találhatók a tényleges szerver és ID beállítások. Ezeket az alábbi részekben
állíthatjuk be: !" Szervezeti beállítások (Organization Identity) !" Tartomány neve (Domain Name): példánkban Kerekerdo !" Hitelesítőnév (Certifier Name): példánkban Kerekerdo !" Hitelesítő országkód (Certifier Country Code): opcionális, példánkban nem használt !" Hitelesítő azonosító (Certifier ID): Ha már valahol regisztráltunk szervezeti hitelesítőt, akkor a már létező hitelesítőt kell választani, ekkor a fájlnevet kell megadni. Mivel a példánkban is egy új szervezetet állítunk elő, ezért hozzunk létre az új hitelesítőt. Ekkor a jelszó mezőben kell megadni a hitelesítő jelszavát. !" Szerver beállítások (New Server Identity) !" Szerver neve (Server Name): példánkban BpServer01 !" Szerver hosztneve (Server’s Hostname): példánkban bpserver01.kerekerdohu !" Szerverazonosító (Server ID): Ha már regisztráltunk szerverazonosítót, akkor itt megadhatjuk a fájlnevét, egyébként
az új szerverazonosító létrehozása pontot kell választani (Példánkban is újat hozzunk létre.) !" Adminisztrátor beállításai (Administrator’s Identity) !" Név (Name): Az adminisztrátor nevét kell megadni az amerikai hármas tagolásban, vagyis első, középső és utolsó név (First, MI, Last) Mivel ez John F. Kennedy esetén megfelelő, de a magyar nyelv éppen fordított, ezért célszerű a teljes nevet az utolsó név (Vezetéknév) helyén megadni. (Keresztnév=Péter és Vezetéknév=Nagy esetén a nevet a Notes „Nagy, Péter”-ként kezeli, és még ne is beszéljünk Nagyné Kis Katalinról) Példánkban nem egy tényleges személyt veszünk fel adminisztrátorként, ezért csak az utolsó névtagba írjunk Admin-t. !" Adminisztrátor azonosítója (Administrator’s Identity): Ha már regisztráltuk a személy azonosítóját, akkor itt megadhatjuk a fájlnevet, egyébként az új felhasználói azonosító létrehozása pontot kell
választani (példánkban újra van szükség). !" Hálózati beállítások (Network Options) Az összes porton való beállítás választása nem célszerű, mivel valószínűleg csak egy hálózati protokollt használunk a Notes rendszer gerinceként. A Portok szerkesztése (Edit Ports) gomb választása után adhatjuk meg az általunk kedvelt protokollt. 302 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI Példánkban a TCP/IP protokollt használjuk majd, tehát az összes többit tiltsuk le a Letiltva (Disabled) beállításával. A hálózati címhez a hosztnevet írjuk be, azaz bpserver01.kerekerdohu !" COM portok beállítása (Communications Port Options) Ha a szerverek, vagy a szerver és munkaállomások között modemes kapcsolatot szeretnénk kiépíteni, akkor kell kitölteni az alábbiakat: !" Port neve (Serial Port): COM1, COM2, !" Modem parancsfájl: Ha a modemünk típusát a listából ki tudjuk választani, akkor azt válasszuk, egyébként a
Generic All-Speed Modem File-t használjuk. Figyelem! Windows NT esetén a Dialup Networkingben használt modemeket nem szabad a Notesban is engedélyezni, mivel az NT és a Domino saját modemkezeléssel bír, vagyis csak az egyik kezelhet egy modemet. Példánkban nem fogunk modemeket használni, így hagyjuk None értéken. A negyedik lap kitöltése után befejeződött a konfigurációs szakasz, vagyis elkezdődik a hitelesítők és a Címjegyzék “legyártása”. A hitelesítő- és szerverazonosító fájl a Data alkönyvtárban, míg az adminisztrátor felhasználói id fájlja a címjegyzékben található, a személy űrlaphoz mellékelve. Az adminisztrátor telepítésekor a fájl automatikusan lecsatolódik onnan. 6.33 Domino Administrator telepítése A további feladatok végrehajtásához szükségünk lesz a Domino Administrator kliensének telepítésére a felhasználói gépre. Telepítsük most az összes klienst, ne csak az adminisztrátorit. Indítsuk el a
setup.exe-t, majd a klienstípusok közül válasszuk ki a Minden kliens-t (All Client). A fájlok másolása után a Start menüből indítsuk a Domino Administratort, ekkor elindul a klienskonfiguráció: !" Kapcsolódni szeretnék egy Domino szerverhez (I want to connect to a Domino Server) 303 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI !" !" !" Milyen módon: példánkban LAN hálózaton keresztül (connection to a Local Area Network) Domino szerver neve (Domino server name): ide a teljes hierarchikus nevet kell beírni, példánkban BpServer01/Kerekerdo-t A következő pontban a felhasználói azonosító helyét kell megadni: !" Notes felhasználói azonosítómat fájlban kaptam meg (My Notes User ID has been supplied to me in a file) !" A nevemet használja azonosításként (Use my name as identification) Mivel az első szerver telepítése után az admin id fájlja a Címjegyzékbe került és nem a fájlrendszerbe, ezért a név megadásával
kell leszedni az id fájlt, azaz a Felhasználói név mezőbe az Admin/Kerekerdo kerüljön. !" A további ablakokban az egyéb kliensbeállítások történnek, mint az Internet levelesláda (fiók), hírszerver (news), Internet címjegyzékszerver (LDAP), proxy, Internet kapcsolat. Ezeknél ne állítsunk be semmit, az internetes kapcsolat hiánya esetén pedig válasszuk a proxyt és ne töltsük ki az űrlapot. Ha a konfigurálással elkészültünk, a munkaállomás elindul. A Notes megkeresi a beírt felhasználói nevet a tartomány Címjegyzékében, majd a jelszó beírása után a felhasználói azonosítófájl a Data alkönytárba kerül user.id néven (Célszerű ezt a fájlnevet – a Notes kikapcsolása után – átírni Admin.id-re, hogy megkülönböztethessük az egyes userid fájlokat.) Ekkor még további fájlok keletkeznek, mielőtt a munkaállomás telepítése kész lesz. Most az adminisztrációs felületet láthatjuk 6.34 Az adminisztrációs
felület bemutatása A Lotus Domino Administrator felületéről hajthatjuk végre az összes adminisztrációs tevékenységet, mint például a felhasználók, szerverek regisztrálása, nevük módosítása, fájlok kezelése. A megfelelő ikonra kattintva és az üdvözlő képernyő bezárása után láthatjuk a tényleges adminisztrációs képernyőt. A képernyő három fő részre osztott: feladat, eredmény és eszközök panel, emellett még az R5-ös felületben megszokott könyvjelzőt (bookmark) és a menüket is megtalálhatjuk és használhatjuk. A tartomány könyvjelzőre kattintva előtűnik a szerver panel is. 304 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI könyvjelzők Szerver panel menük Feladat panel Eredmény panel címkék Eszközök panel 6.2 ábra A Domino Administrator paneljai Az egyik panel valamely sorára kattintva a többi panelben található információk is felfrissülnek. A lista alaphelyzetben a Helyi (Local) gépre mutat Ha valamelyik
szerver adataira vagyunk kíváncsiak, először ki kell választanunk azt a Kedvencek (Favorites) vagy a Tartomány (Domain) könyvjelzőből. Az adminisztrált tartományt a Fájl/Beállítások/Adminisztrációs beállítások-ban az Ezen Domino tartományok kezelése pontban állíthatjuk be. Bármelyik már létező szervert áttehetünk a Kedvencek közé a Szerverek/Szerver hozzáadása a kedvencekhez (Servers/Add server to Favorites) menüponttal. A szerver panelben láthatjuk az általunk adminisztrált domainben található összes szervert hálózatok, hierarchia, verziószám (Release) és operációs rendszer szerint, továbbá klaszterünket (ha van). A feladat panelben az adminisztrációs feladatok láthatók logikus csoportosításban. A címkék alatt egy meghatározott adminisztrációs tevékenységkör elemeit találhatjuk. Ha például a szerveren található fájlokat akarjuk adminisztrálni, a szerver panelben válasszuk ki a kívánt szervert, majd válasszuk a
Fájlok (Files) címkét. Ha új felhasználót szeretnénk regisztrálni, akkor a Személyek és csoportok címkét kell választanunk. 305 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI Az eredmény panelben a kiválasztott esemény eredményét láthatjuk, Ha a szerveren található fájlokat nézzük, akkor a Fájlok címke alatt válasszunk ki egy alkönyvtárat. Az eredmény panelben az itt található fájlok listája látható. Az eszközök panelben az adott feladatkörrel kapcsolatos adminisztrációs eszközöket találhatjuk. A Fájlok címkét nézve például az adott szerver szabad lemezterületét ellenőrizhetjük (Lemezterület, Disk Space), törölhetünk egy alkönyvtárat (Gyűjtő/Törlés, Folder/Delete) vagy az egyes adatbázisokra itt hozhatunk létre keresőindexet (Adatbázis/Teljes szöveges index, Database/Full Text Index). Az egyes funkciók helyei a továbbiakban kerül vázlatos bemutatásra. 6.35 Hitelesítők (certid fájlok) létrehozatala A szervezeti
hitelesítőt (cert.id) már elkészítettük, így hozzuk létre a szervezeti egység hitelesítőjét. Szervezeti egység hitelesítő létrehozása A Regisztráció/Szervezeti egység (Registration/Organizational Unit) eszközzel hozhatjuk létre a /BUD/Kerekerdo és a /PECS/Kerekerdo hitelesítőket. Először meg kell adni azt a hitelesítőt, amelyből az új szervezeti egységet származtatni akarjuk. Példánkban ez a certid fájl lesz A jelszó beírása után a kitöltendő mezők: Regisztrációs szerver (Registration Server) Hitelesítőazonosító (Certifier ID) Azonosítófájl megadása (Set ID File) Szervezeti egység (Organizational Unit) Hitelesítő jelszava (Certifier password) Jelszó minősége (Password quality scale) Az itt megadott szerveren található Címjegyzékbe kerül a hitelesítési feljegyzés, innen replikálódik tovább. Példánkban ez a BpServer01/Kerekerdo legyen. Az a hitelesítő, amelyből származtatunk, példánkban ez a /Kerekerdo. A
létrehozandó fájl könyvtárszerkezetbeli helye és fájlneve. Fájlnévként a budcert.id-t adjuk! Az új OU neve, példánkban BUD. Figyelem! A jelszó kiíródik a képernyőre. Hitelesítők esetén erősebb jelszó ajánlott. (8-12) A Regisztráció (Register) gomb megnyomására néhány másodperc múlva elkészül a hitelesítőfájl. A másik hitelesítőfájlt (PECS - pecscertid) hasonlóan készítsük el 306 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI Figyelem! Az elkészített hitelesítő ID-k másolatát jól elzárt (tűz- és katasztrófabiztos, továbbá másolásbiztos) helyre tegyük el, mivel ezek elvesztése esetén a teljes Notes rendszert felépítését újrakezdhetjük! 6.36 Szerver regisztrálása A PecsServer01/Kerekerdo szerver regisztrálásához a Konfiguráció (Configuration) címke Regisztráció/Szerver (Registration/Server) eszközét válasszuk ki. A hitelesítő kiválasztása, majd jelszavának beírása után a következő mezőket kell
kitöltenünk: Regisztrációs szerver (Registration Server) Hitelesítőazonosító (Certifier ID) Biztonság típusa (Security type) Hitelesítés lejárati dátuma (Certificate expiration date) BpServer01/Kerekerdo Itt válasszuk a /Kerekerdo-t, vagyis a cert.id-t Nemzetközi Ezután kell a Hitelesítés/Hitelesítés (Certification/Certify) eszközzel újrapecsételni az ID-t. A Tovább (Continue) gomb után az alábbi mezőket tölthetjük ki: Az Alapok (Basics) részben: Domino szerver neve (Domino server name) Jelszó és Jelszó minősége (Password) Domino tartomány (Domino domain) Adminisztrátor (Administrator) PecsServer01/Kerekerdo Szervereknek lehetőleg ne adjunk jelszót. A domain nevét adjuk meg. Jelen esetben ez a Kerekerdo Az adminisztrátor vagy csoportjának neve, e mező kitöltése kötelező. Példánkban Admin/Kerekerdo Az Egyéb (Other) részben: Hálózat (Network) Szerverazonosító tárolása (Store Server ID) Az NNN neve. Példánkban legyen más,
mint a BpServer01 NNN neve, pl. Halozat2 Választhatunk, hogy a Címjegyzékben a szerverlaphoz mellékelve (In Domino Directory) jelenjen meg a fájl (ilyenkor jelszó szükséges), vagy pedig fájlban (In file). Válasszuk csak a fájlt, neve pedig pecsserv.id legyen A Regisztráció (Register) gomb megnyomása után létrejön a szerverhez tartozó ID fájl és a címjegyzékben megjelenik a kitöltött szerverdokumentum. 307 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI 6.37 További szerverek telepítése A PecsServer01 már nem a tartomány első szervere, így a szerver telepítéséhez szükséges az új szerver regisztrálása (ez már kész), továbbá a hálózati kapcsolat valamilyen más szerverhez (példánkban a BpServer01-hez), hogy a Címjegyzéket onnan átreplikálhassa az új szerverre. Az újabb számítógépen a telepítés és konfigurálás hasonló az előzőhöz, csak itt a További szerver pontot kell választani és az összes id fájl (cert.id, pecsservid és
adminid) már adott. 6.38 Felhasználók regisztrálása, csoportok A két működő szerver után következhet a felhasználók regisztrálása, majd telepítésük. A felhasználók regisztrálásához a Személyek és csoportok (People & Groups) címke Személyek/Regisztrálás (People/Register) eszközét válasszuk ki (ugyanide juthatunk a Konfiguráció (Configuration) címke Regisztráció/Személy (Registration/Person) eszközével). A megfelelő hitelesítő (pl budcertid) kiválasztása, majd jelszavának beírása után a Személy regisztrálása (Register Person) képernyőt láthatjuk. Itt az egyszerűbb bevitelt láthatjuk, a Speciális (Advanced) kapcsoló bekattintásával a bővített mezőlistát láthatjuk. A bővített listában a következő lényegesebb mezőket kell kitöltenünk (vagy átírnunk, ha már esetleg létezett): Az Alapok (Basics) részben: Regisztrációs szerver (Registration Server) Keresztnév, Középső név(KN), Vezetéknév (First name,
MI, Last name) Jelszó, és minősége (Password, Quality) Internet cím (Internet Address) BpServer01/Kerekerdo Itt a Vezetéknév mezőbe írjuk be a teljes nevet, azaz a Pesti Barnabás Hasonló a fentiekhez. A cím automatikusan generálódik a név egyes elemeiből és az Internet-tartomány (Internet Domain) mezőbe írtakból a Formátum (Format) gombnál beállított módon. Bármikor megváltoztathatjuk ezt: most legyen ez a Pesti.Barnabas@kerekerdohu Az Üzenet (Mail) részben: Levelezőszerver (Mail Server) Postafájl tulajdonosának hozzáférési jogosultsága (Mail file owner access) Ez az a szerver, ahol a személy postaládája elhelyezkedik. Általában más, mint a regisztrációs szerver, a példánkban – mivel budapesti felhasználó – viszont megegyezik. Hagyjuk Kezelő (Manager) szinten. 308 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI Az Azonosítóadat (ID Info) részben: Hitelesítés lejárati dátuma (Certificate expiration date) A
felhasználóazonosító tárolási helye (Location for storing user ID) Növeljük meg az időpontot, ha nem akarjuk kétévente megújítani a hitelesítést. Ha a címjegyzékben tároljuk az ID-t, akkor az a telepítéskor a felhasználó gépének data könyvtárába kerül. Választhatjuk a Fájl pontot is, a lényeg, hogy célszerű ezt elmenteni a kezdeti jelszóval. A Csoportok (Groups) részben: Kijelölt csoportok (Selected groups) A bal oldali részen a Címjegyzékben található összes csoport látható, a Hozzáadás (Add) gombbal tehetjük át a jobb oldalra. A regisztrálandó személy pedig automatikusan bekerül az ott megadott csoportokba Az Egyéb (Other) részben: Személy hozzáadása a Windows NT-hez (Add this person to Windows NT) Lehetőség van arra, hogy az NT felhasználók Notes felhasználók legyenek, és fordítva. Ennek a lehetőségnek a bővebb tárgyalása a Súgóban található. A Személy hozzáadása (Add person) gombbal a
regisztrálandó személy bekerül az ablak alsó részében található Regisztrációs sorba (Registration queue). További személyeket is regisztrálhatunk, példánkban Pécsi Kornélia/PECS/Kerekerdot, viszont az Azonosítóadat (ID Info) részben levő Hitelesítővel (Certifier ID) váltsunk át a pecscert.id-re A Szövegfájl importja (Import Text file) gombbal esetlegesen egy szövegfájlban megadott listát tehetünk a sorba; a megfelelő paramétereknek a Súgóban nézhetünk utána. A lenti ablakba felvett felhasználók esetében a Regisztrálja mind (Register All) gomb megnyomására kezdődik a regisztráció, majd egy ablakot kapunk a regisztráció sikeréről/sikertelenségéről. 6.39 Kliens telepítése Bármelyik kliens telepítése hasonló az adminisztrátor telepítésénél leírtakhoz, a megfelelő felhasználónevet vagy azonosítófájlt kell csak megadnunk. 6.4 Notes alapfunkciók Miután két szerverünk és három felhasználónk készen áll a munka
megkezdésére, először a levelezés, majd a replikáció elméletét tekintsük át. 309 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI 6.41 Notes levelezés elmélete Minden felhasználó rendelkezik egy levelesládával, amely a levelezőszerverének MAIL alkönyvtárban helyezkedik el nev.nsf névvel (a mail50ntf sablonon alapulva) BpServer01 Admin admin.nsf PecsServer01 Pesti Barnabás pestibar.nsf Pécsi Kornélia pecsikor.nsf 6.3 ábra A felhasználók és levelezőszervereik A Notes levelezési rendszer része minden egyes szerveren a Router nevű szerverfolyamat, amely a levelek szállításáért felelős, továbbá a MAIL.BOX nevű fájl (megnyithatjuk, mint adatbázist!), ahol a levelek a kézbesítésig ideiglenesen várakoznak. Fontos szerepe van annak, hogy a szerverek azonos NNN-ben (hálózat mező a Szerver dokumentumban) találhatók-e vagy sem. Ennek megfelelően a levelek továbbítása a következő: a.) A két szerver azonos NNN-be tartozik és Pécsi Kornélia
küld egy levelet az Adminnak: 1. Pécsi Kornélia levelének elküldésekor a levél Pécsi Kornélia szerverének (PecsServer01) MAIL.BOX adatbázisába kerül 2. A PecsServer01 routere a Címjegyzékben megkeresi, hogy melyik szerver az Admin felhasználó levelezőszervere 3. Ha az Admin levelezőszervere azonos lenne a küldőével, akkor a router egyből az Admin levelesládájába továbbítaná a levelet. Mivel az Admin levelezőszervere a BpServer01, így a levél a BpServer01 MAIL.BOX-ába kerül 4. A BpServer01 routere a levelet átteszi az Admin levelesládájába b.) Ha a két szerver különböző NNN-be tartozik: 1. ua mint az előbbi esetben 2. ua, viszont a router észleli, hogy a célszerver nem ugyanabba az NNN-be tartozik. Ilyenkor egy olyan Kapcsolat (Connection) dokumentumot keres, amelyik az ő NNN-jébe tartozó szerver és a cél NNN-be tartozó szerver között teremt kapcsolatot. 3. Ha talált kapcsolatot, akkor a levelet az ő NNN-jébe tartozó szerver
MAILBOXába helyezi el 4. A cél NNN-be tartozó szerver MAILBOX-ába a Kapcsolat dokumentumban leírt ütemezés szerint kerül át a levél. 310 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI 5. Onnan kerül át a levél az Admin levelezőszerverének MAIL.BOX-ába, majd a router átteszi a levelet az Admin levelesládájába. Különböző NNN esetén tehát egy kapcsolat dokumentumot kell létrehoznunk ahhoz, hogy a levél átmenjen a másik NNN-be. A Kapcsolat dokumentumot a Konfiguráció (Configuration) címke Üzenetkezelés/Kapcsolatok (Messaging/Connections) nézetében a Kapcsolat hozzáadása (Add Connection) gombbal hozhatunk létre. A kitöltendő mezők: Az Alapok (Basics) címkén: Kapcsolat típusa (Connection type) Forrás- és Célszerver neve és tartománya (Source server Destination domain) Port(ok) (Use the port) Legfontosabb lehetőségek: Helyi hálózat (Local Area Network): ide tartozik a LAN vagy routeres WAN hozzáférés Notes közvetlen tárcsázás
(Notes Direct Dialup): ha a szerverek egymás között modemen tartják a kapcsolatot. Példánkban a Helyi hálózatot kell választanunk. A kapcsolat forrásszervere az, amelyik a kapcsolatot kezdeményezni fogja, míg a célszerver az, amelyiket eléri. Ha mindkét szerver kezdeményezni akar, akkor egy másik Kapcsolat dokumentumot is létre kell hozni az ellenkező irányban. A tartományokat azonos tartomány esetén is fel kell tüntetni. Helyi hálózat esetén a portot kell megadni, míg modemes kapcsolat esetén a portot és a telefonáláshoz szükségek egyéb adatokat: telefonszám, körzetszám, stb. A Replikáció/Levéltovábbítás (Replication/Routing) címkén a levelezéssel a Levéltovábbítás oszlop foglalkozik, az itt beállítható paraméterek: Azonnali továbbítás (Route at once if) Továbbítási költség (Routing cost) Levéltovábbító típusa (Router type) Valamennyi várakozó levél esetén a router automatikusan felépíti a kapcsolatot és
elküldi azokat. Sok szerver esetén két szerver között több lehetséges út található, az optimálisat az itt megadott költségek alapján dönti el a Notes. Hálózati kapcsolat költsége 1, modemesé 5 A router a kapcsolat felvétele után a következőket teszi: Csak feltöltés (Push Only): Alaphelyzet, csak levélküldés történik Feltöltés hívás esetén (Push Wait): Levélküldés történik, majd vár arra, hogy a másik szerver is küldje a leveleket. Kétirányú (Pull Push): Levélküldés után egy olyan kérés is megy a másik szervernek, hogy küldheti ő is a leveleket. Csak letöltés (Pull Only): Csak a kérés megy át a másik szerverhez. 311 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI Az Ütemezés (Schedule) címkén: Ütemezés (Schedule) Kapcsolat időpontja (Connect at times) Ismétlési intervallum (Repeat interval of) A hét mely napjain (Days of week) Ha Engedélyezve (Enabled) állapotba tesszük, akkor az automatikus ütemezést
engedélyeztük, vagyis az egyik szerver a másik szervert az alábbi beállítandó időkorlátok között az alábbi gyakorisággal hívni fogja és elvégzi az előző címkén adott feladatokat (replikáció, levéltovábbítás) A megadott időközben, vagy időpontokban próbálkozik a szerver. Az időkorláton belül hány percenként próbálkozzon meg az újrahívással. A hét ezen napjaira korlátozódik a replikáció. Mint láthattuk, egy Kapcsolat dokumentum csak a levelezési kapcsolat egyik irányát határozta meg, így mindkét irányból szükséges a dokumentum létrehozatala. A különböző NNN-ek között a leggyorsabb levelezési topológia a csillagtopológia (huband-spoke). Ennek lényege, hogy minden szerver egy központi (hub)szerverhez kapcsolódik mindkét irányban. Spoke 1 Spoke x Spoke 2 Hub Spoke 5 Spoke 3 Spoke 4 6.4 ábra Csillag (hub-and-spoke) topológia Ekkor a levéltovábbítás során bármely levél esetén csak két kapcsolatnyi
időveszteség keletkezhet (Pl. Spoke 1 - Hub és Hub - Spoke 2) A topológia egyetlen gyenge pontja a központi szerver, mivel annak kiesése esetén a levelezés megbénulhat. Ezért több, fürtbe (klaszter) kötött hubszervert szoktak használni központként. 312 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI SMTP Az SMTP, vagyis az Internet levelezés lehetősége a router szerverfeladatba beépített. További beállítások (mint pl. relay host, levelezési korlátozások) a Konfiguráció (Configuration) címke Üzenetkezelés/Konfigurációk (Messaging/Configurations) nézetében a dokumentum szerkesztése után a Levéltovábbító/SMTP (Router/SMTP) címkén találhatók. Levelezéssel kapcsolatos hibák felfedezése és kezelésük Kézbesítésre vár (Waiting) levél: olyan levél, amelyik várakozik arra, hogy kézbesítődjön. Ez normális működés. Visszatartott (Hold) levél: Ha a szerver nem képes továbbítani a levelet valamilyen okból, a levél feladójának
küld egy sikertelen kézbesítés jelentést (Delivery Failure Report) erről. Sikertelen (Dead) levél: Ha a router nem képes a sikertelen kézbesítés jelentést (Delivery Failure Report) visszaküldeni a feladónak, a levél ebbe az állapotba kerül. Ezt a sor előtti piros stoptábla jelzi. A Domino Administrator Levelezés (Messaging) címkéjén belül találhatjuk a levelezéssel kapcsolatos hibakereső eszközöket. Ezek közül a fontosabbak: !" Levelezés felhasználói (Mail Users): Az összes felhasználó adatlapja levelezőszerver szerint. !" Szerver postaláda (server Mailbox): Itt találhatók a levelek ideiglenesen addig, amíg kézbesítésre nem kerülnek. Ha visszatartott (waiting) vagy sikertelen (dead) levél van és a problémát elhárítottuk, akkor megpróbálkozhatunk azok újbóli kézbesítésével a Felszabadítás (Release) gomb segítségével. !" Levelek továbbításának állapota (Mail Routing Status): Itt a két legfontosabb
adatot (sikertelen és visszatartott levelek száma) láthatjuk grafikus ábrázolással. !" Levéltovábbítási topológia (Mail Routing Topology): a szerveren futó Maps szerverfeladat által elkészített topológiaábrán jól láthatók az egyes szerverek közti kapcsolatok. !" Nyomkövető központ (Tracking Center): Az Új nyomkövetési kérés (New Tracking Request) gombbal leveleket kerestethetünk meg a rendszerben. A nyomkövetéshez szükséges, hogy a szerveren fusson a Üzenetkövetés (Message Tracking Collector, MTC) nevű szerverfeladat. További információk: !" A Szerver (Server) címke Figyelés (Monitoring) alcímkéjén a MAIL.Dead (sikertelen), MAILHold (visszatartott) és MAILWaiting (kézbesítésre vár) értékek láthatók szerverenként. !" A beállítási paraméterek a Konfiguráció (Configuration) címke Üzenetkezelés (Messaging) részében találhatók. !" Célszerű statisztikát beállítani a levelezésre úgy, hogy
bizonyos számú továbbíthatatlan levél esetén küldjön figyelmeztetést az adminisztrátornak. Ennek helye a 313 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI Konfiguráció (Configurations) címke Statistics & Events részének Monitors/Statistic nézete. 6.42 Replikáció Egy adatbázisról tetszőleges számú speciális másolat, úgynevezett replika-másolat készíthető. Ezeket a replikákat egymástól földrajzilag távol elhelyezkedő hálózati szerveren, illetve mobil munkaállomásokon helyezhetők el. Replikációnak hívjuk azt a folyamatot, amikor két replika másolat között az adatok módosításai kicserélődnek. Ez a csere részletesebben azt jelenti, hogy az egyik telephelyen lévő adatbázisban létrejött új, megváltoztatott, illetve törölt dokumentumok átkerülnek a másik telephelyre, míg az ottani új, megváltoztatott, illetve törölt dokumentumok az előző telephelyen is megjelennek. A replikáció eredményeként mindkét oldalon
található adatbázis egyforma lesz, tehát az összes változás kicserélődik. Figyelem! A replikációhoz mindkét oldalon kell replikamásolatnak lennie. Két adatbázis akkor replikamásolata egymásnak, ha a replikaazonosítójuk egyforma (a Notes munkaterületének Adatbázis/Tulajdonság ablakának második „i” feliratú fülén található). A fájl akár különböző nevű is lehet Replikamásolat létrehozása A Fájlok (Files) címkén található fájllistából jelöljük ki azokat, amelyeknek replikamásolatait szeretnénk létrehozni egy másik szerveren. Az Adatbázis/Replika létrehozása (Database/Create Replica(s)) eszköz választása után megadható az a szerver és alkönyvtár, ahová elhelyezzük a replikákat. A másolást az adminisztrációs folyamat végzi, a Szerver (Server) címke Analízis (Analysis) alcímkéjén belül az Adminisztrációs kérések (Administration Requests) Minden kérés szerver szerint (All Activity By Server) nézetében
nézhetünk utána a másolás eredményének. Replikáció ütemezésének beállítása A Konfiguráció (Configuration) címke Replikáció/Kapcsolatok (Replication/ Connections) részében állíthatjuk be a replikáció ütemezését. Itt ugyanolyan dokumentumot tölthetünk ki, mint a levéltovábbítás beállításánál. Ha a levélküldéssel egyidőben szeretnénk replikációt is beállítani, akkor a két szerver között elég egy Kapcsolat dokumentumot kitölteni. Az Alapok (Basics) és Ütemezés (Schedule) címkét a levelezéshez hasonlóan kell kitölteni, a Replikáció/Levéltovábbítás (Replication/Routing) címkén található paraméterek: 314 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI Replikációs feladat (Replication task) Replikáció, ha az adatbázis (Replicate databases of) Replikáció típusa (Replication type) Replikálandó fájlok/könyvtárak (Files/Directories to replicate) Replikációs időkorlát (Replication Time Limit) Ha Engedélyezve
(Enabled) állapotba tesszük, akkor a replikáció automatikus ütemezett végrehajtását engedélyezzük. Az adatbázisoknál megadható fontosság szerint csak az adott szintűeket replikálja. Itt kell megadni, hogy melyik szerver dolgozzon. Letöltés-letöltés (Pull Pull): Először a hívó szerver húzza magához a változtatásokat, majd utasítja a másik szervert, hogy az is húzza magához a változtatásokat. Ekkor mindkét szerver dolgozik. Kétirányú (Pull Push): Alaphelyzet. Kizárólag a hívó szerver dolgozik, vagyis előbb áthozza a változásokat, majd átküldi az itteni változásokat Csak letöltés (Pull Only): Csak a hívó szerver fogadja a változásokat. Csak feltöltés (Push Only): Csak a hívó szerver küldi a változásokat. Csak az itt megadott fájlok szerepelnek a replikációban. A replikáció az itt megadott időtartam után a replikáció üzemszerűen lezárul. A replikáció folyamata A replikáció folyamata kétirányú (pull-push)
beállítások mellett a következő az A és B szerverek között: 1. ‘A’ szerver hívja ‘B’ szervert 2. Megvizsgálódik, a ‘B’ szerverhez kapcsolódhat-e az ‘A’, vagyis van-e közös hitelesítőjük, illetve szerepel-e a Szerver dokumentum Szerverhozzáférés (Access Server) pontjánál. 3. A két szerver összehasonlítja az adatbázisaik listáját, hogy mik az azonos replikaazonosítójú adatbázisok. 4. Az egyes adatbázisoknál a Replikációs előzmények-ben (Replication History) található dátum és az aktuális dátum összehasonlítódik Csak azok az dokumentumok replikálódnak, amelyek e két időpont között keletkeztek, módosultak, vagy törlődtek. Így biztosítódik, hogy csak a változások replikálódjanak. 5. Először az ACL változások áthúzása történik, majd a tervek, és utána a dokumentumok az ACL-nek megfelelően Dokumentumtörlés esetén egy törlési csonk (deletion stub) marad az adatbázisban, hogy a következő
replikáció esetén – egy másik szerverről – ne replikálódjon vissza a dokumentum. Ezek a csonkok alaphelyzetben 90 nap múlva “takarítódnak” ki. A napok száma az 315 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI 6. Adatbázis/Tulajdonságok Replikációs beállítások gomb megnyomásakor megjelenő ablakban állítható (lásd 6.5 ábra) A replikáció végeztével egy bejegyzés kerül az egyes adatbázisok replikációtörténetébe. Ha valami miatt megszakad a replikáció, annál az adatbázisnál a következő replikációnál még a régi bejegyzés lesz, tehát onnan kell kezdeni a dokumentumok összehasonlítását. 6.5 ábra Helycsökkentő beállítások A hozzáférési listának megfelelő replikáció azt jelenti, hogy az ‘A’ szerver egy adatbázisból annyi változást kaphat, amennyi joggal az ‘A’ szerver a ‘B’ szerveren lévő adatbázis hozzáférési listájában (ACL) szerepel. Ha a hozzáférés az alábbi és kétirányú pull-push típus
van beállítva, akkor az A kezdeményezésére az egyik és másik irányban a következő eredményt kapjuk: ‘A’ szerver a ‘B’ ACL-jében Nincs hozzáférés (No access) Elhelyező (Depositor) B--->A irány A--->B irány (pull) (push) Az ‘A’ szerver nem fér hozzá az adatbázishoz. Nem történik semmi. Csak az ‘A’ szerver új dokumentumai jutnak át a ‘B’-re. ‘A’ szerver a ‘B’ ACL-jében Olvasó (Reader) B--->A irány (pull) Csak a ‘B’ szerverről jönnek át a változások. A--->B irány (push) Nem történik semmi. 316 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI Szerző (Author) Szerkesztő (Editor) Tervező (Designer) Kezelő (Manager) Szerverek között nincs értelme ennek a lehetőségnek, ugyanaz történik, mint az Olvasó esetben. A dokumentumváltozások A változások átterjednek az átterjednek az ‘A’-ra. ‘B’-re. A dokumentumváltozások A változások és a tervelemek átterjednek az ‘A’-ra. átmennek a
‘B’ szerverre. A dokumentumváltozások A változások, tervek és átterjednek az ‘A’-ra. jogosultságok is továbbítódnak a ‘B’-re. Általános beállítások A levelezésnél már említett csillagtopológia esetén a replikációtípus szokásos beállítása spoke szervereknél kétirányú (pull-push), így csak a spoke dolgozik a replikációknál, a hub szerver pedig pihenhet (vagyis szolgálhatja ki a spoke-okat). Általános adatbázisok hozzáférési listái az egyes szerverek esetén: Adatbázis típusok Csak olvasásra szánt adatbázis esetén, pl. útmutatók Teljesen replikálandó adatbázisok, pl. vitafórum Ha a spoke a tervezők szervere A hubszerver a spoke ACL-jében Kezelő A spokeszerver a hub ACL-jében Olvasó Kezelő Szerkesztő Kezelő Tervező A replikáció és levelezés időzítésénél a szokásos beállítás: !" Óránkénti (vagy félóránkénti) beállítással: levelek továbbítása !" Négyóránkénti
beállítással: names.nsf és egyéb fontos adatbázisok replikációja !" Éjszakai beállítással: maradék adatbázisok replikációja 6.43 Replikációs konfliktus Ha ugyanazt a dokumentumot egyidőben ketten megváltoztatják és elmentik, akkor a második mentésnél konfliktus dokumentum jön létre, amely a nézetben Replikációs vagy mentési konfliktus (Replication or Save conflict) sorként jelentkezik (lásd 6.6 ábra) 6.6 ábra: Replikációs vagy mentési konfliktus 317 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI Ez volt az ún. mentési konfliktus Ha két egymással replikáló adatbázisban változik ugyanaz a dokumentum a replikációs időn belül, akkor replikációs konfliktusról beszélünk. Bármely konfliktust kézzel kell az adminisztrátornak, vagy minimálisan szerkesztő és törlési joggal rendelkező személynek kijavítania úgy, hogy a második dokumentumból kell a változtatásokat beírnia az első dokumentumba, majd a második dokumentumot
pedig ki kell törölnie. Ha egy adatbázisban sok konfliktus dokumentum van, akkor az adatbázis megtervezését kell jobban átgondolni, pl. csak néhányan szerkeszthessenek egy dokumentumot 6.44 Adminisztrációs folyamat Az adminisztrációs folyamat (Administration Process) a 4-es verziótól kezdve jelent meg szerverfeladatként azért, hogy az adminisztrációs feladatok egyszerűen elvégezhetők legyenek. Például egy személy átnevezése esetén a nevet az összes csoportban, az adatbázisok hozzáférési listáiban és a dokumentumon belül a szerző mezőkben is meg kell változtatni. Ezeket végzi el helyettünk az adminp nevű folyamat Előfeltételek: !" Léteznie kell a certlog.nsf adatbázisnak !" Az összes adatbázis (a Címjegyzék is) esetén be kell jelölni az adminisztrációs szervert. Csak azokon az adatbázisokon működik az adminp, amelyeknél ez jelölve van. Ehhez az Adminisztrátor Fájlok (Files) címkéjén jelöljük ki az összes
adatbázist, majd Adatbázis/Hozzáférési lista kezelése (Database/Manage ACL) eszköznél az Egyéb (Advanced) lapon belül az alábbiakat állítsuk be: A beállított adminisztrációs szerver módosítása (Modify Administration Server setting), a szervernév, továbbá Az Olvasó és Szerző típusú mezők módosítása (Modify fields of type Reader or Author) paramétereket. 6.7 ábra Az adminisztrációs folyamathoz szükséges beállítások 318 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI Felhasználók átnevezése Az adminisztrátornak a Címjegyzékben (Személyek és csoportok címke, People & Groups) a személy dokumentumát kijelölve a Személyek/Átnevezés (People/Rename) eszközt használjuk, majd az Általános név megváltoztatása (Change Common Name) gombot nyomjuk meg. A megfelelő hitelesítőfájl megadása után a név új paraméterei megadhatók Miután a személy az átnevezés után először bejelentkezett, egy ablakban dönthet arról, hogy
elfogadja-e az új nevét. Ezután indul az adminisztrációs folyamat: átnevezés a Címjegyzékben, a csoportokban, ACL-ekben, stb. A teljes folyamatot a Szerver/Analízis (Server/Analysis) címkén az Adminisztrációs kérések (Administration Requests) Néváthelyezési kérések (Name Move Requests) nézetében követhetjük végig. A felhasználó, vagy szerver más szervezeti egységbe helyezése is az admisztrációs folyamat segítségével történik. 6.5 Amit egy adminisztrátornak még tudnia kell 6.51 Szerver konzol A Szerver/Állapot (Server/Status) címkével jelzett lapon láthatjuk a szerver legfontosabb jellemzőit, vagyis azt, hogy milyen szerverfeladatok futnak és mely felhasználók vannak bejelentkezve az adott szerverre. A Notes szerver DOS-os stílusú képernyőjére a Konzol (Console) nyomógombbal kapcsolhatunk át. A szerverfeladatok megtekintéséhez itt a sh ta (show tasks) parancsot kell az alsó sorba írni, míg a bejelentkezett felhasználók
listáját az sh us (show users) paranccsal nézhetjük meg. A Feladat/Start (Task/Start) illetve Stop eszközökkel új feladatokat indíthatunk, illetve futókat állíthatunk meg. Ennek konzolbeli megfelelője a load feladatnév, illetve a tell feladatnév exit. A fontosabb szerverfeladatok: Szerverfeladat Administration Process (Adminisztrációs folyamat) Agent manager (Ügynökkezelő) Calendar Connector Konzolbeli név AdminP AMgr Calconn Magyar név és leírás * Az adminisztrációs folyamatokat könnyítő eszköz A Az adatbázisügynököket futtatja. A A Cataloger Catalog A szabadidőinformációs kéréseket dolgozza fel. Az adatbáziskatalógus frissítését végzi. Database compactor Compact Adatbázisok tömörítését végzi. N 1 Database fixup Fixup A hibás adatbázisok javítását végzi. N Designer Design 1 Event Monitor Event Az adatbázisokat a sablonok alapján frissíti. Szervereseményeket figyel és tárol. 319 N 6.
RENDSZERADMINISZTRÁCIÓ ALAPJAI HTTP Server HTTP Indexer Updall POP3 Server POP3 A Domino szerver webszerverként is üzemelhet. A nézet és teljes szöveges index frissítését végzi. A Domino szerver POP3 szerverként üzemelhet. N 2 N Replicator Replica Ütemezés szerint a replikációt végzi. A Reporter Report Statisztikákat összesít. N Router Router Leveleket továbbítja a szerverek között. A Statistics Statlog A naponta gyűjtött statisztikákat a logfájlba írja. 5 Stats Stats Statisztikákat generál. A Web Retriever Web A beépített böngészőhöz a HTTP lapokat Notes dokumentumokká konvertálja. N * oszlop értékei: A: automatikusan minden szerverindításkor (notes.ini-ben ServerTasks=), N: nem indul, csak külön indításra, 1,2,5: meghatározott órakor indul hajnalban (ServerTasksAt1,2,5=) További fontos szerverparancsok: Konzolon beírva drop all sh disk c (show diskspace c) sh sch (show schedule) pull szervernév vagy
push, vagy repl (replicate) route szervernév Az Adminisztrátor felületen Szerver címke Felhasználó/Drop Fájlok címke Lemezterület Replikáció címke Replikáció ütemezése A. 1 1 1 1 Eredmény az összes felhasználói kapcsolatot megszüntethetjük a C: drive szabad lemezterülete a replikáció és levéltovábbítás ütemezése replikáció megadott formájának kezdeményezése a megadott szerverrel levéltovábbítás a megadott szerver felé 320 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI sh port all (show port all) start port xxx vagy stop port xxx e (exit) vagy q (quit) restart Szerver címke Szerver/Portok beállítása Szerver címke Szerver/Port leállítása a portok listája fontosabb paraméterekkel együtt megadott portok engedélyezése vagy tiltása Szerver címke Szerver/Kikapcsolás szerver leállítása szerver újraindítása 6.52 A Domino szerver mentése (backup) A Domino szerverről mentési szempontból azt kell tudni, hogy a szerveren
található .NSF kiterjesztésű (vagyis az adatbázis-) fájlokat folyamatosan nyitva tartja. Ez egyrészt azt jelenti, hogy a fájlrendszert kezelő programokkal adatbázisokat nem törölhetünk, viszont ugyanez az oka annak is, hogy az egyszerűbb backup programokkal (mint pl. az ntbackup) a Domino szerver nem menthető. Megoldási lehetőségek: !" Léteznek olyan backup programok, amelyek nyitott fájlt is tudnak menteni. Például ilyen az Arcada/Seagate/Veritas Backup Exec, a Cheyenne Arcserve for Lotus Notes Agent. !" Ideiglenes megoldásként használhatjuk azt is, hogy a szervert munkaidőn kívül lezárjuk, mentünk (akár ntbackup-al is), majd újra elindítjuk. Ezt segíti, hogy az NT-n a szervert szervízként is indíthatjuk és zárhatjuk le (net start/stop „Lotus Domino Server”) !" Új Notes funkció a tranzakciós naplózás (transactional logging) lehetősége. Ezt a szerverfunkciót a szerver űrlapján lehet beállítani, ezután az 5-ös
formátumú fájloknál (régebbi verzióknál nem!) az egyes adatbázisesemények (mint új dokumentum létrehozása, vagy egy régi megváltoztatása) folyamatosan mentődnek a tranzakciós naplóba. Egyszer kell csak az adatbázist elmenteni, majd utána már csak a naplókat kell, így egy mentéskor nem a teljes adatbázist kell menteni, hanem csak a legutolsó mentés óta keletkezett tranzakciófájlokat. A tranzakciós naplóról részletesebben a Súgóban olvashat. Milyen fájlokat mentsünk? !" !" !" !" ID fájlok (a szerver- és hitelesítőfájlokat is) a data alkönyvtár tartalmát, különös tekintettel a következő fájlokra: names.nsf, desktop.dsk, mailbox, lognsf a rendszerkönyvtárból (pl. winnt, vagy a Notes programkönyvtárából): notesini az összes fontos adatbázist, legyen az a data alkönyvtárban, vagy máshol 6.53 Adatbázisfájlok elhelyezése más lemezmeghajtón A Notes azokat a fájlokat látja (vagyis jelennek meg az
Adatbázis megnyitása ablakban), amelyek a data alkönyvtáron belül helyezkednek el a fájlrendszerben. Sokszor szükség 321 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI van rá, hogy máshol elhelyezkedő fájlokat is láttassunk itt. A megoldás egy gyűjtőlánc létrehozása. Az Adminisztrátor felületének Fájlok (Files) címkéjén használjuk a Gyűjtő/Új lánc (Folder/New link) eszközt. !" Egyrészt meg kell adni a lánc nevét, vagyis hogy a data alkönyvtár milyen alkönyvtáraként látszódjék a lánc. Adjuk a temp nevet a láncnak !" Az elérési úthoz (path) kell megadni a tényleges könyvtárnevet teljes formátumban, legyen ez a c: emp. !" A továbbiakban megadhatjuk azt is, hogy ki férjen hozzá az adott lánchoz; más nem láthatja azt az adatbázismegnyitás ablakában sem. Ha üresen hagyjuk, akkor bárki hozzáférhet a lánchoz. Példánkban ide tegyük be az Administrators csoportot 6.8 ábra Új lánc létrehozásának ablaka Az OK gomb
megnyomására létrejön a data alkönyvtárban egy .DIR kiterjesztésű szövegfájl a data alkönyvtárban, a fenti tartalommal. Példánkban a tempdir fájl tartalma a c: emp szöveg, majd egy új sorban az Administrators szöveg lesz. (Ezt a dir fájlt egy szövegszerkesztővel is megalkothattuk volna.) Ezután a lánc aktív lesz, vagyis megtekinthetők az adott alkönyvtárbeli adatbázisfájlok. 6.54 Több szervezet összekapcsolása Adminisztrátorként feladatul kaphatjuk, hogy több Notes rendszert össze kell kapcsolnunk. Ennek oka lehet az, hogy a két cég a Notes levelezést szeretné egymás közt használni, és 322 6. RENDSZERADMINISZTRÁCIÓ ALAPJAI nem akarja az Internetet bevonni. A Notes fejlett biztonsági rendszere miatt a logikai összekapcsoláshoz a kereszthitelesítést kell használnunk. Itt a főbb pontokat láthatjuk: !" Azonosítófájl (ID) biztonsági másolatának elkészítése !" Az Administrator Konfiguráció (Configuration)
lapján válasszuk a Hitelesítés /Azonosító tulajdonságai (Certification/ID Properties) eszközt. !" Adjuk meg azt az azonosítófájlt, amilyen szinten a szervezetünkbe beengedést adunk. Ha csak egy szerverünket szeretnénk láttatni a másik szervezettel, akkor a server.id-t adjuk meg, ha pedig a teljes szerverparkunkat, akkor a megfelelő cert.id-t !" A Beállítások (More Options) részen található a Biztonsági másolat (Create Safe Copy) gomb. Itt adjunk pl a safeid nevet a fájlnak !" A biztonsági másolat fájlt juttassuk el a másik szervezet megfelelő adminisztrátorának, míg tőle is kapunk egy hasonló biztonsági másolat fájlt. !" A kereszthitelesítés létrehozása !" A Konfiguráció (Configuration) címkén válasszuk a Hitelesítés/ Kereszthitelesítés (Certification/Cross Certify) eszközt. !" Adjuk meg a saját szervezetünk azon hitelesítőfájlját, amelyhez tartozó személyek vagy szerverek el szeretnék
érni a másik szervezetbeli szervert. !" Adjuk meg a kapott safe.id-t !" A megjelenő ablakban finomíthatjuk a beállításokat, majd a Kereszthitelesítés (Cross Certify) gombbal elmenthetjük a kereszthitelesítést a Név- és Címjegyzékünkbe. !" Ha mindkét oldalon elkészült a kereszthitelesítés, akkor a Konfiguráció címke Üzenetkezelés/Kapcsolatok (Messaging/Connections) nézetében a Kapcsolat hozzáadása (Add Connection) gombbal definiáljuk a kapcsolat módját, ütemezését. Ezen pontok mindkét oldalon történő végrehajtása esetén a két külön szervezetben lévő felhasználók küldhetnek egymásnak levelet, vagy pedig két – külön szervezetbeli – szerver replikálhat egymással. 323 TÁRGYMUTATÓ Tárgymutató @ @Attachments, 250 @Command, 261 @Contains, 239 @Created, 243 @DbColumn, 252 @DbLookup, 254 @Do, 238 @DocumentUniqueID, 251 @Explode, 246 @False, 237 @függvények, 236 @If, 237 @Implode, 247 @Left, 240
@PostedCommand, 262 @Prompt, 257 @SendMail, 174 @Text, 245 @TextToNumber, 246 @Trim, 242 @True, 237 @UserName, 248 beágyazott szerkezet, 208 bemenet átalakítása, 88 bemenet érvényesítése, 88 biztonsági másolat, 331 bővülő kulcsszólista, 51 C címjegyzék, 305 csillagtopológia, 320 D dátum, 86 dátum/idővel kapcsolatos függvények, 242 Designer felület, 17 Directory, 305 dokumentumok verziókövetése, 175 domain, 305 Domino Administrator telepítése, 312 E ellenőrzött hozzáférésű szakasz, 152 elrejtés, 99 ENVIRONMENT, 255 A ACL, 191, 226 adatátalakító függvények, 245 adatbázis: használata, 59; másolás, 12; névjegye, 59; új, 12, 61 adatok kezelése, 251 Address Book, 305 adminisztrációs felület, 312 adminisztrációs folyamat, 326 adminp, 326 alkalmazás, 8 állandók, 230 azonosító fájl (ID fájl), 307 B backup, 329 F felbukkanó kiszámított szöveg, 159 felbukkanó szöveg, 157 felhasználói adatok bekérése, 257 felhasználók
átnevezése, 327 felhasználók regisztrálása, 316 feltételkészítő, 48 feltételkezelés, 237 G gomb, 159 gyűjtők, 125 TÁRGYMUTATÓ H M hierarchikus név, 305 hitelesítők, 307 HL, 191, 226 hozzáférési lista, 191, 226 hub-and-spoke, 320 megjelenéshez számított mezőtípus, 92 mentési konfliktus, 326 mező, 23; alapértelmezett érték, 31; bemenet átalakítása, 32; bemenetet érvényesítése, 32; dátum/idő, 164; dátum/idő típusú, 86; Jelszó típus, 162; Képlet típus, 162; kulcsszó mezőtípus-csoport, 26; létrehozása, 23; nevek típus, 72; Olvasó típus, 163; szám típus, 25; számított, 90; Szerző típus, 163; szöveg típus, 25; típusai, 24; tulajdonság, 23 mezőérték öröklése, 82 mezők automatikus frissítése, 93 mezők frissítése kulcsszó változásakor, 102 művelet, 52, 75, 231; egyedi, 53; létrehozása, 52; osztott, 56 műveleti forrópont, 161 műveletsor, 57 I idő, 86 ikon tervezése, 58 J Java kisalkalmazás, 220
JavaScript használata lapok generálásakor, 211 jelölőnégyzet, 28 jogosultság, 191 K kapcsolat dokumentum, 319 kategória, 43 kategorizált nézet létrehozása, 43 kép, 20 képerőforrás, 203 képletek, 230 keresőoldal, 224 keretkészlet, 211 kiértékelési sorrend, 233 kiszámított mező, 91 kliens telepítése, 318 kulcs létrehozása, 169 kulcsok, 168 kulcsszavak, 234 N naptár, 117 navigátorok, 135 Név- és Címjegyzék, 305 nézet, 33; alapértelmezés, 110; létrehozása, 104; másodlagos név, 42; naptár, 118; oszlop, 36; sorba rendezés, 39; típus, 35; törlése, 51; tulajdonságai, 50; új, 34 nézetnavigációs eszközök, 217 NNN, 304, 318 O L Olvasó típusú mező, 163 öröklődés, 83 összekapcsolódó űrlapok csoportba foglalása, 185 összezárható szakasz, 149 oszlop: cseréje, 44; elrejtése, 121; ikonok megjelenítése oszlopban, 113; lánc forrópont, 161 lap, 207 Létrehozáskor számított mezőtípus, 91 levél küldése, 172, 259
levelezés elmélete, 318 levéltovábbító, 318 listakezelés, 246 325 TÁRGYMUTATÓ méretének megváltoztatása, 38; sorba rendezés, 39; új, 38 osztott mező, 143 szöveg, 18; statikus, 18, 65; tulajdonságok, 18 szövegalakító függvények, 238 P T parancsok, 261 párbeszédpanel-lista, 27 precedencia, 233 táblázat, 65, 177; cellák kerete, 180; elrendezése, 178; létrehozása, 65; margó, 183; sorainak tulajdonsága, 183; színe, 69 tabulátor, 177 tartomány, 305 telepítés: Administrator, 312; kliens, 318; szerver, 309 titkosítás, 168, 171 titkosító kulcs, 169 R Replikáció ütemezés, 323 replikációs konfliktus, 326 Replikamásolat, 322 részűrlap, 146; beillesztése, 148; törlése, 148 Rich Text, 29 Router, 318 U ügynök, 126; jogosultságok beállítása, 132; létrehozása, 127; mely dokumentumokon fusson, 129; mikor fusson, 128; osztott, 128; személyes, 128; ütemezés, 130 űrlap, 16; mentése, 21; új űrlap létrehozása, 17 űrlap
eltárolása a dokumentumban, 173 utolsó ellenőrzések, 103 S sablon, 12 safe.id, 332 segédnézet, 107 SELECT, 235 sikertelen levél, 321 SMTP, 321 súgóleírás mező, 157 szakasz, 149 számítás érvényesítés után, 92 számított mezők, 91 számtani függvények, 244 szerkeszthető mező, 91 szerkezet, 204 szerver: feladatok, 328; konzol, 327; mentése, 329; parancsok, 329; regisztrálása, 315; telepítése, 309 szervezet összekapcsolása, 331 szervezeti egység hitelesítő, 314 Szerző típusú mező, 164 V válasz űrlapok, 76 válaszdokumentumok megjelenítése, 108 választógomb, 29 változók, 230 vonalzó, 68 W webböngészőben való megtekintés, 197 webes keresés, 223 webes tervezési elemek, 195 326