ExpressionScript Engine - Vodič za brzi početak
From LimeSurvey Manual
Vodič za brzi početak
Unutar LimeSurveya svoje upitnike možete dodatno prilagoditi pomoću ExpressionScripta (skraćeno: ES). Napomena: "ExpressionScript se u ranijim verzijama zvao Expression Manager (EM). Ako negdje naiđete na naziv Expression Manager, riječ je samo o starom nazivu za ES."
ES se može koristiti za određivanje sljedećeg:
- Navigacija/grananje - omogućuje da odgovori ispitanika promijene redoslijed prikaza pitanja;
- Prilagodba/umetanje (piping) - pomaže vam u oblikovanju pitanja (primjerice pozivanjem na prethodne odgovore ili prilagodbom rečenica prema dobi ili spolu ispitanika) ili u izradi prilagođenih izvješća (poput rezultata procjene ili prilagođenih savjeta);
- Provjera - osigurava da odgovori zadovoljavaju određene kriterije, poput minimalnih i maksimalnih vrijednosti ili određenog obrasca unosa.
ES nudi intuitivan način za određivanje logike za svaku od tih značajki. Gotovo sve što možete zapisati kao standardnu matematičku jednadžbu valjani je izraz.
ES trenutačno omogućuje pristup 70 funkcija i može se jednostavno proširiti kako bi podržavao još njih. Također vam omogućuje pristup vašim varijablama pomoću čitljivih naziva varijabli (umjesto SGQA naziva).
Sljedeći odjeljci prikazuju glavna mjesta na kojima se koristi ES.
Neki upitnici koriste "Goto logiku", pri kojoj ste, ako na Pitanje1 odgovorite opcijom C, preusmjereni na Pitanje5. Takav je pristup vrlo ograničen jer ga je teško provjeriti. Štoviše, lako se pokvari kada je potrebno promijeniti redoslijed pitanja. S druge strane, ES koristi Booleove jednadžbe relevantnosti za određivanje svih uvjeta pod kojima pitanje može biti valjano. Ako je pitanje relevantno, prikazuje se; u suprotnom nije primjenjivo i u bazu podataka se pohranjuje vrijednost "NULL".
Kako biste bolje razumjeli koncept relevantnosti, usredotočimo se na sljedeći upitnik koji izračunava indeks tjelesne mase (BMI) ispitanika. Za preuzimanje kliknite na sljedeću poveznicu: Primjer upitnika s indeksom tjelesne mase.
Jednadžba relevantnosti prikazana je u nastavku u stupcu Relevantnost iza naziva varijable. Vrijednosti relevantnosti za weight, weight_units, height i height_units sve su 1 (zadana vrijednost), što znači da se ta pitanja uvijek prikazuju. Međutim, relevantnost za BMI je {!is_empty(height) and !is_empty(weight)}, što znači da će se BMI izračunati samo ako ispitanik unese vrijednost i za visinu i za težinu (čime se izbjegava rizik od pogreške dijeljenja s nulom). Također, pitanje "Report" prikazuje se samo ako ispitanik odgovori na sva četiri glavna pitanja (height, heightunits, weight, weightunits).

Relevantnost se prikazuje i može se uređivati kada:
- želite pregledati/urediti relevantnost na razini pitanja
- želite pregledati/urediti relevantnost na razini grupe
Pregled / uređivanje relevantnosti na razini pitanja
Ova jednadžba izračunava indeks tjelesne mase (BMI). Pitanje se postavlja samo ako osoba unese svoju visinu i težinu.

Ovo je zaslon za uređivanje pitanja "BMI".

Imajte na umu da pri unosu jednadžbe relevantnosti ne koristite vitičaste zagrade.
Pregled / uređivanje relevantnosti na razini grupe
Usredotočimo se sada na drugi primjer - jednostavan upitnik za popis stanovništva. Za preuzimanje kliknite na sljedeću poveznicu: Primjer upitnika za popis stanovništva.
Prva stranica pita koliko osoba živi s vama i to sprema u varijablu "cohabs". Ova se stranica prikazuje samo ako imate više od jednog supstanara (prikazuje se za drugu osobu koja živi s vama). Također, p2name, p2age i p2sum prikazuju se samo ako pitanje prije svakog od njih sadrži odgovor.

Dakle, grupa također ima kriterije relevantnosti na razini pitanja, tako da se neka pitanja pojavljuju samo ako ste prethodno odgovorili na određena pitanja (npr. p2age se prikazuje ako je odgovoreno na p2name). ES umjesto vas kombinira relevantnost na razini grupe i na razini pitanja. Pitanja u grupi postavljaju se samo ako je grupa kao cjelina relevantna. Tada se postavljaju samo ona pitanja unutar grupe koja su relevantna.
Evo snimke zaslona za uređivanje relevantnosti na razini grupe za Cohabitant 2:

