Lotus Notes
pod kategorijami: slovenija drzava software lotus ibm

Če ste se kdaj pogovarjali o programski opremi s kom, ki je zaposlen v državni upravi, zna biti, da je jamral nad Lotus Notes. Lotus Notes, ki se danes pravzaprav imenuje IBM Notes, je v prvi vrsti ogrodje za izdelavo aplikacij, pride pa z že narejeno aplikacijo, z e-poštnim odjemalcem.

Treba je priznat, ta e-poštni odjemalec ima svoje hibe. Uporabniški vmesnik je štorast in od uporabnika zahteva veliko preveč zamudnega klikanja po ikonah in menijih, da bi ga lahko sprejel za svojega. To niti ne bi bilo tako problematično, če bi si lahko nastavil bližnjice za dostop do operacij, npr. do arhiviranja, ki je zakopan tri nivoje globoko v meniju.

Hibam navkljub je Notes zanimiva platforma. Znotraj posamezne Notes baze so podatkovna baza, programska koda aplikacije in varnostni model. Podatkovna baza je dokumentna, brez sheme, podobno kot MongoDB ali še bolje CouchDB, ker Notes tako kot CouchDB podpira tudi replikacijo, konflikti med različnimi verzijami dokumentov pa se enako rešujejo z logiko znotraj aplikacije. Poleg podatkov je v posamezni kopiji, tudi replicirani, še aplikacija (logika) ter kontrola dostopov. Vse to je zapakirano v .nsf datoteko.

Ena večjih težav pri Notes je, da nima mehanizma, s katerim bi bila aplikacija obveščena o spremembi dokumenta oz. o prejeti novi različici dokumenta, ki je bila spremenjena v drugi kopiji podatkov. To se rešuje z agenti, programi, ki se lahko poganjajo periodično ali na ročno zahtevo. Ker se poganjajo periodično, to pomeni, da je uporabniška izkušnja aplikacije neprijetna, ker se nekatere spremembe opazijo šele po naslednjem zagonu agenta. Ker se agent poganja periodično in ker se lahko zapelje čez celotno bazo, to ob večji bazi lahko traja kar nekaj časa, odvisno pa je seveda tudi od opravila, ki ga agent izvaja.

Ker je Notes ogrodje oz. framework, namenjen poslovni rabi, je za rabo na voljo kar nekaj različnih načinov za uporabo ogrodja: od posebnega formula jezika, C in C++ APIja, Windows COM vmesnika do XPages v Javi in JavaScriptu. Sam sem bil zainteresiran branje podatkov iz Notes, da bi jih lahko potem obdeloval zunaj Notesovega okolja, z drugimi orodji.

Za kratek ilustrativen primer bom pokazal, kako programsko prešteti e-pošto v mapi Prejeto. Za to bom uporabil Python, ki se z Notes pogovarja preko COM vmesnika.

Da lahko Python dostopa do COM vmesnika je potrebna namestitev 32 bitnega Pythona in razširitve za Python za Windows, pywin32.

Tako izgleda skripta prestej_posto.py, ki izpiše število sporočil, ki jih ima uporabnik v mapi Prejeto. Da deluje, je potrebno nastaviti geslo in pot do baze, v kateri Notes hrani e-pošto.

# coding: utf-8
from win32com.client import Dispatch

GESLO = 'geslo'
BAZA = r'C:\Program Files (x86)\IBM\Lotus\Notes\Data\mail\email_database.nsf'

# odpri Notes okolje
session = Dispatch('Lotus.NotesSession')
session.Initialize(GESLO)

# odpri bazo
db = session.GetDatabase("", BAZA)
view = db.GetView('$Inbox')

# prestej dokumente
count = 0
doc = view.GetFirstDocument()
while doc is not None:
    count += 1
    doc = view.GetNextDocument(doc)

print u'Število sporočil v Prejeto:', count

Število vseh sporočil v mapi, ne zgolj neprebranih, je ena od stvari, ki jih v Notes pogrešam. Pravilno delovanje skripte pa lahko preverite tako, da odpreste mapo Prejeto, označite vsa sporočila s Ctrl-A, ob tem pa bo Notes ob dnu izpisal število označenih dokumentov, ki se mora ujemati z izpisom skripte.

To je le ena zelo preprosta skripta. Za kake kompleksnejše operacije je potrebno prebrati nekaj dokumentacije. Za dokumentacijo je koristen OLE/COM Viewer (oleview.exe), ki pride poleg Visual Studia, in pa "C API reference", ki je dostopen na IBMovi strani, seveda - kot nsf datoteka. Posebej uporabna je funkcija za iskanje po vsebini, FTSearch.

S tem se da prebirati polja iz dokumentov, shranjevati priponke, pošiljati pošto, ipd. Možno je seveda tudi pisati v Lotus Notes bazo, če imate ustrezne pravice, ampak temu se sam izogibam, ker nisem najbolje seznanjen z delovanjem aplikacij, tako da ne bi želel, da pride do situacije, kjer bi v bazi nastal dokument, ki ga aplikacija ne bi znala pravilno upoštevati. Ker je Notes ogrodje, namenjeno izgradnji aplikacij po naročilu, ima zelo obsežen in detajln programski vmesnik. Zato je zelo lahko pridobiti informacije iz Notes brez večjega tveganja, da bi pri tem kaj polomil.

~~

Še dva kratka članka v angleščini, namenjena uvodu v delo z Lotus Notes in Pythonom