Od pocetka je Microsoft gurao u svoje aplikacije i dodatne stvari koje navodno "olaksavaju zivot". Medju njima je i Visual Basic for Applications (VBA) koji je upakovan u MS Ofiice od verzije 5 koja je izasla 1993. godine.
Najkoriscenij je u MS Excel-u, te ako ste i obicni korisnik ovog progama, sigurno se koristili i VBA, ali nesvesno. Sama kalkulacija sa izracuvanje sume skupa celija je VBA (funkcija Sum).
Kasnije se VBA ustalio i u ostalim MS aplikacijama, pa i u sam MS Visual Studio. Koristio sam ga dosta za pravljenje izvestaja, pomaze mnogo u smanjenju resursa "sa druge strane" (citaj baze podataka) jer ima sve agregatne funkcije (sum, count, avg...) koje ima i bilo koja verzija SQL-a.
Stoga je lakse ne opterecivati RDBMS (Relation DataBase Managment System), vec sva izracunavanja raditi na nivou svoje aplikacije, u ovom slucaju sa serverske strane.
Takodje, Progam Flow funkcije (programskog toka) olaksavaju posao, neizmerljivo.
Na primer, imao sam izvestaj sa rezultujucom tabelom (DataSet) koja daje mesece, ali kao brojeve. Kako bi izvestaj bio dopadljiviji, morao sam da prikazujem mesece po svim imenima. Za ovo sam koristio funkciju Choose, i kao izraz (Expression) u textbox polje sam uneo:
=Choose(Field!Mes.Value, "Jan", "Feb", "Mar"...)
(tri tacke znaci da ima jos, ali me mrzi ka kucam)
Ova funkcija uzima vrednost polja (prvi parametar) koji predstavlja index niza koji je unesen, a to su meseci (kao drugi parametar) i vraca vrednost tog clana, tj vraca naziv meseca. Napomena da ovde niz krece od 1, a ne od 0.
Drugi parametar moze biti bilo koji objekat.
Ok, konkretno u ovom slucaju sam mogao da koristim i funkciju Month(Field!Mes!Value), s tim sto se mora podesiti Report na zeljeni jezik, ako ne zelimo da imamo engleske nazive meseci.
Drugi primer je funkcija Iif (da, ima dva slova I, malo i) koja predstavlja svojevstan if-else programski blok. Imao sam takodje u pomenutoj tabeli vrednosti za pol, te je 1 predstavljalo muski, a broj 2 je predstavljao zenski. Te sam uradio sledece:
= Iif(Field!Pol.Value=1, "Muski", "Zenski")
Ovim sam dobio da mi se u polju prikazuju vrednosti "Muski" ili "Zenski" u zavisnosti da li je uslov iz prvog parametra ispunjen. Ako je uslov tacan (true) ispisuje se drugi parametar, ako uslov nije tacan, ispisuje se treci parametar.
Ovu funkciju sam koristio i za jos neke stvari, kao na primer, da pitam da li postoji unet parametar na nivou Reporta. Kao izraz za filter tabele sam uneo
Field!Atribut.Value = Iif(IsNothing(Parameter!Atrubut.Value), Field!Atribut.Value, Parameter!Atrubut.Value)
Funkcija IsNothing (ustvari IsNull) takodje vraca true ili false u zavisnosti da li je uneti parametar null ili ima neku vrednost (na primer nula ;)). Ako Report parametar postoji, uzmi ga i prikazi samo one zapise koji su mu jednaki, ako ne postoji, prikazi sve zapise u tabeli iz DataSet-a.
Posto ovo nije pravi If uslov kao u klasicnom programiranju, te nema Else, prilikom postavljanja vise uslova, uzima se u obzir funkcija Switch. Ovo sam koristio kada sam prikazivao sumarne podatke (konkretno medicinski slucajevi za bolesti) po polovima, ili ukupne. Pol se bira kao parametar izvestaja i ima vrednosti 0, 1 i 2. Nula oznacava da se prikazje izvestaj za oba pola, 1 je muski a 2 je zenski pol. U ovom slucaju sam u DataSet-u imao kolonu Muski i kolonu Zenski sa ukupnim brojem slucaja za pojedinu bolest. Kao izraz za polje u tabeli sam koristio:
= Switch(Parameter!Pol.Value=0, Field!Muski.Value+Field!Zenski.Value, Parameter!Pol.Value=1, Field!Muski.Value, Parameter!Pol.Value=2, Field!Zenski.Value)
Ova funkcija radi kao i klasican Switch - Case u programskim jezicima. Prvi parametar je uslov, drugi je izraz koji se izvrsava ako je uslov zadovoljen, treci parametar je drugi uslov, cetrvrti je izraz koji se izvrsava ako je uslov iz treceg parametra zadovoljen i tako dalje, respektivno.
Ovo su sve tri funkcije toka koje se mogu naci pri dizajniranju RS izvestaja.
Ne verujem da VBA olaksava zivot, ali olaksava da se neki zadaci izvrse na jednostavniji i brzi nacin, i da izbegnete odgovor "ne moze" na jos jedno u nizu klijentovih pitanja.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment