Esetenként szükség lehet egy lista egy másik lista elemen belüli megjelenítésére. Ilyen például a szervizkönyvben a gépjármű listán belüli bejegyzés lista. Ez alapján egy autó adatai alatt láthatjuk a szerviz és vizsga dátumokat. A fenti feladat megoldható két lista elem egymásba ágyazásával. Ehhez bővítenünk kell a kezdeti adatforrást egy "vehicle" elemen belüli új tömbbel ("issues"), azaz a járművekhez csatoljuk a hozzájuk kapcsolódó bejegyzéseket.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | { "personal" : { "name" : "Molnár László" , "birthPlace" : "Baja" , "birthDate" : "1975-04-03" }, "vehicles" : [ { "make" : "Honda" , "model" : "Civic" , "year" : 1996, "issues" : [{ "date" : "1996-01-01" , "km" : 0, "description" : "Vétel" }, { "date" : "1997-02-03" , "km" : 15677, "description" : "Szerviz" }, { "date" : "1998-03-04" , "km" : 25400, "description" : "Vizsga" }] },{ "make" : "Ford" , "model" : "S-Max" , "year" : 2006, "issues" : [{ "date" : "2006-06-01" , "km" : 0, "description" : "Vétel" }, { "date" : "2007-02-03" , "km" : 25111, "description" : "Szerviz" }, { "date" : "2008-03-04" , "km" : 45500, "description" : "Vizsga" }] },{ "make" : "Škoda" , "model" : "Ŕoomster" , "year" : 2016 },{ "make" : "Лада" , "model" : "Нива" , "year" : 1986 } ] } |
A tömbök kezelése
A fenti adatforrás 4 elemet tartalmaz a vehicles tömbben és - 2 elemen belül - további 3-3 elemet az issues-ban. Például a Ford S-Max első vizsgájának időpontjára (2008-03-04) így hivatkozhatunk: "vehicles[1].issues[2].date", ha egy külön adatmezőbe kiemelnénk csak ennek az egy elemnek a dátum mezőjét ($F{vehiclesIssueDate}).
A tömbök számozása 0-tól kezdődik, így a vehicles[1] a második járműre mutat (Ford). Sajnos a Dataset editor nem ad támogatást a sorszámok megadásához, mert bármelyik elemet adnánk a field-ekhez, mindig a sorszám nélküli elérési utat menti el (a módosításokat a "Data preview" fülön próbálgathatjuk). Ha nem adjuk meg a tömbök adott elemének számát (vehicles.issues.date), akkor az ezen az elérési úton lévő összes elemet (2*3) visszakapjuk egy tömbben (["1996-01-01","1997-02-03",...]). Így a "vehicles[1].issues[2].date" és a "vehicles.issues.date[5]" ugyanazt az elemet adja vissza.
Lista a listában
Az újabb lista behúzásához a "MainReport" fülről át kell lépnünk a már létező List elemre (dupla kattintás). A Properties fülön érdemes rögtön elnevezni az eddigi List néven futó listánkat (mondjuk VehicleList-nek). Így a Design részen már ez fog megjelenni és könnyebben meg tudjuk majd különböztetni a behúzandó allistától. A behúzáshoz növeljük meg a VehicleList elemet vertikálisan, majd a Palette-ről húzzunk be egy új List elemet. Adjuk meg adatforrásnak az "issues" blokkot(*) és adjuk hozzá a szükséges mezőket (date, km, description), majd ezt az listát is nevezzük el (IssueList). A VehicleList-en lévő 3 mezőt vonjuk egybe és emeljük ki vastagon (bold). Az IssueList-en a km mezőt bővítsük a " km" mértékegységgel a szövegmezőben.
(*) A belső lista adatforrásánál (DataSet) nem a fő adatforrásból kiindulva kell megadnunk az expression mezőben a kifejezést (...subDataSource("vehicles.issues")), hanem a korábbi külső lista "vehicles" adatforrásából indulunk (...subDataSource("issues")).

A módosítások eredménye az előnézeti képen (preview):
A forrásfájlok letölthetők innen, a videó pedig elérhető itt. A következő posztban a listák sorrendjével és szűrésével foglalkozom majd.