Imajte na umu da pri unosu jednadžbe relevantnosti ne koristite vitičaste zagrade.
Prilagodba/Piping
ES vam omogućuje jednostavnu jednostavnu i složenu uvjetnu prilagodbu. Ponekad vam je potrebna samo jednostavna zamjena, na primjer: "Rekli ste da ste kupili [Proizvod]. Što vam se najviše svidjelo kod njega?". Ponekad vam je potrebna uvjetna zamjena, kao u primjeru "[Gospodin/Gospođa] [Prezime], biste li bili voljni ispuniti naš upitnik?". U ovom slučaju želite koristiti "gospodin ili gospođa" ovisno o spolu osobe. Ponekad je potrebna još složenija zamjena (primjerice na temelju matematičkog izračuna). ES podržava sve ove vrste prilagodbe/pipinga.
Uvjetne jednadžbe
Primjer indeksa tjelesne mase pokazuje mogućnost izračuna BMI-ja osobe, čak i kada joj se omogući da unese visinu i težinu u dvije različite jedinice (cm naspram inča i kg naspram lbs):

U ovom slučaju weightkg je {if(weightunits == "kg", weight, weight * 0.453592)}. Funkcija "if()" znači da ako ispitanik unese težinu u kilogramima, koristi se ta vrijednost, a u suprotnom se unesena vrijednost (alternativa su funte) množi s 0.453592 kako bi se pretvorila u kilograme. Varijabla heightm koristi sličan pristup za izračun visine osobe u metrima (visina u cm/100), čak i ako je visinu unijela u inčima (1 metar = 3.28084 inča).
BMI se izračunava ovako: {weightkg / (heightm * heightm)}.
Naposljetku, izvješće uvjetno prilagođava poruku ispitaniku i prikazuje mu što je unio. (npr. "Rekli ste da ste visoki 2 metra i da težite 70 kg.")
Na donjoj slici weightstatus koristi ugniježđene naredbe "if()" kako bi osobu svrstao u kategorije od pothranjene do izrazito pretile. Njegovu jednadžbu možete vidjeti provjerom njegove logike:

U prozoru za uređivanje ovog pitanja možete vidjeti dvije stvari:
- Pri prilagodbi izrazi moraju biti okruženi vitičastim zagradama
- Izrazi se mogu protezati kroz više redaka ako, kao u ovom slučaju, želite olakšati čitanje ugniježđene uvjetne logike.

Prilagođena pitanja, odgovori i izvješća
BMI izvješće izgleda ovako:

Ovo je prozor za uređivanje istog pitanja.

Sve unutar vitičastih zagrada tretira se kao izraz i na prethodnoj je slici istaknuto bojama (sintaksa). Ako imate tipfelere (primjerice pogrešno napisane ili nedefinirane nazive varijabli ili funkcija), ES će prikazati pogrešku. U našem primjeru u nastavku:
- heightunit.shown je nedefinirani naziv varijable (zapravo je heightunits.shown) i
- "rnd()" je nedefinirana funkcija (ispravan naziv funkcije je "round()").
U oba slučaja pogreške su označene crvenim okvirom kako bi ih bilo lakše uočiti i ispraviti.

Također možete vidjeti da brzo možete izraditi složena izvješća, poput tablice unesenih vrijednosti ili prilagođenih savjeta.
Imajte na umu da pri svakoj prilagodbi izrazi moraju biti okruženi vitičastim zagradama kako bi LimeSurvey znao koji su dijelovi pitanja slobodan tekst, a koje treba obraditi ExpressionScript engine.
Provjera
ES kontrolira rad većine naprednih opcija pitanja. One određuju aspekte poput min/maks broja odgovora, min/maks pojedinačnih vrijednosti, min/maks zbroja vrijednosti te provjere podudaraju li se unesene vrijednosti s navedenim obrascima nizova znakova. Svaka vrijednost u tim poljima smatra se izrazom, pa možete imati min/maks kriterije sa složenim uvjetnim odnosima prema drugim pitanjima.
U svim tim slučajevima, budući da se napredni atribut pitanja uvijek smatra izrazom, pri njegovu navođenju ne koristite vitičaste zagrade.
Na stranici primjeri upitnika možete pronaći mnogo radnih primjera s raznim izrazima za provjeru.
ExpressionScript - prezentacija
Za više informacija o ExpressionScriptu i o tome kako možete koristiti različite izraze za poboljšanje svojeg upitnika, kliknite na sljedeću poveznicu.