A hatalmas adatmennyiség problémája – felhasználói szemmel

Posted by | · · · · · · | Szoftverfejlesztés | Nincs hozzászólás a(z) A hatalmas adatmennyiség problémája – felhasználói szemmel bejegyzéshez

Az a rengeteg adat…

data-search
Az általunk írt üzleti webalkalmazásokban, de talán általánosságban is elmondható, hogy az alkalmazás fő célja az, hogy a hozzá kapcsolt adatbázisban található rengeteg adat rendszerezését, karbantartását és lekérdezését megkönnyítse a felhasználó számára. Tipikus feladat a felhasználó számára a hosszú űrlapok kitöltése, melyet validálással segít (vagy éppen bosszant) a rendszer, de számtalanszor futtatunk le manuálisan vagy automatikusan több ezer soros adat importokat, illetve adat manipulációkat végzünk bizonyos logikák szerint. Egy a lényeg, hogy mindezek után megállíthatatlanul újabb és újabb rekordok keletkeznek a már így is hatalmas méretű tábláinkban.
A felhasználó számára viszont ezeket valamilyen formában meg kell tudnunk jeleníteni; ezen próbál segíteni a számos Vaadin UI komponens között fellelhető táblázat komponens (Table). Ezek a táblázatok kiemelten fontos szerepet töltenek be alkalmazásaink UI rétegében, tulajdonképpen ezek segítségével férhetünk hozzá az előbb említett adat manipulációk végeredményéhez.

A szűrő funkció szükségessége

A programozó valamilyen módon meghatározza az egyes felületeken lévő tábla adathalmazát, azonban így is gyakran előfordul, hogy a felhasználó több ezer rekorddal találja szembe magát. Szükség van tehát a felhasználó által könnyen kezelhető szűrő funkcióra, hogy csak azok a sorok legyenek szem előtt, amelyekre tényleg szükség van. Két -féle módon lehet ezt megvalósítani: a táblázattól függetlenül elhelyezkedő szűrő panel segítségével a bonyolultabb szűrésekhez; vagy a táblázatban lévő, az oszlopok fejlécében elhelyezkedő szűrő mezőkkel. A legtöbb esetben egyszerűbb és elegendő az utóbbi. A gyári Vaadin komponens sajnos ezt nem támogatja.
filtering-data

FilteringTable addon

A Vaadin addonok között azonban megtalálható a FilteringTable névvel ellátott addon, mely pont ezt a hiányosságot hívatott orvosolni. Segítségével automatikusan generáltathatjuk ezeket a szűrő mezőket, melyek a mező típusától függően különböző funkcióval vannak ellátva. A FilteringTable a gyári Table komponenst egészíti ki ezzel a hasznos funkcióval, így a felhasználónak immár öt -féle módon van lehetősége táblázata testreszabására:

  • szűrhet, akár egyidejűleg több mező szerint
  • rendezhet növekvő/csökkenő sorrendben
  • átrendezheti az oszlopok sorrendjét
  • átméretezheti az oszlopokat
  • eltüntetheti/megjelenítheti a kiválasztott oszlopo(ka)t.

filtertable_1_a

Elég ez?

Ez tényleg minden igényünket kielégíti. Vagy nem? Mi ennél tovább mentünk. Mi lenne, ha ezeket a személyre szabott beállításokat a felhasználó el is tudná menteni úgy, hogy a következő bejelentkezéskor, vagy csak az oldal frissítése után is a táblázat a kívánt állapotban jelenjen meg? Sőt, még jobb lenne, ha több ilyen állapotot – profilt – is tudna kezelni. Hasznos lenne? Elképzelhető.
Vegyünk például egy rendeléseket tartalmazó táblázatot. Az ügyintéző olykor arra kíváncsi, hogy melyek az új, még feldolgozatlan rendelések, olykor pedig arra, hogy melyek a már régóta teljesített, de még lezáratlan rendelések vagy csak arra kíváncsi, hogy melyek vannak hozzá rendelve. A szűrésekkel, rendezésekkel ezek az információk elérhetők lesznek, csak nem éppen felhasználóbarát akkor, ha az oldal nincs megtámogatva különálló táblázatokkal a kívánt szűréseknek megfelelően. A példa talán nem a legjobb, de gondolhatunk akár egy levelező kliensre is, ahol leveleinket csoportosíthatjuk bizonyos szempontok szerint, ami a tulajdonképpen a lista szűrésének felel meg, ahol a csoportok jelen esetben a szűrő profilok.

Kitűzött célok

Az ötlet előállt, de hogyan lehetne ezt, mind felhasználói, mind fejlesztői szemmel nézve használhatóan megvalósítani? Valahova el kellene rejteni a kívánt funkcióhoz szükséges beviteli mezőket, úgy, hogy a táblázat elrendezése, a layout ne változzon, tehát ne kelljen emiatt minden táblázat mellé plusz mezőket felvenni. A legjobb az lenne, ha már a jelenleg használt FilteringTable komponens valahogy tudná ezt. Meg is találtuk a kívánt helyet. A gyári Table már tartalmaz egy kis lenyitható „pöcköt”, amelyre kattintva lenyílik egy kis panel, hogy az oszlopokat tudjuk megjeleníteni/eltüntetni. Valahogy ide kellene még berakni ezeket az extra mezőket is.
A megoldás: Vaadin Component Extension. Ilyen módon egy meglévő komponenst lehet „felokosítani” úgy, hogy annak kódjába nem nyúlunk bele. Előnye, hogy egy komponenst több különböző extension-el is kiegészíthetünk, melyek más-más funkcióval képesek felruházni azt. Illetve csak ott használjuk, ahol szeretnénk, nem lesz minden táblázatunk ilyen „okos” 🙂
Ha már nekiállunk fejleszteni, rakjunk bele még valamit. Lehessen „funkciókat” hozzáadni szerver oldalon, melyek a lenyíló panelban is megjelennek és a kiválasztott funkcióra kattintva az adott implementáció fusson le. Hogy mi, az már a kreativitásunktól függ.
Összeszedtük tehát, hogy miket is szeretnénk elvárni ettől az extension-től:

  • táblázat állapotának mentése profilokba (szűrés, rendezés, oszlopok sorrendje, láthatósága, szélessége)
  • alapértelmezett profil beállítása, kikapcsolása
  • profil törlése
  • táblázat eredeti állapotának visszaállítása
  • funkciók hozzáadása szerver oldalon
  • alapértelmezett funkció beállítása szerver oldalon
  • jelenlegi oszlop „kapcsolgató” funkció megtartása

Folytatás következik…

Következő blogomban fogom bemutatni és részletezni az e célra lefejlesztett FilterTableState Vaadin extension-t, mely az itt felsorolt követelményeknek teljességgel eleget tesz.


No Comments

Leave a comment